Java树映射迭代器对字符串键不能正常工作
我有一个树形图,它将字符串键映射到自定义城市类。下面是它的实例化方式:Java树映射迭代器对字符串键不能正常工作,java,iterator,treemap,Java,Iterator,Treemap,我有一个树形图,它将字符串键映射到自定义城市类。下面是它的实例化方式: TreeMap<String, City> nameDictionary = new TreeMap<String, City>(new CityNameComparator()); TreeMap nameDictionary=newtreemap(new CityNameComparator()); CityNameComparator实现: public class CityName
TreeMap<String, City> nameDictionary = new TreeMap<String, City>(new CityNameComparator());
TreeMap nameDictionary=newtreemap(new CityNameComparator());
CityNameComparator实现:
public class CityNameComparator implements Comparator<String>
{
public int compare (String c1, String c2) {
return c1.compareTo(c2);
}
}
公共类CityNameComparator实现Comparator
{
公共整数比较(字符串c1、字符串c2){
返回c1。比较(c2);
}
}
我有一个方法,它返回一个迭代器,该迭代器应按键ascii顺序遍历映射:
public Iterator<City> getNameIterator(){
return nameDictionary.values().iterator();
}
公共迭代器getNameIterator(){
返回nameDictionary.values().iterator();
}
由于某些原因,这些值是按照添加到树映射中的顺序返回的。有什么想法吗?你确定没有错误地将
LinkedHashMap
分配给Map
引用吗?这将保留条目添加到地图的顺序
或者可能代码中有一个错误,添加了条目,用键输入了错误的值
迭代条目,查看映射中的内容:
for (Map.Entry<String, City> e : dictionary.entrySet())
System.out.println(e.getKey() + " --> " + e.getValue());
for(Map.Entry e:dictionary.entrySet())
System.out.println(e.getKey()+“-->”+e.getValue());
您确定没有错误地将LinkedHashMap
分配给Map
引用吗?这将保留条目添加到地图的顺序
或者可能代码中有一个错误,添加了条目,用键输入了错误的值
迭代条目,查看映射中的内容:
for (Map.Entry<String, City> e : dictionary.entrySet())
System.out.println(e.getKey() + " --> " + e.getValue());
for(Map.Entry e:dictionary.entrySet())
System.out.println(e.getKey()+“-->”+e.getValue());
它工作正常:
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);
}
}
}
import java.util.Comparator;
导入java.util.Iterator;
导入java.util.TreeMap;
公共类test2{
公共静态类城市{
公共最终字符串m_name;
公共城市(字符串名称){
m_name=aName;
}
}
公共静态类CityNameComparator实现Comparator
{
公共整数比较(字符串c1、字符串c2){
返回c1。比较(c2);
}
}
公共静态类城市地图{
TreeMap nameDictionary=newtreemap(new CityNameComparator());
公共迭代器getNameIterator(){
返回nameDictionary.values().iterator();
}
公共城市put(字符串名称){
returnnamedictionary.put(aName,newcity(aName));
}
}
公共静态void main(字符串[]args){
CityMap CityMap=new CityMap();
城市地图出售(“d”);
城市地图出售(“b”);
城市地图出售(“c”);
城市地图出售(“a”);
for(Iterator cities=cityMap.getnameiiterator();cities.hasNext();){
City=cities.next();
System.out.println(city.m_name);
}
}
}
输出:
a
b
c
d它工作正常:
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);
}
}
}
import java.util.Comparator;
导入java.util.Iterator;
导入java.util.TreeMap;
公共类test2{
公共静态类城市{
公共最终字符串m_name;
公共城市(字符串名称){
m_name=aName;
}
}
公共静态类CityNameComparator实现Comparator
{
公共整数比较(字符串c1、字符串c2){
返回c1。比较(c2);
}
}
公共静态类城市地图{
TreeMap nameDictionary=newtreemap(new CityNameComparator());
公共迭代器getNameIterator(){
返回nameDictionary.values().iterator();
}
公共城市put(字符串名称){
returnnamedictionary.put(aName,newcity(aName));
}
}
公共静态void main(字符串[]args){
CityMap CityMap=new CityMap();
城市地图出售(“d”);
城市地图出售(“b”);
城市地图出售(“c”);
城市地图出售(“a”);
for(Iterator cities=cityMap.getnameiiterator();cities.hasNext();){
City=cities.next();
System.out.println(city.m_name);
}
}
}
输出:
a
b
c
对不起,愚蠢的虫子。我是根据其他地方的一个bug分配了一个不同的迭代器。现在可以用了。对不起,愚蠢的虫子。我是根据其他地方的一个bug分配了一个不同的迭代器。现在工作正常。您能发布复制问题的工作代码吗?我没有看到任何明显的错误,尽管有一个自定义的比较器,只使用字符串的自然顺序是没有意义的。我看不出为什么这不起作用。这对我来说总是有效的。你能发布工作代码来复制这个问题吗?我没有看到任何明显的错误,尽管有一个自定义的比较器,只使用字符串的自然顺序是没有意义的。我看不出为什么这不起作用。这对我一直都很有效。