我有一个问题比较2个HashSets,我有两个HashSets,公共对象
Set<String> list1 = new HashSet<String>(oldList1);
Set<String> list2 = new HashSet<String>(oldList2);
,我想检查是否有“串”在list1
存在于list2
。通过这种方式最快的方法是什么?请记住,两套都有超过10K的字符串,所以相对较快的速度会更好。
任何帮助表示赞赏!
我有一个问题比较2个HashSets,我有两个HashSets,公共对象
Set<String> list1 = new HashSet<String>(oldList1);
Set<String> list2 = new HashSet<String>(oldList2);
,我想检查是否有“串”在list1
存在于list2
。通过这种方式最快的方法是什么?请记住,两套都有超过10K的字符串,所以相对较快的速度会更好。
任何帮助表示赞赏!
如果你想检查是否有任何字符串在list1
这也是list2
,你可以只写
!Collections.disjoint(list1, list2)
,如果他们有任何共同的要素哪个是真的。如果你想找到答案,只是做简单的循环:
for (String str : list1) {
if (list2.contains(str)) {
return str;
}
}
是的谢谢!但我也想这是什么字符串是 – Noksuu
然后只是做一个循环︰for(String str:list1){if(list2.contains(str)){return str; } ...'无论如何都会做同样的事情,而且你不会比这更有效率。 (虽然坦率地说10k元素不足以担心。) –
@BoristheSpider如果实际上并不需要,它似乎并不需要修改数据结构?简单的循环完成这项工作就好。 –
另一种选择是使用设置限制添加重复。方法add()
将帮助您找到所有相同的字符串。
将指定元素添加到这个组,如果它不是已存在 (可选操作)。更正式地说,如果该集合不包含元素e2使得(e == null? e2 == null:e.equals(e2)),则将该指定的元素e添加到该集合中的 。如果这个集合已经包含元素 ,则该呼叫将保持集合不变并返回false。在组合 与构造函数的限制,这确保集合从不 包含重复的元素。
Set<String> list1 = new HashSet<String>();
list1.add("a");
list1.add("b");
list1.add("c");
Set<String> list2 = new HashSet<String>();
list2.add("b");
list2.add("c");
list2.add("d");
Set<String> listCommon = new HashSet<String>();
for (String element : list2) {
if (!list1.add(element)) {
listCommon.add(element);
}
}
// all collected duplicates
for (String element : listCommon) {
System.out.println(element);
}
,我不会叫''Set' list' - 是混乱的。 –
'list2.retainAll(list1)'。 –