Java Hashmap put(),它总是有序的吗?
当我们使用Java Hashmap put(),它总是有序的吗?,java,variables,hashmap,Java,Variables,Hashmap,当我们使用put()向hashmap变量添加值时,它们是否总是按顺序排列 因为当我尝试使用简单的代码时,它们是有序的 例如: Map<Integer, Integer> ctrArMap = new HashMap<Integer, Integer>(); ctrArMap.put( 1, 11); ctrArMap.put( 2, 12); ctrArMap.put( 3, 13); ctrArMap.put( 4, 14); c
put()
向hashmap
变量添加值时,它们是否总是按顺序排列
因为当我尝试使用简单的代码时,它们是有序的
例如:
Map<Integer, Integer> ctrArMap = new HashMap<Integer, Integer>();
ctrArMap.put( 1, 11);
ctrArMap.put( 2, 12);
ctrArMap.put( 3, 13);
ctrArMap.put( 4, 14);
ctrArMap.put( 5, 15);
System.out.println(ctrArMap);
Map-ctrArMap=newhashmap();
ctrArMap.put(1,11);
ctrArMap.put(2,12);
ctrArMap.put(3,13);
ctrArMap.put(4,14);
ctrArMap.put(5,15);
系统输出打印LN(CTRAMAP);
但在我的例子中,它们不是有序的。HashMap没有固有的有序性。如果要查找插入顺序,请使用。如果你在寻找自然顺序(A-Z,0-9),那么就使用一个 简单的答案是否定的,哈希映射没有“顺序”。这一切都取决于对象的散列方式。对于一个数字,您可以看到一些排序,但这完全基于对象的hashCode()方法,该对象是put()的键
如果您能找到
Integer
类或类似数字类的源代码,并查看hashCode()
方法,您可能会明白为什么HashMap中的数字会按顺序返回。如果切换到字符串键,很可能会立即看到它不再排序 使用树映射进行升序
语法:
TreeMap<Integer, Integer> ctrArMap= new TreeMap<Integer, Integer>();
ctrArMap.put( 1, 11);
ctrArMap.put( 3, 12);
ctrArMap.put( 2, 13);
ctrArMap.put( 5, 14);
ctrArMap.put( 4, 15);
System.out.println(ctrArMap);
TreeMap ctrArMap=newtreemap();
ctrArMap.put(1,11);
ctrArMap.put(3,12);
ctrArMap.put(2,13);
ctrArMap.put(5,14);
ctrArMap.put(4,15);
系统输出打印LN(CTRAMAP);
HashMap
从不保留插入顺序。它在内部使用散列概念,通过该概念,它将HashCode
生成到相应的键
,并将其添加到HashMap
LinkedHashMap
它保留插入顺序。而键
的查找顺序与您在此LinkedHashMap
中插入的顺序相同TreeMap
类通过使用树实现Map
接口。TreeMap
提供了按排序顺序存储键/值对的有效方法,并允许快速检索您应该注意,与
HashMap
不同,树映射保证其元素将按升序键顺序排序HashMap不会保留插入顺序。但是,如果按顺序使用值0到10,这些值会在内部散列到bucket 0到10,并按该顺序放置在数组中。当您迭代HashMap时,您将按顺序查看这些存储桶。注意:这种实现在将来可能会改变,但这种情况可能不会发生
HashMap的默认大小为16,负载因子为0.7时,可以添加11个值,而无需调整其大小。这意味着,当您查看这些值时,当前实现会按排序顺序将0放置到10
如果只需要0到10的值是有序的,我建议使用数组,而不是哈希映射。看到这个了吗?是的,结果是有序的。我也在想。我可以说,HashMap没有继承顺序不是真的,我们应该说,HashMap可能会在结果中给出插入顺序,但并不总是这样。我不是100%正确,但我可以说“有时HashMap会以插入顺序给出结果”。我们不应该说“Hashmap没有顺序”,而应该说,“Hashmap有时有顺序,但并不总是这样“。因为如果您运行上述程序,它将按顺序给出结果,因此我们无法避免这种情况。我相信,如果示例中的插入顺序颠倒,即5 4 3 2 1,您在打印时仍然会看到升序。对于HashMap,数据的顺序与键的散列值严格相关。