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