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(城市,个人列表);
}
个人列表。添加(个人);
奇怪,我运行了你的代码,它有点正常,但有以下例外:
还请发布单个类-它可以保存键,因为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);