【发布时间】:2013-11-14 20:39:23
【问题描述】:
我有这张地图:
Map<City, TreeSet<Individual>> cityIndividualMap = new HashMap<City, TreeSet<Individual>>();
我使用此函数填充此地图:
public void add(List<Individual> individuals){
for (Individual individual : individuals){
individualSortedSet.add(individual);
for(City city:individual.getCities()){
TreeSet<Individual> individualList;
if (cityIndividualMap.containsKey(city))
individualSet = cityIndividualMap.get(city);
else
individualSet = new TreeSet<Individual>( new FitnessComparator());
individualSet.add(individual);
cityIndividualMap.put(city, individualSet);
}
}
}
这是我的比较器:
public class FitnessComparator implements Comparator<Individual> {
@Override
public int compare(Individual individual1, Individual individual2) {
if (individual1.getFitness() == individual2.getFitness())
return 0;
return (individual1.getFitness() > individual2.getFitness())? 1 : -1;
}
}
单个类只是一个数据类..所以我不会在这里复制它。
出于某种非常奇怪的原因,CityIndividualMaps 值只包含一个元素!我在调试模式下执行了很多次,但看不到为什么只能添加一项。请你检查一下吗?
【问题讨论】:
-
请同时发布 Individual 类 - 它可以保存密钥,因为 TreeSet 使用 equals 方法来确定其中是否已经存在。
-
@Rich:不,TreeSet 不使用等于。它使用比较器。
-
这会教我略读 JavaDoc
标签: java hashmap populate treeset sortedset