Java 检查数组中是否存在元素

Java 检查数组中是否存在元素,java,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 -- i

用于检查数组中是否存在元素的简单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
,其中只有一个成员:原始列表。但是,我希望下面的代码给我1,但它给我5:

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

列表不包含原语,因此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));
    }
}

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

由于数组已排序,您可以使用

这允许您不必首先转换为
列表
。检查此方法的返回代码:如果为正,则元素在数组中;如果为负,则不在数组中:

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

公共类主{
私有静态最终集编号=不可变集编号(8139079080910);
公共静态void main(最终字符串[]args){
最终整数=907;
最终布尔b=数字。包含(数字);
System.out.println(b);//true
}
}

ImmutableSet
确保没有人向
数字添加任何内容

问题在于
数组。asList(数字)
不是按照您的想法进行的。它是将您的
int[]
转换为一个
列表,其中只有一个成员:原始列表


你可以做一个简单的线性搜索,或者,如果你的
numbers
数组总是被排序的话,可以使用
Arrays.binarySearch(numbers,907);
并测试结果是否为负(意思是找不到)。

用这个代码代替。这只是你必须处理Java强类型怪癖的时候之一:)


您可以使用一个for循环遍历数组,并将每个元素与您要查找的元素相匹配,然后就可以从那里开始了


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

你试过使用Integer number=907;?这是你的问题吗?不,
int
并不意味着
Integer
。第一个是基元类型,第二个是对象。@user251414,哇,这真是个好主意,使用线程。:p“然而,我希望下面的代码给我1,但它给我5”-我认为你犯了一个错误。当我将该语句添加到程序并运行它时,它显示为“1”。它正在将int[]转换为一个包含单个成员的列表:原始列表。--抱歉,我没有得到这个。
。asList(num)
表示“as List”“。您不应该期望名为
.asList(num)
的方法返回数组…@MariusKavansky-嗯,
System.out.println(Arrays.asList(numbers.size());
为我打印1。您确定没有将
numbers
的声明更改为
Integer[]
?使用int[]类型的一个条目吗?”--这个条目的值是多少?@MariusKavansky原始数组。我会更新我的答案来解释。嗯,好的,我需要测试;但是,如果这是一个排序数组,我的方法对你有效。删除不相关的部分。你注意到你的答案与我的完全相同吗?不完全一样,对象与符号…它也短了一点
int number = 907;
System.out.println(Arrays.binarySearch(numbers, number) >= 0);
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
    }
}
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); 
    }
}