Arraylist vs Array用于查找元素?

时间:2013-09-04 15:06:03

标签: java

哪种是在性能方面找到元素的最有效方法。说我有100个字符串。我需要找出那些批量字符串中是否有指定的字符串。我在Arraylist中有contains()方法,但是为了同样的目的,我需要遍历Array。任何人都可以解释,这是在表现方面做到这一点的最佳方式。

4 个答案:

答案 0 :(得分:19)

  

说我有100个字符串。我需要找出那些批量字符串中是否有指定的字符串。

听起来你想要一个HashSet<String> - 而不是一个列表一个数组。至少,如果每次要搜索时数百个字符串相同,就是这种情况。如果你每次都在一组不同的字符串中搜索,那么如果你以任意顺序收到这个字符集,你就不会比O(N)做得更好。

通常,检查列表/数组中的包含是O(N)操作,而在基于散列的数据结构中,它是O(1)。当然还有执行散列和相等检查的成本,但这是另一回事。

另一个选项是排序列表,它是O(log N)。

如果您关心订购,可能需要考虑LinkedHashSet<String>,它维护广告订单顺序但仍具有O(1)访问权限。 (它基本上是一个与哈希集相结合的链表。)

答案 1 :(得分:4)

Arraylist使用数组作为后备数据,因此

的性能相同

答案 2 :(得分:1)

查看调用ArrayList#contains

indexOf()的实现
public int indexOf(Object o) {
    if (o == null) {
        for (int i = 0; i < size; i++)
            if (elementData[i]==null)
                return i;
    } else {
        for (int i = 0; i < size; i++)
            if (o.equals(elementData[i]))
                return i;
    }
    return -1;
}

如果你自己为数组实现了contains(),那么你会做同样的事情。

答案 3 :(得分:0)

您不必担心性能问题。它不会影响太多。它在contains()

中的好用且易于使用的ArrayList方法