我有这个。
private ArrayList<String> words;
这是一本字典,所以单词已经排序了。通过旧的研究,我知道二项式搜索应该非常快,我想Java已经实现了必要的。
那么,查找排序 ArrayList中是否存在某个字符串的最有效方法是什么? 或者我应该使用其他类型?
谢谢。
答案 0 :(得分:8)
或者我应该使用其他类型?
尝试使用HashSet<String>
代替。它的contains方法具有O(1)查找,假设没有太多的哈希冲突。来自文档:
该类为基本操作(添加,删除,包含和大小)提供恒定的时间性能,假设散列函数在桶之间正确地分散元素。
对已排序ArrayList
的二进制搜索仅为O(log n)。这仍然非常快,但速度不如使用HashSet
。
答案 1 :(得分:3)
二进制搜索在排序数组中是最快的。如果使用哈希集,可以在恒定时间内进行存在测试。
答案 2 :(得分:2)
取决于您尝试查找特定字符串的次数。您可能想尝试HashMap<String, String>
,因为随着地图的增长,这将保持快速。
答案 3 :(得分:1)
如果您要进行二元搜索,我建议您将数据重组为Binary Search Tree
ArrayLists通常用于顺序操作和随机访问。如果您要进行搜索并希望最快速的查找,那么最好从get go中组织您的数据。这也有利于加快插入/移除速度以及您希望在最快的时间内完成的所有其他操作。
谷歌和其他地方有很多指南可以帮助你入门。