4

我有

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

所以我想index of 23从不 myArray迭代任何循环 ( for, while...) 中获得。

我会做类似的事情Arrays.asList(myArray).indexOf(23)

这对我不起作用。我得到-1作为输出。

这是与String[] Like一起工作

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

那么为什么这不起作用int[]呢??

4

4 回答 4

13
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它是对象。

当我们定义 aList时,我们将其定义为List<String>or List<Integer>。所以原语不在List. 然后Arrays.asList(myArray).indexOf("23")找到等效对象的索引。

于 2013-08-12T05:00:43.497 回答
4

我同意 Ruchira 的观点,并且还想指出,问题与int原始的 whileStringInteger实际对象有关。(请注意,我会将此作为评论发布,但要等到 50 声望;))

于 2013-08-12T05:03:02.067 回答
2

如果您想将原语数组转换为盒装原语列表,请利用Apache Commons。获得列表后,如下所示,使用 List 中的 API 按索引查找对象。

List<Integer> list = Arrays.asList(ArrayUtils.toObject(myArray));
于 2013-08-12T05:09:45.840 回答
1

您可以考虑保持数组排序并使用二进制细分来确定索引。在这种情况下,插入和查找都是 O(log(n))(而不是分别为 O(1) 和 O(n))。

如果您要进行大量查找,您可能希望使用不同的数据结构,例如哈希映射,这不仅是为了提高性能,还因为它更容易编写。

于 2013-08-12T05:25:42.037 回答