我有一個問題比較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)'。 –