为啥 indexOf 找不到对象?

Posted

技术标签:

【中文标题】为啥 indexOf 找不到对象?【英文标题】:Why is indexOf failing to find the object?为什么 indexOf 找不到对象? 【发布时间】:2012-04-16 10:21:45 【问题描述】:

我创建了一个整数列表并尝试返回特定值的索引。 数组是3,8,2,5,1,4,7,6,我想返回indexOf(3),应该是0。

导入 java.util.* 后,我在 Eclipse Java Scrapbook 中尝试了以下内容:

int[] A = 3,8,2,5,1,4,7,9;
Arrays.asList(A).indexOf(3)

我也试过了:

int[] A = 3,8,2,5,1,4,7,6;
ArrayList<Integer> l = new ArrayList(Arrays.asList(A));
l.indexOf(3)

两者都返回 -1。为什么?如何让它按预期工作?

【问题讨论】:

谢谢大家的回答。有了这个改变,虽然我必须改变我的数据结构,所以我将使用 binarySearch 方法,因为它适用于 int[] 数组。 请注意,这仅适用于 sorted int[] 数组,而您描述的示例并非如此。 @LouisWasserman 我没有得到你的评论和它得到的支持。 indexOf "返回此列表中指定元素第一次出现的索引,如果此列表不包含该元素,则返回 -1。" - 那么为什么它不适用于任意数组呢? @arekolek 我指的是@rishimaharaj 在我评论上方的评论,描述了使用binarySearch 的计划。 如果有多个数据,比如数据中有多个3,如何获取位置列表? 【参考方案1】:

Arrays.asList(A) 返回一个List&lt;int[]&gt;。这是因为它需要一个对象数组,而不是原始类型。您的选择包括:

使用Integer[] 而不是int[] 内联数组,让自动装箱处理它; Arrays.asList(3,8,2,5,1,4,7,9) 可以正常工作 使用Guava'sInts.asList(int...) 方法将原始数组视为List&lt;Integer&gt;。 (披露:我为 Guava 做出了贡献。) 使用 Guava 的 Ints.indexOf(int[], int),它直接作用于原始数组。

【讨论】:

【参考方案2】:

它应该是 Integer[] 而不是 int[] 才能使其工作。

Integer[] A = 3,8,2,5,1,4,7,9;
final int i = Arrays.asList(A).indexOf(3);
System.out.println("i = " + i); // prints '0'

【讨论】:

【参考方案3】:

这样做

Integer[] array = 3,8,2,5,1,4,7,9;
List<Integer> list = Arrays.asList(array);

System.out.println(list.indexOf(8));

asList 返回 static &lt;T&gt; List&lt;T&gt; 其中 T 不能是原始的 (int[])。

【讨论】:

以上是关于为啥 indexOf 找不到对象?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 IndexOf 在匈牙利文化中找不到字符 N 与 Y 的组合?

为啥即使创建了对象,django 也找不到与查询匹配的任何对象

indexOf 在actionscript 3中找不到数组上的变量

java为啥每次都是找不到文件。找不到文件?

总是提示找不到符号为啥

为啥找不到 getservletcontext?