在数组中查找元素
有很多方法可以在数组中找到值的位置。以下示例片段都假设该数组是以下之一:
String[] strings = new String[] { "A", "B", "C" };
int[] ints = new int[] { 1, 2, 3, 4 };
另外,每个都将 index
或 index2
设置为所需元素的索引,或者如果元素不存在则将 -1
设置为 -1
。
使用 Arrays.binarySearch
(仅用于排序数组)
int index = Arrays.binarySearch(strings, "A");
int index2 = Arrays.binarySearch(ints, 1);
使用 Arrays.asList
(仅适用于非原始数组)
int index = Arrays.asList(strings).indexOf("A");
int index2 = Arrays.asList(ints).indexOf(1); // compilation error
使用 Stream
Version >= Java SE 8
int index = IntStream.range(0, strings.length)
.filter(i -> "A".equals(strings[i]))
.findFirst()
.orElse(-1); // If not present, gives us -1.
// Similar for an array of primitives
使用循环进行线性搜索
int index = -1;
for (int i = 0; i < array.length; i++) {
if ("A".equals(array[i])) {
index = i;
break;
}
}
// Similar for an array of primitives
使用 org.apache.commons 等第三方库进行线性搜索
int index = org.apache.commons.lang3.ArrayUtils.contains(strings, "A");
int index2 = org.apache.commons.lang3.ArrayUtils.contains(ints, 1);
注意:使用直接线性搜索比包装在列表中更有效。
测试数组是否包含元素
上面的示例可以通过简单测试以查看计算的索引是否大于或等于零来测试数组是否包含元素。
或者,还有一些更简洁的变化:
boolean isPresent = Arrays.asList(strings).contains("A");
Version >= Java SE 8
boolean isPresent = Stream<String>.of(strings).anyMatch(x -> "A".equals(x));
boolean isPresent = false;
for (String s : strings) {
if ("A".equals(s)) {
isPresent = true;
break;
}
}
boolean isPresent = org.apache.commons.lang3.ArrayUtils.contains(ints, 4);