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:-
    HashMap
    从不保留插入顺序。它在内部使用散列概念,通过该概念,它将
    HashCode
    生成到相应的
    ,并将其添加到
    HashMap

  • LinkedHashMap:-
    LinkedHashMap
    它保留插入顺序。而
    的查找顺序与您在此
    LinkedHashMap
    中插入的顺序相同

  • TreeMap
    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,数据的顺序与键的散列值严格相关。