gpt4 book ai didi

java - 如何在使用 retainAll 方法后重置 HashSet?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:00:40 25 4
gpt4 key购买 nike

我有三个哈希集,其中包含访问过不同国家的不同人员。如果我使用 Mexico.retainAll(Cuba);然后 Mexico.retainAll(Jamaica) 它给了我所有访问过这三个国家的人的名单。哪个是:奥利维亚、约翰、威廉

但是当我做 Mexico.retainAll(Cuba);然后是 Mexico.removeAll(Jamaica),只获取访问过墨西哥和古巴但没有访问过牙买加的人。它给了我一个空集?

设置值如下:

HashSet<String> Mexico = new HashSet<String>();

[奥利维亚、佐伊、詹妮弗、苏珊、约翰、伊莎贝拉、威廉、 jack 、艾玛、索菲亚]

HashSet<String> Cuba = new HashSet<String>();

[奥利维亚、汤姆、詹妮弗、苏珊、约翰、威廉、 jack 、艾玛、艾娃、索菲亚、莉莉]

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] 但我得到的是空集。

最佳答案

Mexico.retainAll 改变了 Mexico Set,所以你不能调用 allThreeCountries 然后是 onlyMexicoCuba,并期望 onlyMexicoCuba 将看到 Mexico 集的原始内容。

您应该生成 Mexico Set 的副本,并改变该副本。

public void allThreeCountries (){
HashSet<String> result = new HashSet<>(Mexico);
result.retainAll(Cuba);
result.retainAll(Jamaica);
Iterator<String> iterator = result.iterator();
System.out.println("These people has visited all three countries: ");
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}

public void onlyMexicoCuba (){
HashSet<String> result = new HashSet<>(Mexico);
result.retainAll(Cuba);
result.removeAll(Jamaica);
Iterator<String> iterator = result.iterator();
System.out.println("These people have visited Mexico and Cuba Only: ");
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}

关于java - 如何在使用 retainAll 方法后重置 HashSet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54416037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com