我想搜索String
中的特定Pair<String,int>
元素。我使用简单的equals
方法来执行此操作。请为我推荐任何其他有用的技巧。 String
列表至少有10000个元素。
for (String str1 : StringList) {
for (Pair<?, ?> pair : nodeList) {
if (pair.getFirst().equals(str1)) {
// Some code here...
}
}
}
答案 0 :(得分:3)
我认为你应该使用HashMap
。它包含像key-&gt;值这样的对,您可以使用containsKey
和containsValue
方法轻松检查两者的存在。
答案 1 :(得分:1)
如果您想反复检查StringList
是否包含特定String
,您最好使用HashSet<String>
代替。
使用HashSet.contains()方法检查字符串是否存在 - 这样,您可以在O(1)时间内立即获得返回值,而不必迭代所有元素。
答案 2 :(得分:1)
对&gt; 10000条记录执行顺序扫描并执行String.equals()操作将会很慢。考虑使用HashMap,其中键是每对中的第一个(字符串),值是第二个(整数):
Map<String, Integer> map = //... get your map
for (String str : stringList) {
Integer found = map.get(str);
if (found!=null) {
// Some code here...
}
}
答案 3 :(得分:0)
使用HashSet
代替列表。它将复杂性降低到O(n)而不是现在的O(n ^ 2)。
答案 4 :(得分:0)
如果我正确理解您的问题,您希望在列表中搜索特定的字符串对。那个特定的第一个元素必须匹配你正在寻找的字符串,对吗?
好吧,如果你的名单没有以任何方式订购,那你就不走运了。浏览所有元素并搜索它。
如果列出了List(按照对的第一个元素的顺序),那么你可以使用二进制搜索来更快地完成它。