Java 在ArrayList中查找<;字符串>;
我有这个Java 在ArrayList中查找<;字符串>;,java,arraylist,Java,Arraylist,我有这个 private ArrayList<String> words; 私有数组列表词; 这是一本字典,所以单词已经分类了。根据以前的研究,我知道二项式搜索应该非常快,我想Java已经实现了必要的功能 那么,找到排序的数组列表中是否存在某个字符串的最有效方法是什么? 或者我应该使用不同的类型 多谢各位 或者我应该使用不同的类型 尝试改用哈希集。假设没有太多的散列冲突,它的方法有O(1)查找。从文件中: 假设散列函数将元素正确地分散在存储桶中,则该类为基本操作(添加、删除、包含
private ArrayList<String> words;
私有数组列表词;
这是一本字典,所以单词已经分类了。根据以前的研究,我知道二项式搜索应该非常快,我想Java已经实现了必要的功能
那么,找到排序的数组列表中是否存在某个字符串的最有效方法是什么?
或者我应该使用不同的类型
多谢各位
或者我应该使用不同的类型
尝试改用哈希集。假设没有太多的散列冲突,它的方法有O(1)查找。从文件中:
假设散列函数将元素正确地分散在存储桶中,则该类为基本操作(添加、删除、包含和大小)提供恒定的时间性能
排序的ArrayList
上的二进制搜索仅为O(logn)。这仍然非常快,但不如使用HashSet
那么快
或者我应该使用不同的类型
尝试改用哈希集。假设没有太多的散列冲突,它的方法有O(1)查找。从文件中:
假设散列函数将元素正确地分散在存储桶中,则该类为基本操作(添加、删除、包含和大小)提供恒定的时间性能
排序的ArrayList
上的二进制搜索仅为O(logn)。这仍然非常快,但不如使用哈希集快
取决于您尝试查找特定字符串的次数。您可能需要尝试使用哈希映射,因为随着映射的增长,哈希映射将保持快速。取决于您尝试查找特定字符串的次数。您可能需要尝试使用HashMap
,因为这将随着映射的增长而保持快速。二进制搜索将是排序数组中最快的搜索。如果您使用的是散列集,则可以在固定时间内进行存在性测试。二进制搜索将是排序数组中最快的。如果您使用的是散列集,则可以在固定时间内进行存在性测试。如果您要进行二进制搜索,我建议您将数据重新组织到一个二进制搜索树中
ArrayList通常用于顺序操作和随机访问。如果您要进行搜索,并且希望以最快的速度查找,那么最好从一开始就组织您的数据。这也有利于更快地插入/删除以及您希望在尽可能快的时间内完成的所有其他操作
谷歌和其他网站上有大量的指南可以帮助您入门。如果您要进行二进制搜索,我建议您将数据重新组织到一个二进制搜索树中
ArrayList通常用于顺序操作和随机访问。如果您要进行搜索,并且希望以最快的速度查找,那么最好从一开始就组织您的数据。这也有利于更快地插入/删除以及您希望在尽可能快的时间内完成的所有其他操作
谷歌和其他网站上有大量的指南可以帮助你入门。@MarkByers“平均”表明,一定有比O(1)更快的情况。现在我非常想看看这将如何实现。O(logn)在实践中已经足够好了,特别是当使用集合意味着需要复制数据时…谢谢。ArrayList上的“contains”方法是否较慢?这是因为我还需要保留字符串的标记。@Durandal平均来说意味着,如果存在哈希冲突,则需要超过O(1)
。我不确定任何算法如何能比O(1)
更快@BeppiMenozzi是的,它必须迭代整个数组(O(n)
)以测试是否存在(也就是说,如果你没有对数据的排序做任何假设)。@fox。。。谢谢无论如何,正如我在其他地方所说,我也需要标记:那么HashMap是一个好的选择吗?@MarkByers“平均”表明,一定有一种情况下它比O(1)快。现在我非常想看看这将如何实现。O(logn)在实践中已经足够好了,特别是当使用集合意味着需要复制数据时…谢谢。ArrayList上的“contains”方法是否较慢?这是因为我还需要保留字符串的标记。@Durandal平均来说意味着,如果存在哈希冲突,则需要超过O(1)
。我不确定任何算法如何能比O(1)
更快@BeppiMenozzi是的,它必须迭代整个数组(O(n)
)以测试是否存在(也就是说,如果你没有对数据的排序做任何假设)。@fox。。。谢谢无论如何,正如我在别处所说的,我还需要标记:那么HashMap是一个好的选择吗?我可以使用HashMap;在搜索时,这会比ArrayList快吗?它会比数组列表快,但不会比哈希集快。根据您的其他需求,HashSet可能是您的选择。排序是当您需要检索多个元素,或按特定顺序使用数组时;在搜索时,这会比ArrayList快吗?它会比数组列表快,但不会比哈希集快。根据您的其他需求,HashSet可能是您的选择。排序是指当您需要检索多个元素或按特定顺序排列数组时。不客气。如果必须使用二进制搜索,Google的Guava库已经有了一个实现。欢迎访问com.google.common.collect.Ordering。如果必须使用二进制搜索,Google的Guava库已经有了一个实现。请参阅com.google.common.collect.Ordering.不太好,谢谢。我只是想在字符串的排序数组中查找特定单词的存在性。我说的是二进制搜索,因为我