在HashSet中搜索字符串数组中的任何元素

时间:2011-02-01 04:34:26

标签: java arrays string search hashset

我有一个HashSet字符串和一个字符串数组。我想知道数组中的任何元素是否存在于HashSet中。我有以下代码可以工作,但我觉得它可以更快地完成。

public static boolean check(HashSet<String> group, String elements[]){
    for(int i = 0; i < elements.length; i++){
        if(group.contains(elements[i]))
            return true;
    }
    return false;
}

感谢。

5 个答案:

答案 0 :(得分:3)

在这种情况下 O(n)(使用数组),它不能更快​​。

如果您只想让代码更清晰:

 return !Collections.disjoint(group, Arrays.asList(elements));

答案 1 :(得分:2)

这似乎有点合理。 HashSet有一个O(1)(通常)contains(),因为它只需要对你给它的字符串进行散列来查找索引,并且有一些东西存在或者没有。

如果你需要检查数组中的每个元素,那么就没有更快的方法(顺序,当然)。

答案 2 :(得分:1)

  

......但我觉得可以更快地完成。

我认为没有更快的方法。您的代码平均为O(N),其中N是数组中的字符串数。我不认为你可以改进。

答案 3 :(得分:0)

正如其他人所说,算法中最慢的部分是遍历数组的每个元素。你可以让它更快的唯一方法就是你事先知道一些关于数组内容的信息,它允许你跳过某些元素,比如数组是否被排序并且在已知位置或其他东西中有重复。如果输入基本上是随机的,那么你可以做很多事情。

答案 4 :(得分:0)

如果您知道该集是一个有序集,并且该数组已排序,您可以从开始到结束获得interval set,可能比O(| array | * access-time)做得更好(set)),特别允许比O(| array |)更好的结果,但是如果你正在进行哈希,你就不能。