为啥 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[] 数组。 请注意,这仅适用于 sortedint[]
数组,而您描述的示例并非如此。
@LouisWasserman 我没有得到你的评论和它得到的支持。 indexOf
"返回此列表中指定元素第一次出现的索引,如果此列表不包含该元素,则返回 -1。" - 那么为什么它不适用于任意数组呢?
@arekolek 我指的是@rishimaharaj 在我评论上方的评论,描述了使用binarySearch
的计划。
如果有多个数据,比如数据中有多个3,如何获取位置列表?
【参考方案1】:
Arrays.asList(A)
返回一个List<int[]>
。这是因为它需要一个对象数组,而不是原始类型。您的选择包括:
Integer[]
而不是int[]
内联数组,让自动装箱处理它; Arrays.asList(3,8,2,5,1,4,7,9)
可以正常工作
使用Guava'sInts.asList(int...)
方法将原始数组视为List<Integer>
。 (披露:我为 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 <T> List<T>
其中 T 不能是原始的 (int[])。
【讨论】:
以上是关于为啥 indexOf 找不到对象?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 IndexOf 在匈牙利文化中找不到字符 N 与 Y 的组合?
为啥即使创建了对象,django 也找不到与查询匹配的任何对象