我目前有一个String数组,我需要多次搜索才能完全匹配。什么是最好的数据结构?
Example - String array with elements
cat
dog
squirrel
raccoon
aardvark
java代码接收字符串搜索并遍历数组:
我目前的代码执行以下操作:
for (String element : myList) {
if (element.equals(searchTerm)) {
return searchTerm;
}
}
有更有效的方法来进行此搜索吗?我想过使用Map,但我想不出一个好的值(关键是'dog'/'cat'/ etc ....)。我应该为密钥和值使用相同的值吗?是否有更好的数据结构可供使用?
答案 0 :(得分:10)
在此处使用HashSet
可获得最佳查找效果。请注意,Set
不允许任何重复。使用Map
在这里没有多大意义,因为您只对搜索密钥感兴趣,即您没有与之相关的任何内容。
示例代码:
Set<String> animals = new HashSet<String>(
Arrays.asList("cat", "dog", "squirrel", "raccoon"));
if (animals.contains("dog")) {
System.out.println("Yep, dog's here!"); // prints
}
if (!animals.contains("aardvark")) {
System.out.println("Ah, aardvark's missing!"); // prints
}
请注意,List
也有一个contains()
方法,但它遍历其所有元素,以检查项目是否存在与使用for循环时要避免的相同的性能相同
答案 1 :(得分:4)
您可以使用Trie data structure
以下是guava trie中的实现。搜索的复杂性是O(L) where L = stringToSearch.length();
答案 2 :(得分:1)
您可以使用Set
代替Map
(或者,如果是Map
,只需使用密钥的任何值):
if (mySet.contains(element)) {
return element;
} else {
return null;
}
答案 3 :(得分:1)
return myList.contains(searchTerm) ? searchTerm : null;
答案 4 :(得分:1)
试试这个
String[] arr = new String[]{"cat", "dog", "squirrel", "raccoon", "aardvark"};
List<String> list=new ArrayList<String>(Arrays.asList(arr));
System.out.println(list.contains("dog") ? "found" : "not found");
答案 5 :(得分:0)
将它们放在HashSet
中,因为它使用散列,这是一种快速检索元素的技术,因为它使用哈希码来存储它们。
Sub obj = new Sub();
obj.items.add("one");
obj.items.add("two");
obj.items.add("three");
System.out.println(obj.items.contains("one"));
答案 6 :(得分:0)
如果您只想返回搜索字词,可以这样做
String result = myList.contains(searchTerm) ? result : "";