gpt4 book ai didi

java - TreeMap 行为异常

转载 作者:搜寻专家 更新时间:2023-10-31 08:14:10 26 4
gpt4 key购买 nike

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=澳大利亚,10=美国,11=中国,2=印度}

但我希望输出为

{1=澳大利亚,2=印度,10=美国,11=中国}

但是当在上面的 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=澳大利亚,CH=中国,IN=印度,US=美国})

根据我的理解,TreeMap 的 entrySet() 方法返回 map 中包含的映射的 Collection View 。该集合的迭代器以升序键顺序返回映射。那么为什么在第一种情况下会发生这种情况?

非常感谢任何建议。

最佳答案

因为 "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)对比Integer#compareTo(Integer) .


Can you please explain what actually do you mean by "'10' is lexicographically smaller than '2'".

首先,阅读我链接的 JavaDoc,尤其是第一个链接。

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

  • “a”显然在“b”之前
  • 同样“b”出现在“z”之前

将其扩展到数字字符应该不会太费力:

  • “0”在“1”之前
  • “1”在“9”之前

单个字符的顺序,例如abz0 19 被称为他们的 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”之前吗?不,它在后面,所以我们已经完成了。

关于java - TreeMap 行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6280835/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com