java在使用retainAll方法后如何重置哈希集?
我有三个hashset,其中有不同的人访问过不同的国家。如果我使用墨西哥。Retainal(古巴);然后是墨西哥。Retainal(牙买加)它给了我所有访问过这三个国家的人的名单。它们是: 奥利维亚,约翰,威廉
但当我去墨西哥的时候。Retainal(古巴);然后是墨西哥。removeAll(牙买加),只接收访问过墨西哥和古巴但没有访问过牙买加的人。它给了我一套空的
设定值如下所示:
HashSet<String> Mexico = new HashSet<String>();
[Olivia、Zoe、Jennifer、Susan、John、Isabella、William、Jack、Emma、Sophia]
HashSet<String> Cuba = new HashSet<String>();
[Olivia、Tom、Jennifer、Susan、John、William、Jack、Emma、Ava、Sophia、Lily]
HashSet<String> Jamaica = new HashSet<String>();
[奥利维亚、汤姆、约翰、威廉、艾娃、杰西卡、莉莉]
public static void main(String[] args) throws FileNotFoundException {
visitorPatternNOOP.allThreeCountries();
visitorPatternNOOP.onlyMexicoCuba();
}
public class VisitorPatternNOOP {
public void allThreeCountries (){
Mexico.retainAll(Cuba);
Mexico.retainAll(Jamaica);
Iterator<String> iterator = Mexico.iterator();
System.out.println("These people has visited all three countries: ");
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
public void onlyMexicoCuba (){
Mexico.retainAll(Cuba);
Mexico.removeAll(Jamaica);
Iterator<String> iterator = Mexico.iterator();
System.out.println("These people have visited Mexico and Cuba Only: ");
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
输出应该是[Jennifer,Susan,Jack,Emma,Sophia],但我得到的是空集
# 1 楼答案
Mexico.retainAll
变异Mexico
{allThreeCountries
后跟onlyMexicoCuba
,并期望onlyMexicoCuba
将看到Mexico
集的原始内容您应该生成}的副本,并对该副本进行变异
Mexico
{