当前位置: 首页 > 面试题库 >

TreeMap行为异常

梁宏才
2023-03-14
问题内容
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 going
2. "a" comes before "b", so we're done.

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

让我们对包含数字字符的字符串执行相同的操作:

“ 2”在“ 10”之前吗?我们逐个字符地进行比较:

“ 2”在“ 1”之前吗?不,它来了,所以我们已经完成了。



 类似资料:
  • TreeMap是数据树的直观表示,其中每个节点可以有零个或多个子节点,以及一个父节点(根节点除外)。 每个节点都显示为一个矩形,可以根据我们指定的值进行调整大小和着色。 尺寸和颜色相对于图中的所有其他节点进行估值。 以下是树形图图表的示例。 我们已经在Google Charts Configuration Syntax一章中看到了用于绘制图表的配置 。 现在,让我们看一个TreeMap图表的示例。

  • 问题内容: import java.util.*; 输出: 我想知道为什么我们在第一条注释行中得到空值,而第二条注释行中却显示出非空值。 编辑:@null的版本似乎不起作用。我将代码更改如下: 似乎可行,但我不确定。 问题答案: 我的猜测是您的方法永远不会返回0(表示相等),从而导致该方法找不到匹配项。

  • TreeMap类使用树实现Map接口。 TreeMap提供了一种以排序顺序存储键/值对的有效方法,并允许快速检索。 您应该注意,与哈希映射不同,树映射保证其元素将按升序键顺序排序。 以下是TreeMap类支持的构造函数列表。 Sr.No. 构造函数和描述 1 TreeMap( ) 此构造函数构造一个空树图,该图将使用其键的自然顺序进行排序。 2 TreeMap(Comparator comp) 此

  • Treemap 是一个用于树状图可视化的 R 包。

  • 主要内容:1 什么是Java TreeMap,,2 Java TreeMap的语法,3 Java TreeMap的构造方法,4 Java TreeMap的方法,5 Java TreeMap的例子,6 Java TreeMap的例子:remove(),7 Java TreeMap的例子:NavigableMap,8 Java TreeMap的例子:SortedMap,9 HashMap和TreeMap的区别1 什么是Java TreeMap Java TreeMap类是基于红黑树的实现。它提供了一

  • DOM Treemap 是一个 Chrome 和 Firefox DevTools 扩展,用于查看文档树中 DOM 节点的分布。 DOM Treemap 通过额外的面板扩展了 Devtools Elements 选项卡,该面板会显示当前检查的 DOM 元素的节点后代的分布。开发者通过它可以轻松地深入了解 DOM 并找到所有隐藏节点的重要部分。