2009-10-04 79 views
0

我有一個將String鍵映射到自定義City類的TreeMap。下面是它是如何實例:Java TreeMap迭代器對字符串鍵無法正常工作

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); 
    } 
} 

我有一個返回通過地圖中的關鍵ASCII順序進行迭代的迭代器的方法:

public Iterator<City> getNameIterator(){ 
    return nameDictionary.values().iterator(); 
} 

由於某些原因,這些值將按照它們添加到TreeMap的順序返回。有任何想法嗎?

+2

你能發表複製問題的工作代碼嗎?我沒有看到任何明顯的錯誤,雖然有一個自定義的比較器,只是使用字符串的自然順序是沒有意義的。 – 2009-10-04 19:00:43

+0

我看不到任何理由,爲什麼這不應該工作。它一直爲我工作。 – 2009-10-04 19:22:51

回答

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

c

d

0

是否確定還沒有被分配到Map參考?這將保留條目添加到地圖的順序。

或者也許在代碼中存在一個添加條目的錯誤,將錯誤的值與一個鍵相關聯。

遍歷條目,看看有什麼是地圖:

for (Map.Entry<String, City> e : dictionary.entrySet()) 
    System.out.println(e.getKey() + " --> " + e.getValue()); 
0

對不起,愚蠢的錯誤。我在其他地方分配了一個基於bug的不同迭代器。現在它工作正常。

相關問題