Java 检查数组中是否存在元素
用于检查数组中是否存在元素的简单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
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);
}
}