Java中的if(variable == [集合中的任何项目])

时间:2010-03-05 01:27:40

标签: java arrays collections

假设我有一个基元数组或一个对象列表,无关紧要,是否有一种简短的方法可以进行这种检查:

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
    }
}

谢谢!

4 个答案:

答案 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 ListUtilsArrayUtils