在Java中查找数组中的元素

Cas*_*ash 21 java arrays

Java是否有内置函数允许我线性搜索数组中的元素,还是只需要使用for循环?

Dou*_*las 19

有一种contains列表方法,所以你应该能够做到:

Arrays.asList(yourArray).contains(yourObject);
Run Code Online (Sandbox Code Playgroud)

警告:这可能不符合您(或我)的期望,请参阅下面的Tom的评论.

  • @Casebash它编译但没有按预期执行.由于邪恶的varargs,该参数被视为基元数组的数组. (10认同)
  • 注意不要将它与原始数组一起使用. (3认同)
  • 这很短,但这个用例很常见,他们真的应该在语言中添加一个功能 (2认同)

Tre*_*ton 13

使用Java 8,您可以这样做:

int[] haystack = {1, 2, 3};
int needle = 3;

boolean found = Arrays.stream(haystack).anyMatch(x -> x == needle);
Run Code Online (Sandbox Code Playgroud)

你需要这样做

boolean found = Arrays.stream(haystack).anyMatch(x -> needle.equals(x));
Run Code Online (Sandbox Code Playgroud)

如果你正在使用对象.


hvg*_*des 10

您可能需要考虑使用Collection实现而不是平面数组.

Collection接口定义了一个contains(Object o)方法,它返回true/ false.

ArrayList实现定义了一个indexOf(Object o),它给出了一个索引,但该方法不在所有集合实现上.

这两种方法都需要正确实现该equals()方法,并且您可能需要一个正确实现的hashCode()方法,以防您使用基于哈希的方法Collection(例如HashSet).


duf*_*ymo 7

使用for循环.数组中没有任何内置功能.或者切换到java.util Collection类.


kro*_*ock 5

您可以使用多种Arrays.binarySearch()方法之一。请记住,必须先对数组进行排序。

  • 我们只能假设是这种情况,例如整数数组、字符串数组等。您始终可以提供自定义的 [`Comparator`](http://download.oracle.com/javase/6/docs/api/ java/util/Comparator.html) 进行排序和搜索(如果需要)。 (2认同)
  • 很难相信没有 Arrays.search ... <sigh> (2认同)