在Java中搜索排序列表中的字符串,以及可能以字符串的一部分开头的所有字符串

在Java中搜索排序列表中的字符串,以及可能以字符串的一部分开头的所有字符串,java,algorithm,Java,Algorithm,在Java中实现在字符串排序列表中搜索字符串的最有效方法是什么 搜索以字符串的一部分开头的所有字符串怎么样 谢谢您的帮助。假设您使用的是java.util.ArrayList或类似的非链接结构。假设您使用的是java.util.ArrayList或类似的非链接结构。要搜索非起始字符串(即“和”匹配“andrew”、“candy”和“sand”),您必须使用蛮力 对于字符串的开头,请使用BST.搜索非开头字符串(即“andrew”、“candy”和“sand”匹配项),您必须使用蛮力 对于字符串的

在Java中实现在字符串排序列表中搜索字符串的最有效方法是什么

搜索以字符串的一部分开头的所有字符串怎么样


谢谢您的帮助。

假设您使用的是
java.util.ArrayList
或类似的非链接结构。

假设您使用的是
java.util.ArrayList
或类似的非链接结构。

要搜索非起始字符串(即“和”匹配“andrew”、“candy”和“sand”),您必须使用蛮力


对于字符串的开头,请使用BST.

搜索非开头字符串(即“andrew”、“candy”和“sand”匹配项),您必须使用蛮力


对于字符串的开头,请使用BST。

我认为您正在寻找这两个要求。

我认为您正在寻找这两个要求。

您可以使用。

您可以使用

uther.lightbringer死记硬背:

在Java中实现在字符串排序列表中搜索字符串的最有效方法是什么

正如前面提到的,您可以使用。确保你的列表已排序:否则你很可能得不到正确的结果

uther.lightbringer死记硬背:

搜索以字符串的一部分开头的所有字符串怎么样

要么从头到尾在列表中循环并检查每个单词,要么创建(或从网络中抓取)一个可以找到以某个(子)字符串开头的单词的列表,比在单词列表中循环要快得多

uther.lightbringer死记硬背:

在Java中实现在字符串排序列表中搜索字符串的最有效方法是什么

正如前面提到的,您可以使用。确保你的列表已排序:否则你很可能得不到正确的结果

uther.lightbringer死记硬背:

搜索以字符串的一部分开头的所有字符串怎么样


要么从头到尾循环浏览列表并检查每个单词,要么创建(或从网络抓取)一个列表,该列表可以找到以某个(子)字符串开头的单词,比循环浏览单词列表要快得多。

列表确实不是用于此目的的正确数据结构。首先,binarySearch在最好的情况下会对linkedList执行O(N)——因为列表不支持随机访问,所以对它进行排序并不能获得任何结果

你要找的是一份工作。wiki页面描述了它的优点以及它是如何工作的,这样我就不会浪费时间试图超越它。虽然它没有描述与排序的LinkedList相比的优势,但请记住,插入到排序的LinkedList中是O(N)个链接遍历和O(logn)个元素比较,就像查找对象一样。trie更高效,并且仍然支持从排序链表中获得的所有操作


谷歌找到了一些支持这种结构的库的结果,比如,但我没有使用过任何一个。trie仍然是一种非常简单的数据结构(与eg AVL树相比),因此您可以很容易地自己实现它。

列表确实不是适合这种情况的数据结构。首先,binarySearch在最好的情况下会对linkedList执行O(N)——因为列表不支持随机访问,所以对它进行排序并不能获得任何结果

你要找的是一份工作。wiki页面描述了它的优点以及它是如何工作的,这样我就不会浪费时间试图超越它。虽然它没有描述与排序的LinkedList相比的优势,但请记住,插入到排序的LinkedList中是O(N)个链接遍历和O(logn)个元素比较,就像查找对象一样。trie更高效,并且仍然支持从排序链表中获得的所有操作


谷歌找到了一些支持这种结构的库的结果,比如,但我没有使用过任何一个。trie仍然是一种非常简单的数据结构(与例如AVL树相比),因此您可以很容易地自己实现它。

二进制搜索对于列表是无用的,它没有对其元素的随机访问。@amit取决于,在Java中,“列表”通常指
列表
接口及其实现,实际上是随机访问的。@Ethan,@Etienne:我的意思是:列表不能保证随机访问。随机访问被定义为“访问每个元素需要相同的时间”。例如,正在实现LinkedList的LinkedList在二进制搜索中需要O(nlogn)时间,因为每次访问都是O(n)。我的假设是他使用的是ArrayList。我们同意,搜索算法的性能在底层结构的实际实现上有很大差异。如果基础列表不是随机访问,那么这个问题的唯一答案就是暴力。我想其他人都假设底层数据结构是提供O(1)的结构,以便让问题变得有意义。二进制搜索对于列表是无用的,它没有对其元素的随机访问。@amit取决于,在Java中,“list”通常指
list
接口及其实现,实际上是随机访问的。@Ethan,@Etienne:我的意思是:列表不能保证随机访问。随机访问被定义为“访问每个元素需要相同的时间”。例如,正在实现LinkedList的LinkedList在二进制搜索中需要O(nlogn)时间,因为每次访问都是O(n)。我的假设是他使用的是ArrayList。我们同意,搜索算法的性能在底层结构的实际实现上有很大差异。如果基础列表不是随机访问,那么这个问题的唯一答案就是暴力。我想其他人都认为