检查列表是否最快的方法 包含唯一的字符串
问题内容:
基本上,我大约有1,000,000个字符串,对于每个请求,我都必须检查一个String是否属于列表。
我担心性能,最好的方法是什么?ArrayList
?哈希?
问题答案:
最好的选择是使用HashSet
并通过contains()
方法检查集合中是否存在字符串。建立HashSet可以通过使用Object方法hashCode()
和进行快速访问equals()
。HashSet
状态的Javadoc
:
此类为基本操作(添加,删除,包含和调整大小)提供了恒定的时间性能,
HashSet
将对象存储在哈希存储桶中,也就是说,该hashCode
方法返回的值将确定对象存储在哪个存储桶中。通过这种方式,HashSet
通过该equals()
方法必须执行的相等检查数量减少为仅其他对象相同的哈希桶。
为了有效地使用HashSets和HashMaps,必须符合javadoc中概述的equals
和hashCode
合同。在这些方法的情况下已经实现了这一目的。java.lang.String