首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >java.util.Set.addAll()方法中的问题

java.util.Set.addAll()方法中的问题
EN

Stack Overflow用户
提问于 2010-04-16 20:36:48
回答 6查看 25.6K关注 0票数 5

我有一个java.util.Set<City> cities,我需要通过两种方式将城市添加到这个集合中:

  • 通过添加单个城市(借助cities.add(city)方法调用)
  • 通过将另一组城市添加到此集合(借助cities.addAll(anotherCitiesSet)方法调用)

但第二种方法的问题是,我不知道anotherCitiesSet中是否有重复的城市。

每当尝试在cities集合中输入重复条目时,我都想做一些处理。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-04-16 20:39:52

复制cities集(也就是citiesCopy),然后调用citiesCopy.retainAll(anotherCitiesSet) - citiesCopy中的结果集将包含两个集的交集,从而允许您轻松地查看哪些城市是重复的。

或者,遍历第二个集合并手动添加每个元素,每次检查add()的返回值:

代码语言:javascript
复制
for(java.util.Set<City> c : anotherCitiesSet) {
    if(!cities.add(c)) {
        // c was a duplicate, do something?
    }
}
票数 10
EN

Stack Overflow用户

发布于 2010-04-16 20:39:48

从java.util.Set派生一个类,如果可能,覆盖addAll (如果不是,则创建新方法),然后逐个添加项,如果检测到重复条目,则执行自定义处理。

票数 2
EN

Stack Overflow用户

发布于 2018-05-30 06:53:01

你的城市是字符串(尽管它是对象)还是包含其他东西的对象?

  • 如果是字符串,那么我猜上面的答案会起作用。
  • 如果它是包含以下内容的对象: String name,int population等...如果您只想比较字符串名以删除重复项,则可以使用{HashSet}类并覆盖其(HashCode)和(equals)方法。

因为你可能有两个城市:纽约市和另一个纽约市。包含相同的信息。但因为它们是堆中的两个对象。它们将具有不同的HashCode。上面写着,您的HashSet将保留这两个文件。HashSet同时检查HashCode和meaning ()。

解决方案是覆盖这两个方法:

代码语言:javascript
复制
class City{
  String name; //if you only care city name
  ....
  ....
  public boolean equals(Object myCity){  // override equals(). only look at the name.
    City city2 = (City) myCity;
    return this.getName().equals(city2.getName());  //String itself has a .equal() to compare
  }

  public int HashCode(){  // override HashCode(). 
    return name.hashCode();  //also String itself has a .hashCode() to check equality
  }

  public String getName(){
    return name;
  }

...
...
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2652932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档