假设我有一个基元数组或一个对象列表,无关紧要,是否有一种简短的方法可以进行这种检查:
if (a_primitive == any_item_in_my_collection) {
// do something
}
或
if (an_object_ref.equals(any_item_in_my_collection)) {
// do something
}
不做这个
for (int i = 0; i < myArray.length; i++) {
if (a_primitive == myArray[i]) {
// do something
}
}
谢谢!
答案 0 :(得分:8)
如果希望查找为O(1) - 则需要在关联数组或哈希表中保存数据。否则,您将不得不遍历每个元素。 contains
方法只是为您转身并遍历您的列表。
答案 1 :(得分:7)
你必须使用数组吗?为什么不切换到基于Collection
的API?
然后您可以使用Collection.contains(Object o)
。
如果此集合包含指定的元素,则返回
true
。更正式的是,当且仅当此集合包含至少一个true
元素e
时才返回(o==null ? e==null : o.equals(e))
。
根据具体实施情况,可以在O(1)
或O(log N)
内回答此问题。
答案 2 :(得分:2)
import java.util.*;
int index = Arrays.binarySearch(array, find_this);
(编辑:仅当数组已排序:) - 有关详细信息,请参阅http://www.exampledepot.com/egs/java.util/coll_FindInArray.html
我想到的另一种方法:保留原始数组,你可以这样做:List<T> l = Arrays.asList(arr);
其中T是数组的类型,然后你可以l.contains(o);
。但我认为这不适用于原始类型数组。
答案 3 :(得分:1)
检查包含方法的apache commons ListUtils和ArrayUtils。