检查数组中是否存在元素

Ala*_*ano 7 java

一个简单的Java代码,用于检查数组中是否存在元素:

import java.util.Arrays;

public class Main {
    static int[] numbers = {813, 907, 908, 909, 910};

    public static void main(String[] args) {
        int number = 907;
        //Integer number = 907; // the same thing -- it's not found.
        boolean b = Arrays.asList(numbers).contains(number);
        System.out.println(b);  // => false
    }
}
Run Code Online (Sandbox Code Playgroud)

1)为什么在阵列中找不到907?

2)如果有更好的方法,请继续分享您的知识.

更新:

据说,asList将您转换int[]成一个List<int[]>成员:原始列表.但是,我希望以下代码能给我1,但它给了我5:

System.out.println(Arrays.asList(numbers).size());
Run Code Online (Sandbox Code Playgroud)

Ted*_*opp 12

问题是Arrays.asList(numbers)没有按你的想法做.它将您转换int[]为一个List<int[]>成员:原始列表.

您可以进行简单的线性搜索,或者,如果您的numbers数组始终排序,请使用Arrays.binarySearch(numbers, 907);并测试结果是否为负(意味着未找到).

  • @MariusKavansky - 好吧,`System.out.println(Arrays.asList(numbers).size());`为我打印1.你确定你没有将`numbers`的声明改为`Integer []`吗? (2认同)

Ang*_*chs 6

列表不包含基元,因此Arrays.asList(int [])将生成一个List类型为一的条目int[].

此代码有效:

static Integer[] numbers = {813, 907, 908, 909, 910};

public static void main(String[] args) {
    Integer number = 907;
    boolean b = Arrays.asList(numbers).contains(number);
    System.out.println(b);  // => false
}
Run Code Online (Sandbox Code Playgroud)

对于你的问题,Arrays.asList(numbers)只要它是一个包含的内容int[]:

这段代码:

static int[] numbers = {813, 907, 908, 909, 910};

public static void main(String[] args) {
    int number = 907;
    List<int[]> list = Arrays.asList(numbers);

    boolean b = list.contains(number);
    System.out.println(b);  // => false
    System.out.println("list: " + list);
    for(int[] next : list) {
        System.out.println("content: " + Arrays.toString(next));
    }
}
Run Code Online (Sandbox Code Playgroud)

有这个结果:

false
list: [[I@da89a7]
content: [813, 907, 908, 909, 910]
Run Code Online (Sandbox Code Playgroud)

如您所见,list包含一个类型的元素int[]([[I表示int[]).它具有最初创建的元素.