我有
int myArray[]= {12,23,10,22,10};
所以我希望从index of 23
获取myArray
而不迭代任何循环(for
,while
...)。
我会做Arrays.asList(myArray).indexOf(23)
这对我不起作用。我得到-1
作为输出。
这适用于String[]
喜欢
String myArray[]= {"12","23","10","22","10"};
Arrays.asList(myArray).indexOf("23")
那为什么这不适用于int[]
? ?
答案 0 :(得分:12)
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")
找到等效对象的索引。
答案 1 :(得分:4)
我同意Ruchira,并且还想指出问题与int
是原始的事实有关,而String
和Integer
是实际对象。 (注意我会将此作为评论发布,但不能直到50声誉;))
答案 2 :(得分:2)
如果要将基元数组转换为盒装基元列表,请使用Apache Commons。获得列表后,如下所示,使用List中的API按索引查找对象。
List<Integer> list = Arrays.asList(ArrayUtils.toObject(myArray));
答案 3 :(得分:1)
您可以考虑保持数组排序并使用二进制细分来决定索引。在这种情况下,插入和查找都是O(log(n))(而不是分别是O(1)和O(n))。
如果你正在进行大量的查找,你可能想要使用不同的数据结构,例如哈希映射,不仅仅是为了提高性能,还因为它可以更容易编写。