【问题标题】:Finding an element in an array in Java在Java中查找数组中的元素
【发布时间】:2011-03-23 23:44:03
【问题描述】:

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

【问题讨论】:

    标签: java arrays


    【解决方案1】:

    列表有一个contains 方法,所以你应该可以这样做:

    Arrays.asList(yourArray).contains(yourObject);
    

    警告:这可能不会达到您(或我)的预期,请参阅下面 Tom 的评论。

    【讨论】:

    • 这很短,但这个用例很常见,他们真的应该在语言中添加一个函数
    • 注意不要将它与原始数组一起使用。
    • @Casebash 它编译但不符合您的预期。由于邪恶的可变参数,该参数被视为原始数组的数组。
    【解决方案2】:

    使用 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) 会更容易阅读。
    【解决方案3】:

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

    【讨论】:

    • 最佳答案在这里。
    【解决方案4】:

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

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

    ArrayList 实现定义了一个indexOf(Object o),它给出了一个索引,但该方法并非在所有集合实现中都存在。

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 这是一个选项,只有数组的元素本身可以比较。
      • 我们只能假设是这种情况,例如整数、字符串等数组。如果需要,您可以随时提供自定义 Comparator 进行排序和搜索。
      • 很难相信没有 Arrays.search ...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多