当我们使用hashmap<Key, Value>
向put()
变量添加值时,它们是否总是在排序?
因为当我尝试使用简单的代码时,他们正在订购。
示例:
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);
但在我的情况下,他们没有订购。
答案 0 :(得分:6)
HashMap : - HashMap
永远不会保留您的广告订单。它在内部使用散列概念,通过散列概念生成HashCode
到对应的key
并将其添加到HashMap
。
LinkedHashMap : - LinkedHashMap
它会保留您的广告订单。系统会将keys
与您在此LinkedHashMap
中插入的订单相同。
TreeMap : - TreeMap
类使用树实现Map
接口。 TreeMap
提供了一种以排序顺序存储键/值对的有效方法,并允许快速检索。
你应该注意到,与HashMap
不同,树形图保证其元素将按升序键排序
答案 1 :(得分:3)
HashMap没有固有的顺序。如果您要查找广告订单,请使用LinkedHashMap。如果您正在寻找自然顺序(A-Z,0-9),请使用TreeMap。
答案 2 :(得分:3)
使用TreeMap升序。
<强>语法:强>
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);
答案 3 :(得分:2)
HashMap不保留插入顺序。但是,如果按顺序使用值0到10,则会在内部对这些值进行哈希处理,并按顺序放置在数组中。当你迭代HashMap时,你正在按顺序查看这些桶。注意:此实现可能在将来发生变化,这可能不会发生。
HashMap的默认大小为16,加载因子为0.7,您可以在不调整大小的情况下添加11个值。这意味着当您查看这些值时,当前实现恰好按排序顺序放置0到10。
如果您只需要0到10的值,我建议使用数组,而不是HashMap。
答案 4 :(得分:1)
简单的答案是否定的,哈希地图没有&#34;顺序&#34;。这一切都是根据对象的散列方式确定的。对于一个数字,您可以看到一些排序,但这纯粹基于对象的hashCode()方法,该方法是put()的关键。
如果您可以了解Integer
类或类似数字类的来源并查看hashCode()
方法,您可能会看到为什么HashMap中的数字会重新出现订购。如果切换到字符串键,您很可能会立即看到它不再排序。