0

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

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

5 回答 5

3

我认为您应该HashMap为此使用 a 。它包含 key->value 之类的对,您可以轻松检查 withcontainsKeycontainsValue方法的存在。

于 2013-09-30T11:19:02.970 回答
1

对 >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...
   }
}
于 2013-09-30T11:19:50.037 回答
1

如果您想反复检查您是否StringList包含特定的String,最好使用 aHashSet<String>代替。

使用HashSet.contains()方法检查您的字符串是否存在 - 这样,您将在 O(1) 时间内立即获得返回值,而不必遍历所有元素。

于 2013-09-30T11:17:35.630 回答
0

如果我正确理解您的问题,您想在列表中搜索特定的一对字符串。那个特定的 Pair 第一个元素必须与您要查找的字符串匹配,对吗?

好吧,如果您的列表没有以任何方式排序,那么您就不走运了。遍历所有元素并搜索它。

如果 List 是有序的(按 Pair 的第一个元素的顺序),那么您可以使用 Binary Search 更快地完成它。

于 2013-09-30T11:18:51.930 回答
0

使用 aHashSet而不是 List。它将复杂性降低到 O(n) 而不是您现在拥有的 O(n^2)。

于 2013-09-30T11:17:23.097 回答