web-dev-qa-db-ja.com

int配列の要素のインデックスを見つける方法は?

タイプintのJava配列で特定の値のインデックスを見つけるにはどうすればよいですか?

並べ替えられていない配列でArrays.binarySearchを使用してみましたが、正しい答えが得られる場合があります。

71
Jeomark
Integer[] array = {1,2,3,4,5,6};

Arrays.asList(array).indexOf(4);

このソリューションは、List型の新しいオブジェクトを作成するため、スレッドセーフであることに注意してください。

また、毎回新しいオブジェクトを作成するため、ループまたはそのようなものでこれを呼び出したくない

119
Pablo Fernandez

Guavaコレクションを使用している場合の別のオプションは Ints.indexOf です

// Perfect storm:
final int needle = 42;
final int[] haystack = [1, 2, 3, 42];

// Spoiler alert: index == 3
final int index = Ints.indexOf(haystack, needle);

これは、スペース、時間、コードの再利用が重要な場合に最適です。また、非常に簡潔です。

25
btiernay

API を見て、最初に配列をソートする必要があると書かれています

そう:

Arrays.sort(array);
Arrays.binarySearch(array, value);

配列をソートしたくない場合:

public int find(double[] array, double value) {
    for(int i=0; i<array.length; i++) 
         if(array[i] == value)
             return i;
}
16
Jamie Curtis

このメソッドをクラスにコピーします

 public int getArrayIndex(int[] arr,int value) {

        int k=0;
        for(int i=0;i<arr.length;i++){

            if(arr[i]==value){
                k=i;
                break;
            }
        }
    return k;
}

2つの配列パラメーターと値を渡してこのメ​​ソッドを呼び出し、戻り値を整数変数に格納します。

int indexNum = getArrayIndex(array,value);

ありがとうございました

12
Dalvinder Singh

リストに変換してから、indexOfメソッドを使用できます。

Array.asList(array).indexOf(1); 

http://download.Oracle.com/javase/1.5.0/docs/api/Java/util/Arrays.html#asList(T ...) http:// download.Oracle.com/javase/1.5.0/docs/api/Java/util/List.html#indexOf(Java.lang.Object

3
agmcleod

バイナリ検索を使用する前に値を並べ替える必要があります。それ以外の場合、手動の方法はタブ内のすべてのintを試すことです。

public int getIndexOf( int toSearch, int[] tab )
{
  for( int i=0; i< tab.length ; i ++ )
    if( tab[ i ] == toSearch)
     return i;

  return -1;
}//met

別の方法は、マップ内の各値のすべてのインデックスをマップすることです。

tab[ index ] = value;
if( map.get( value) == null || map.get( value) > index )
    map.put( value, index );

次に、map.get(value)でインデックスを取得します。

よろしく、ステファン

@pst、コメントありがとう。他の代替方法を投稿できますか?

3
Snicolas

この問題を解決するには、最新のJavaを使用できます。以下のコードを使用してください:

static int findIndexOf(int V, int[] arr) {
        return IntStream.range(1, arr.length).filter(i->arr[i]==V).findFirst().getAsInt();
    }
2
Vahid

シンプル:

public int getArrayIndex(int[] arr,int value) {
    for(int i=0;i<arr.length;i++)
        if(arr[i]==value) return i;
    return -1;
}
1
Gil SH
    Integer[] arr = { 0, 1, 1, 2, 3, 5, 8, 13, 21 };
    List<Integer> arrlst = Arrays.asList(arr);
    System.out.println(arrlst.lastIndexOf(1));
1
alok

探しているインデックスが見つかるまで配列を調べるか、代わりにListを使用します。 asList() を使用して配列をリストに変換できることに注意してください。

