java - 无法填充以 TreeSet 作为参数的 HashMap

标签 java hashmap populate treeset sortedset

我有这张 map :

Map<City, TreeSet<Individual>> cityIndividualMap = new HashMap<City, TreeSet<Individual>>();

我使用此函数填充此 map :

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;
    }
}

单个类只是一个数据类..所以我不会在这里复制它。

出于某种非常奇怪的原因,CityIndi​​vidualMaps 值仅采用一个元素!我已经在 Debug模式下执行了很多次,但不明白为什么只能添加一项​​。请您检查一下吗?

最佳答案

您不断用新列表覆盖每个城市的单独列表。变化:

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);

致:

TreeSet<Individual> individualList = cityIndividualMap.get(city);

if (individualList == null)
{
    individualList = new TreeSet<Individual>( new FitnessComparator());
    cityIndividualMap.put(city, individualList);        
}
individualList.add(individual);

关于java - 无法填充以 TreeSet 作为参数的 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19977185/

相关文章:

java - Hibernate 和 JPA 之间有什么区别?

java - Hashmap的实现

php - Magento:添加自定义 EAV 属性,在创建实体时使用其默认值自动填充

java - 无法在 eclipse 中使用mockito验证方法调用

java - onClick 不起作用,直到我在函数内注释 while Loop

java - Camel SFTP Producer 重试特定类型的错误

java - HashMap 初始化参数(load/initialcapacity)

java - HashMap 中一个键的值被设置为另一个键的值

node.js - Mongoose - 尝试在 MEAN 堆栈中执行 'JOINS'

javascript - 使用 $.getJSON 填充 jstree 在加载时卡住