检查数组中是否存在元素

时间:2013-07-07 09:00:40

标签: 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
    }
}

1)为什么不在数组中找到907?

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

更新:

据说asList将您的int[]转换为List<int[]>,其中包含一名成员:原始列表。但是,我希望以下代码能给我1,但它给了我5:

System.out.println(Arrays.asList(numbers).size());

6 个答案:

答案 0 :(得分:12)

问题是Arrays.asList(numbers)没有按照你的想法行事。它将您的int[]转换为List<int[]>,其中包含一个成员:原始列表。

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

答案 1 :(得分: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
}

对于您的问题,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));
    }
}

有这个结果:

false
list: [[I@da89a7]
content: [813, 907, 908, 909, 910]

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

答案 2 :(得分:2)

使用番石榴ImmutableSet

public class Main {

    private static final Set<Integer> NUMBERS = ImmutableSet.of(813, 907, 908, 909, 910);

    public static void main(final String[] args) {
        final int number = 907;
        final boolean b = NUMBERS.contains(number);
        System.out.println(b); // true
    }
}

ImmutableSet确保没有人向NUMBERS

添加内容

答案 3 :(得分:1)

由于您的数组已排序,因此您可以使用Arrays.binarySearch()

这使您无需先转换为List。检查此方法的返回码:如果为正,则元素在数组中;如果它是否定的,则不是:

int number = 907;
System.out.println(Arrays.binarySearch(numbers, number) >= 0);

答案 4 :(得分:0)

请改用此代码。这只是你必须处理Java强类型怪癖的那一次:)

import java.util.Arrays;

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

        public static void main(String[] args) {
        Integer number = new Integer(907);

        boolean b = Arrays.asList(numbers).contains(number);
        System.out.println(b); 
    }
}

答案 5 :(得分:0)

您可以使用for循环遍历数组,并将每个元素与您要查找的元素匹配。之后你可以从那里出发。

因为它不起作用的原因与其他人之前所说的相同。