用于检查数组中是否存在元素的简单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());
答案 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循环遍历数组,并将每个元素与您要查找的元素匹配。之后你可以从那里出发。
因为它不起作用的原因与其他人之前所说的相同。