在java中搜索对中

时间:2013-09-30 11:10:44

标签: java search collections

我想搜索String中的特定Pair<String,int>元素。我使用简单的equals方法来执行此操作。请为我推荐任何其他有用的技巧。 String列表至少有10000个元素。

for (String str1 : StringList) {
    for (Pair<?, ?> pair : nodeList) {
        if (pair.getFirst().equals(str1)) {
            // Some code here...            
        }
    }
}

5 个答案:

答案 0 :(得分:3)

我认为你应该使用HashMap。它包含像key-&gt;值这样的对,您可以使用containsKeycontainsValue方法轻松检查两者的存在。

答案 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(按照对的第一个元素的顺序),那么你可以使用二进制搜索来更快地完成它。