Java 无法填充以树集作为参数的HashMap

Java 无法填充以树集作为参数的HashMap,java,hashmap,populate,treeset,sortedset,Java,Hashmap,Populate,Treeset,Sortedset,我有这张地图: Map<City, TreeSet<Individual>> cityIndividualMap = new HashMap<City, TreeSet<Individual>>(); Map cityIndividualMap=newhashmap(); 我使用以下功能填充此地图: public void add(List<Individual> individuals){ for (Individual

我有这张地图:

Map<City, TreeSet<Individual>> cityIndividualMap = new HashMap<City, TreeSet<Individual>>();
Map cityIndividualMap=newhashmap();
我使用以下功能填充此地图:

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 void add(列出个人){
用于(个人:个人){
个人分类数据集添加(个人);
for(City-City:individual.getCities()){
树集个体列表;
if(城市DIVIDUALMAP.containsKey(城市))
individualSet=cityIndividualMap.get(城市);
其他的
individualSet=新树集(新FitnessComparator());
个人设置。添加(个人);
cityIndividualMap.put(城市,个人集);
}
}
} 
这是我的比较:

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;
    }
}
公共类FitnessComparator实现Comparator{
@凌驾
公共整数比较(个人1、个人2){
if(individual1.getFitness()==individual2.getFitness())
返回0;
返回(individual1.getFitness()>individual2.getFitness())?1:-1;
}
}
单个类只是一个数据类。。所以我不会复制到这里


出于某些非常奇怪的原因,CityIndividualMaps值只接受一个元素!我已经在调试模式下执行过多次,但不明白为什么只能添加一项。。请您检查一下好吗?

您一直在用新的列表覆盖每个城市的个人列表。更改:

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个人列表;
if(城市DIVIDUALMAP.containsKey(城市))
individualSet=cityIndividualMap.get(城市);
其他的
individualSet=新树集(新FitnessComparator());
个人设置。添加(个人);
cityIndividualMap.put(城市,个人集);
致:

TreeSet individualList=cityIndividualMap.get(城市);
if(individualList==null)
{
individualList=新树集(新FitnessComparator());
cityIndividualMap.put(城市,个人列表);
}
个人列表。添加(个人);

奇怪,我运行了你的代码,它有点正常,但有以下例外:

  • “个体列表”和“个体集合”之间似乎存在混淆

  • “cityIndividualMap”的声明是不一致的(Treeset与hashmap),我根据您对它的使用假设它是一个hashmap

  • 类“City”应该有hashCode+equals,否则可以找到多个具有相同City的键


  • 还请发布单个类-它可以保存键,因为TreeSet使用equals方法来确定其中是否已有内容。@Rich:不,TreeSet不使用equals。它使用比较器,这将教会我如何浏览JavaDoc
    TreeSet<Individual> individualList = cityIndividualMap.get(city);
    
    if (individualList == null)
    {
        individualList = new TreeSet<Individual>( new FitnessComparator());
        cityIndividualMap.put(city, individualList);        
    }
    individualList.add(individual);