我正在尝试使用LinkedHashMap
和Treemap
对HashMap
的输出进行排序。
当我使用treemap
来整理hashmap
时,它的工作方式非常好。
Map<Integer, String> hMap = new HashMap<Integer, String>();
hMap.put(40, "d");
hMap.put(10, "a");
hMap.put(30, "c");
hMap.put(20, "b");
System.out.println(" ");
System.out.println("before");
for (Map.Entry m1 : hMap.entrySet()) {
System.out.print(m1.getKey() + " " + m1.getValue() + " ");
}
System.out.println("after");
Map<Integer, String> hTree = new TreeMap<Integer, String>(hMap);
for (Map.Entry m2 : hTree.entrySet()) {
System.out.print(m2.getKey() + " " + m2.getValue() + " ");
}
输出:前20 b 40 d 10 a 30 c
后10 a 20 b 30 c 40 d
Map<Integer, String> hMap = new HashMap<Integer, String>();
hMap.put(10, "a");
hMap.put(20, "b");
hMap.put(30, "c");
hMap.put(40, "d");
System.out.println("before");
for (Map.Entry m1 : hMap.entrySet()) {
System.out.print(m1.getKey() + " " + m1.getValue() + " ");
}
System.out.println(" ");
System.out.println("after");
LinkedHashMap<Integer, String> lhMap = new LinkedHashMap<Integer, String>(hMap);
Iterator it = lhMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry me = (Map.Entry) it.next();
System.out.print(me.getKey() + " " + me.getValue()+" ");
}
before
20 b 40 d 10 a 30 c
after
20 b 40 d 10 a 30 c
谁能告诉我为什么这种排序不起作用?becuaseLinkedHashMap
正在过滤HashMap
吗?
这是为什么treemap
不受该问题的影响吗?
谢谢
LinkedHashMap
维护插入顺序。这意味着,如果向构造函数传递一个排序的映射
,或者将LinkedHashMap
中的键按排序的顺序放置,它将保持排序。
但是,您将Hashmap
传递给LinkedHashmap
构造函数,并且它没有排序(因为Hashmap
没有排序)。因此,生成的LinkedHashMap
也没有排序。
另一方面,treemap
保持键的排序,因此将键放入treemap
中的顺序(在您的示例中,这是由在源代码hashmap
上迭代时遇到键的顺序决定的)并不重要-结果的map
将始终被排序。
现在我想要的输出是: {0,41},{10.3f,50.05f,9.9f} {10,7},{0.14f,1.2f,85.01f}
问题内容: 是什么区别,而在中?我没有看到输出的任何差异,因为这三个都有和。什么是? 问题答案: 这三个类都实现了该接口,并提供了几乎相同的功能。最重要的区别是通过条目进行迭代的顺序: 绝对不保证迭代顺序。添加新元素时,它甚至可以(并将)完全改变。 将根据密钥的“自然顺序”(根据其方法)(或外部提供的)进行迭代。此外,它实现了SortedMap接口,该接口包含依赖于此排序顺序的方法。 将按照条目放
问题内容: 在Python中,用于初始化不可变类型,通常用于初始化可变类型。如果将其从语言中删除,该怎么办(轻松)? 例如, 可以这样重写: 为澄清问题的范围:这不是一个问题关于如何以及是使用或它们之间有什么区别。这是一个问题,如果从语言中删除将会发生什么。有什么坏事吗?事情会变得很难或不可能吗? 问题答案: 您可以在中进行的所有操作都可以在中完成。 那么,为什么要使用? 因为您不必将实例存储在变
问题内容: 我开始学习Java。什么时候可以在TreeMap上使用HashMap? 问题答案: 是一个的示例,这意味着可以对键的顺序进行排序,并且在对键进行迭代时,可以期望它们会按顺序排列。 另一方面,不作任何保证。因此,当遍历a的键时,您无法确定它们将以什么顺序排列。 一般而言,它会更有效,因此只要您不关心键的顺序,都可以使用它。
我在vue3项目中使用了 '@vueuse/gesture' 的useWheel函数来帮助监听滚轮在一个元素上的滑动,但我发现指令能生效,而Composable的写法却不生效,无法触发wheelHandler回调。 我在调用useWheel之前也log了 workspaceArea.value是有值的,正常的。 是我的代码写的有问题吗?还是库的bug?
} 如果您可以在上面的示例中看到,我显式地使hashcode()在所有情况下都返回1,以检查当hashmap中key.hashcode()发生冲突时会发生什么。发生什么,为这些Map维护一个链表。条目对象,例如 1(key.hashcode())将链接到 (据我所知,假值是在真值之后输入的)。 但是当我做keySet()时,true先返回,然后false,而不是false先返回。 所以,我在这里假