Hashmap put(),它总是订购吗?

时间:2016-03-16 04:24:18

标签: java variables hashmap

当我们使用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);

但在我的情况下,他们没有订购。

5 个答案:

答案 0 :(得分:6)

  1. HashMap : - HashMap永远不会保留您的广告订单。它在内部使用散列概念,通过散列概念生成HashCode到对应的key并将其添加到HashMap

  2. LinkedHashMap : - LinkedHashMap它会保留您的广告订单。系统会将keys与您在此LinkedHashMap中插入的订单相同。

  3. TreeMap : - TreeMap类使用实现Map 接口TreeMap提供了一种以排序顺序存储键/值对的有效方法,并允许快速检索。

  4. 你应该注意到,与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中的数字会重新出现订购。如果切换到字符串键,您很可能会立即看到它不再排序。