0
rid
/**
     * Method to get the index of the given item from the list
     * @param stringArray
     * @param name
     * @return index of the item if item exists else return -1
     */
    public static int getIndexOfItemInArray(String[] stringArray, String name) {
        if (stringArray != null && stringArray.length > 0) {
            ArrayList<String> list = new ArrayList<String>(Arrays.asList(stringArray));
            int index = list.indexOf(name);
            list.clear();
            return index;
        }
        return -1;
    }
0
Manmohan Soni

次のようにできます:

 public class Test {

public static int Tab[]  = {33,44,55,66,7,88,44,11,23,45,32,12,95};
public static int search = 23;

public static void main(String[] args) {
    long stop = 0;
    long time = 0;
    long start = 0;
    start = System.nanoTime();
    int index = getIndexOf(search,Tab);
    stop = System.nanoTime();
    time = stop - start;
    System.out.println("equal to took in nano seconds ="+time);
    System.out.println("Index  of searched value is: "+index);
    System.out.println("De value of Tab with searched index is: "+Tab[index]);
    System.out.println("==========================================================");
    start = System.nanoTime();
    int Bindex = bitSearch(search,Tab);
    stop = System.nanoTime();
    time = stop - start;
    System.out.println("Binary search took nano seconds ="+time);
    System.out.println("Index  of searched value is: "+Bindex);
    System.out.println("De value of Tab with searched index is: "+Tab[Bindex]);
}



public static int getIndexOf( int toSearch, int[] tab ){
     int i = 0;
     while(!(tab[i] == toSearch) )
     {  i++; }
       return i; // or return tab[i];
   }
public static int bitSearch(int toSearch, int[] tab){
    int i = 0;
    for(;(toSearch^tab[i])!=0;i++){
    }
    return i;

}

}

XORを追加しました:)

0
Andre

Forループを使用するメインの方法では:-私の例の3番目のforループは、この質問に対する答えです。 -私の例では、20個のランダムな整数の配列を作成し、変数に最小数を割り当て、ループの数をカウントしているときに配列の位置が最小値に達したときにループを停止しました。

import Java.util.Random;
public class scratch {
    public static void main(String[] args){
        Random rnd = new Random();
        int randomIntegers[] = new int[20];
        double smallest = randomIntegers[0];
        int location = 0;

        for(int i = 0; i < randomIntegers.length; i++){             // fills array with random integers
            randomIntegers[i] = rnd.nextInt(99) + 1;
            System.out.println(" --" + i + "-- " + randomIntegers[i]);
        }

        for (int i = 0; i < randomIntegers.length; i++){            // get the location of smallest number in the array 
            if(randomIntegers[i] < smallest){
                smallest = randomIntegers[i];                 
            }
        }

        for (int i = 0; i < randomIntegers.length; i++){                
            if(randomIntegers[i] == smallest){                      //break the loop when array location value == <smallest>
                break;
            }
            location ++;
        }
        System.out.println("location: " + location + "\nsmallest: " + smallest);
    }
}

コードは、すべての数値とその位置、および最小数の後に最小数が続く位置を出力します。

0
extremeoats

誰かがまだ答えを探している場合

  1. [Apache Commons Library] [1]からArrayUtils.indexOf()を使用できます。

  2. Java 8を使用している場合は、Strean APIも使用できます。

    public static int indexOf(int[] array, int valueToFind) {
        if (array == null) {
            return -1;
        }
        return IntStream.range(0, array.length)
                .filter(i -> valueToFind == array[i])
                .findFirst()
                .orElse(-1);
    }
    

    [1]: https://commons.Apache.org/proper/commons-lang/javadocs/api-3.1/org/Apache/commons/lang3/ArrayUtils.html#indexOf(int []、%20int )

0
Deep Shah
static int[] getIndex(int[] data, int number) {
    int[] positions = new int[data.length];
    if (data.length > 0) {
        int counter = 0;
        for(int i =0; i < data.length; i++) {
            if(data[i] == number){
                positions[counter] = i;
                counter++;
            }
        }
    }
    return positions;
}
0
Rahul9191