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);
}
}
运行上面的代码片段时,在控制台中我得到的输出为:
{1=Australia, 10=America, 11=China, 2=India}
但我期待输出为
{1=Australia, 2=India, 10=America, 11=China}
但是当在main()
上面改变逻辑时,如下所述 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()方法返回映射中包含的映射的set视图。 set的迭代器以升序键顺序返回映射。那么为什么会出现这种情况呢?
任何建议都非常感谢。
答案 0 :(得分:15)
因为"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,尤其是第一个链接。
现在让我们回顾一些简单的字符串比较:
将其扩展为数字字符应该不会太多:
单个字符的排序称为a
,b
,z
,0
,1
和9
lexicographical order。简而言之,每个角色都有一个数字表示,你不会觉得非常令人惊讶。
现在让我们看一些稍微复杂的字符串比较:
我们如何确定第二个案例?性格特征。
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”之前出现?我们逐个字符地比较: