如何找到与特定值匹配的整数数组的索引

4

我有

int myArray[]= {12,23,10,22,10}; 

我想要从myArray中获取23的索引,但不想使用循环(如forwhile ...)进行迭代。

我会尝试像这样做:Arrays.asList(myArray).indexOf(23)

但对我来说这并不起作用。我得到了-1作为输出结果。

这对于String[]可以解决。

  String myArray[]= {"12","23","10","22","10"}; 
  Arrays.asList(myArray).indexOf("23")

那么为什么这对于int[]不起作用呢?
4个回答

14
Integer myArray[]= {12,23,10,22,10};
System.out.println(Arrays.asList(myArray).indexOf(23)); 

会解决问题

Arrays.asList(myArray).indexOf(23) 这是搜索对象,所以我们必须使用 int 的对象类型,因为 int 是原始类型。

String myArray[]= {"12","23","10","22","10"}; 
Arrays.asList(myArray).indexOf("23");
在第二种情况下,这将起作用,因为String是对象。
当我们定义一个List时,我们将其定义为List<String>List<Integer>。 因此,基元类型不在List中使用。 然后,Arrays.asList(myArray).indexOf("23")查找相等对象的索引。

@Ruchira 我同意这个观点。那么我们如何将基本类型转换为对象? - HybrisHelp
@ankit337 你可以使用 Apache lang 库 (http://commons.apache.org/lang/) 来执行以下操作:Integer[] newArray = ArrayUtils.toObject(oldArray); - Ruchira Gayan Ranaweera

4

我同意Ruchira的观点,同时也想指出问题在于int是一个原始类型,而StringInteger是实际对象。(请注意,我本来会将此作为评论发布,但在获得50个声望之前无法这样做;) )


2
如果你想将原始数组转换为装箱后的列表,可以利用Apache Commons。一旦你有了列表,就像下面展示的那样,使用List中的API按索引查找对象即可。
List<Integer> list = Arrays.asList(ArrayUtils.toObject(myArray));

1
你可以考虑保持数组排序,并使用二进制分割来决定索引。在这种情况下,插入和查找都将是O(log(n))(而不是O(1)和O(n))。如果你要经常查找,你可能需要使用其他数据结构,比如哈希映射,这不仅可以提高性能,而且编写起来也更容易。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接