如何在int数组中找到元素的索引?

Jeo*_*ark 74 java arrays indexing search

如何在类型的Java数组中找到某个值的索引int

我尝试Arrays.binarySearch在我的未排序数组上使用它,它有时只给出正确的答案.

Pab*_*dez 122

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

Arrays.asList(array).indexOf(4);
Run Code Online (Sandbox Code Playgroud)

请注意,此解决方案是线程安全的,因为它创建了一个List类型的新对象.

你也不想在循环中或类似的东西中调用它,因为你每次都要创建一个新对象

  • 实际上代码不起作用.检查[为什么indexOf无法找到对象?](http://stackoverflow.com/questions/9981823/why-is-indexof-failing-to-find-the-object) (51认同)
  • 您需要将数组转换为Integer []而不是int [].原始数组不会自动装箱. (12认同)

bti*_*nay 26

如果您使用Guava Collections,另一个选择是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);
Run Code Online (Sandbox Code Playgroud)

当空间,时间和代码重用非常宝贵时,这是一个很好的选择.它也非常简洁.


Jam*_*tis 17

看一下API,它说你必须先对数组进行排序

所以:

Arrays.sort(array);
Arrays.binarySearch(array, value);
Run Code Online (Sandbox Code Playgroud)

如果您不想对数组进行排序:

public int find(double[] array, double value) {
    for(int i=0; i<array.length; i++) 
         if(array[i] == value)
             return i;
}
Run Code Online (Sandbox Code Playgroud)

  • +1然而,应该注意`Arrays.sort`*变异*输入和原始数组将被修改. (7认同)

Dal*_*ngh 12

将此方法复制到您的班级

 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;
}
Run Code Online (Sandbox Code Playgroud)

使用传递两个参数Array和value调用此方法,并将其返回值存储在整数变量中.

int indexNum = getArrayIndex(array,value);
Run Code Online (Sandbox Code Playgroud)

谢谢


小智 6

ArrayUtils.indexOf(array, value);
Ints.indexOf(array, value);
Arrays.asList(array).indexOf(value);
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码可以解决问题,但[包括解释](//meta.stackexchange.com/q/114762) 如何以及为何解决问题确实有助于提高帖子的质量,并可能会带来更多结果赞成票。请记住,您是在为将来的读者回答问题,而不仅仅是现在提问的人。请[编辑]您的答案以添加解释并指出适用的限制和假设。 (3认同)

Vah*_*hid 5

您可以使用现代 Java 来解决这个问题。请使用以下代码:

static int findIndexOf(int V, int[] arr) {
    return IntStream.range(0, arr.length)
                    .filter(i->arr[i]==V)
                    .findFirst()
                    .getAsInt();
}
Run Code Online (Sandbox Code Playgroud)