2011-06-08 54 views
4
import java.util.*;  
public class Test { 
     public static void main(String[] args) { 

      Map<String,String> map = new TreeMap<String,String>(); 
      map.put("10", "America"); 
      map.put("1", "Australia"); 
      map.put("2", "India"); 
      map.put("11", "China"); 

      System.out.println(map); 

     } 
    } 

当运行上面的代码片段,在控制台我得到的输出:TreeMap的行为异常

{1=Australia, 10=America, 11=China, 2=India}

但我期待输出

{1=Australia, 2=India, 10=America, 11=China}

但是当改变逻辑如所提到的下面内侧上述主要()

Map<String,String> map = new TreeMap<String,String>(); 
     map.put("US", "America"); 
     map.put("AUS", "Australia"); 
     map.put("IN", "India"); 
     map.put("CH", "China"); 

    System.out.println(map); 

我得到所期望的输出

({AUS=Australia, CH=China, IN=India, US=America})

按我理解TreeMap中的的entrySet()方法返回包含在映射的一组视图地图。该集的迭代器按照升序键顺序返回映射。那么为什么在第一种情况下会发生这种情况?

任何建议,非常感谢。

+4

提示:'1 = “1”' – 2011-06-08 14:56:32

+2

标题是惊人的!几乎同样有用:'treemap not works' – bestsss 2011-06-08 15:04:14

+0

对不起,bestsss没有什么可以如此认真的 – Neel 2011-06-08 15:16:54

回答

14

因为"10"字典序比"2"


这里有一个提示:

Map<Integer,String> map = new TreeMap<Integer,String>(); 
map.put(10, "America"); 
map.put(1, "Australia"); 
map.put(2, "India"); 
map.put(11, "China"); 

System.out.println(map); 
// {1=Australia, 2=India, 10=America, 11=China} 

这里是另一条线索:String#compareTo(String) VS Integer#compareTo(Integer)


能否请您解释其实你说的是什么意思“‘10’排在最后比‘2’小”。

首先,读取我连接的JavaDoc,特别是第一个链接。

现在让我们回顾一些简单的字符串比较:

  • “一”,显然来之前, “B”
  • 同样 “B” 来 “Z” 前

它不应该大部分时间将其扩展为数字字符:

  • “0”出现在“1”之前
  • “1” 来 “9”

单个字符的顺序,如abz019被称为其lexicographical order之前。总之,每个角色都有一个数字表示,你不会觉得非常惊讶。

现在让我们来看一些稍微复杂的字符串比较:

  • “aa”在“BB”(这不应该是太大的惊喜)
  • “AA”,也谈到之前的“前ab“

我们是如何确定第二种情况的?字符的字符。

1. "a" is the same character as "a", so we need to keep going 
2. "a" comes before "b", so we're done. 

再举一个例子:“ba”在“c”之前,因为“b”在“c”之前。

让我们做包含数字字符的字符串同样的事情:

  • 是否为 “2” 来了 “10” 之前?我们按字符比较:

    1. “2”是否在“1”之前?不,它来之后,所以我们已经完成了。
+0

你能解释一下,你的意思是什么“10”在词典上小于'2'“。 – Neel 2011-06-08 15:10:20

+0

在输入内容时阅读链接的JavaDocs。 – 2011-06-08 15:11:52

+2

正如“BA”小于“C”一样,“10”小于“2”。在你的情况下,“10”中的“1”小于“2”。 – 2011-06-08 15:15:09