我有一个TreeMap,它将String键映射到自定义City类。以下是它的实例化方法:
TreeMap<String, City> nameDictionary = new TreeMap<String, City>(new CityNameComparator());
CityNameComparator实施:
public class CityNameComparator implements Comparator<String>
{
public int compare (String c1, String c2) {
return c1.compareTo(c2);
}
}
我有一个返回迭代器的方法,该迭代器应以key-ascii顺序遍历地图:
public Iterator<City> getNameIterator(){
return nameDictionary.values().iterator();
}
由于某种原因,值按照添加到TreeMap的顺序返回。有什么想法吗?
答案 0 :(得分:3)
它运作得很好:
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeMap;
public class test2 {
public static class City {
public final String m_name;
public City(String aName) {
m_name = aName;
}
}
public static class CityNameComparator implements Comparator<String>
{
public int compare (String c1, String c2) {
return c1.compareTo(c2);
}
}
public static class CityMap {
TreeMap<String, City> nameDictionary = new TreeMap<String, City>(new CityNameComparator());
public Iterator<City> getNameIterator(){
return nameDictionary.values().iterator();
}
public City put(String aName) {
return nameDictionary.put(aName, new City(aName));
}
}
public static void main(String[] args) {
CityMap cityMap = new CityMap();
cityMap.put("d");
cityMap.put("b");
cityMap.put("c");
cityMap.put("a");
for (Iterator<City> cities = cityMap.getNameIterator(); cities.hasNext(); ) {
City city = cities.next();
System.out.println(city.m_name);
}
}
}
输出:
一
B'/ P>
C
d
答案 1 :(得分:0)
您确定错误地未将LinkedHashMap
分配给Map
引用吗?这将保留条目添加到地图的顺序。
或者代码中可能存在添加条目的错误,使用密钥输入错误的值。
迭代条目,看看地图中的内容:
for (Map.Entry<String, City> e : dictionary.entrySet())
System.out.println(e.getKey() + " --> " + e.getValue());
答案 2 :(得分:0)
抱歉,愚蠢的错误。我根据其他地方的bug分配了一个不同的迭代器。现在工作正常。