在ArrayList <string> </string>中查找

时间:2013-01-15 14:55:26

标签: java arraylist

我有这个。

private ArrayList<String> words;

这是一本字典,所以单词已经排序了。通过旧的研究,我知道二项式搜索应该非常快,我想Java已经实现了必要的。

那么,查找排序 ArrayList中是否存在某个字符串的最有效方法是什么? 或者我应该使用其他类型?

谢谢。

4 个答案:

答案 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中组织您的数据。这也有利于加快插入/移除速度以及您希望在最快的时间内完成的所有其他操作。

谷歌和其他地方有很多指南可以帮助你入门。