【发布时间】:2011-03-23 23:44:03
【问题描述】:
Java 是否有内置函数允许我线性搜索数组中的元素,还是只需要使用 for 循环?
【问题讨论】:
Java 是否有内置函数允许我线性搜索数组中的元素,还是只需要使用 for 循环?
【问题讨论】:
列表有一个contains 方法,所以你应该可以这样做:
Arrays.asList(yourArray).contains(yourObject);
警告:这可能不会达到您(或我)的预期,请参阅下面 Tom 的评论。
【讨论】:
使用 Java 8,您可以这样做:
int[] haystack = {1, 2, 3};
int needle = 3;
boolean found = Arrays.stream(haystack).anyMatch(x -> x == needle);
你需要这样做
boolean found = Arrays.stream(haystack).anyMatch(x -> needle.equals(x));
如果您正在处理对象。
【讨论】:
ArrayList,则使用boolean found = haystack.contains(needle) 会更容易阅读。
使用 for 循环。数组中没有内置任何内容。或者切换到 java.util Collection 类。
【讨论】:
您可能需要考虑使用Collection 实现而不是平面数组。
Collection 接口定义了一个contains(Object o) 方法,该方法返回true/false。
ArrayList 实现定义了一个indexOf(Object o),它给出了一个索引,但该方法并非在所有集合实现中都存在。
这两种方法都需要正确实现 equals() 方法,并且您可能需要正确实现 hashCode() 方法,以防万一您使用基于哈希的 Collection(例如 HashSet)。
【讨论】:
您可以使用多种Arrays.binarySearch() 方法之一。请记住,数组必须先排序。
【讨论】:
Comparator 进行排序和搜索。