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

LinkedHashMap的keySet()和values()方法的行为

华献
2023-03-14
问题内容

考虑我创建一个LinkedHashMap,如下所示:

Map<String, String> map = new LinkedHashMap<String, String>();
map.put("a", "aa");
map.put("b", "bb");
map.put("c", "cc");

当我打电话keySet()给我时,有没有给我订购一套?如果我打电话给我values(),这些也是吗?

编辑

很抱歉,是有序的,没有排序。


问题答案:

首先LinkedHashMap有序 但没有 排序TreeMap排序 (并因此 有序 以及)。

这就是说,你不能指望的输出keySet(),并values()进行排序。实际上,JavaDoc说 与订单无关 (事实证明,顺序
:由JavaDoc的保证是保证键和值从一个LinkedHashMap的对象返回的顺序?这些集合的,但看他们执行应遵循基本的顺序)Map

为了解决您对这个问题的最新修改:它不是合同的一部分,实际上LinkedHashMapkeySet()至没有实现,values()而是使用基类的(HashMap)版本。即使基于实现可以看到顺序被保留,但如果您希望应用程序具有可移植性,则不应该依赖该顺序。



 类似资料:
  • 问题内容: 和遍历函数之间是否有性能差异? 问题答案: 我认为,由于其高级实现,遍历必须更快 这就是为什么: 让我们逐步执行。 该实施是这样的: 在 从扩展和继承相同的实现。 两者的实现方式不同。 因为它从 但是从 因此, 差异 本质上可以归结为实施。 因为它只是调用e.after,其中e是,但是对于遍历数组以查找下一个下一个要涉及一些工作。 UPDATE :用于在 Entry []不是连续的存储

  • 问题内容: Java 5 http://docs.oracle.com/javase/1.5.0/docs/api/java/util/SortedMap.html Java 6 https://docs.oracle.com/javase/6/docs/api/java/util/SortedMap.html 如您所见,从Java 6开始,这三个api被覆盖。谁能告诉我进行此更改的目的是什么?

  • } 如果您可以在上面的示例中看到,我显式地使hashcode()在所有情况下都返回1,以检查当hashmap中key.hashcode()发生冲突时会发生什么。发生什么,为这些Map维护一个链表。条目对象,例如 1(key.hashcode())将链接到 (据我所知,假值是在真值之后输入的)。 但是当我做keySet()时,true先返回,然后false,而不是false先返回。 所以,我在这里假

  • 本文向大家介绍Java WeakHashMap keySet()方法与示例,包括了Java WeakHashMap keySet()方法与示例的使用技巧和注意事项,需要的朋友参考一下 WeakHashMap类方法 keySet()方法在java.util包中可用。 keySet()方法用于检索此映射中存在的所有键,以在集合中进行查看。 keySet()方法是一种非静态方法,只能通过类对象访问,如果

  • 本文向大家介绍Java EnumMap keySet()方法与示例,包括了Java EnumMap keySet()方法与示例的使用技巧和注意事项,需要的朋友参考一下 EnumMap类方法 keySet()方法在java.util包中可用。 keySet()方法用于获取此枚举映射中存在的所有键的集合视图。 keySet()方法是一种非静态方法,只能通过类对象访问,如果尝试使用类名访问该方法,则会收

  • 我声明枚举为: 然后,如下所示迭代枚举: 我检查了Java API,但找不到values()方法?我很好奇这种方法是从哪里来的? API链接:https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html