TreeMap行为异常
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()方法返回地图中包含的映射的集合视图。集合的迭代器以升序键顺序返回映射。那么,为什么在第一种情况下会发生这种情况?
任何建议都将受到高度赞赏。
回答:
因为"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”
- 同样,“ b”在“ z”之前
将其扩展为数字字符不需要花费太多时间:
- “ 0”在“ 1”之前
- “ 1”位于“ 9”之前
单个字符的顺序,比如a,b,z,0,1,和9被称为他们的字典顺序。简而言之,每个字符都有数字表示,你不会感到惊讶。
现在让我们看一些更复杂的字符串比较:
- “ aa”在“ bb”之前(这不足为奇)
- “ aa”也在“ ab”之前
我们如何确定第二种情况?逐个字符。
1. "a" is the same character as "a", so we need to keep going2. "a" comes before "b", so we're done.
再举一个例子:“ ba”在“ c”之前,因为“ b”在“ c”之前。
让我们对包含数字字符的字符串执行相同的操作:
“ 2”在“ 10”之前吗?我们逐个字符地进行比较:
“ 2”在“ 1”之前吗?不,它来了,所以我们已经完成了。
以上是 TreeMap行为异常 的全部内容, 来源链接: utcz.com/qa/407335.html