Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java树映射迭代器对字符串键不能正常工作_Java_Iterator_Treemap - Fatal编程技术网

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分配了一个不同的迭代器。现在工作正常。

您能发布复制问题的工作代码吗?我没有看到任何明显的错误,尽管有一个自定义的比较器,只使用字符串的自然顺序是没有意义的。我看不出为什么这不起作用。这对我来说总是有效的。你能发布工作代码来复制这个问题吗?我没有看到任何明显的错误,尽管有一个自定义的比较器,只使用字符串的自然顺序是没有意义的。我看不出为什么这不起作用。这对我一直都很有效。