Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在ArrayList中查找<;字符串>;_Java_Arraylist - Fatal编程技术网

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.不太好,谢谢。我只是想在字符串的排序数组中查找特定单词的存在性。我说的是二进制搜索,因为我