HashTable订单价值如何?

时间:2017-07-12 12:19:02

标签: java data-structures hashtable

我想知道hashtable在使用Put方法后如何对其值进行排序。

例如:

a         b           c       d                   e
Normal    2 weeks     Next    Save and Finish     Go to Cases

hashtable.put("""正常&#34); ...

值的顺序将不同,而不是我们放置的顺序。 我认为订单会是这样的:

b         a        e              c         d                     
2 weeks   Normal   Go to Cases    Next      Save and Finish 

请建议解决问题的数据结构。

感谢。

3 个答案:

答案 0 :(得分:6)

在这些情况下,答案通常是in the documentation

  

此课程不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。

答案 1 :(得分:2)

HashMap类似,HashTable也不保证元素的插入顺序。

<强>原因
HashTable已针对快速查找进行了优化。这是通过计算存储的键值的散列来实现的。这样可以确保在HashTable中搜索任何值为O(1),无论HashTable中的数字条目如何,都会占用相同的时间。

因此,基于为密钥生成的散列来存储条目。这就是为什么HashTable不能保证插入元素的顺序的原因。

  

哈希值(或简称哈希),也称为消息摘要,是从一串文本生成的数字。哈希值远小于文本本身,并且由公式生成,使得某些其他文本极不可能产生相同的哈希值。

http://www.webopedia.com/TERM/H/hashing.html
http://interactivepython.org/runestone/static/pythonds/SortSearch/Hashing.html

答案 2 :(得分:1)

如前所述,哈希表迭代顺序只是随意的。如果要保留插入的顺序,请使用LinkedHashMap。如果要获取自然顺序或预定义顺序,请使用TreeMap。作为自然顺序,我的意思是键的顺序,例如String,Integer,Long等,作为实现Comparable接口,自动排序为实现Comparable的任何其他类。预定义的顺序也可以由比较器提供,创建TreeMap。