作者:一切随缘2502885767 | 来源:互联网 | 2023-01-27 08:19
我读到HashMap有一个支持数组,其中存储了条目(用桶号标记,初始大小为16).数组是有序的,我可以调用get(n)来获取第n个位置的元素.那么为什么HashMap无序并且没有get(n)方法?
1> Zabuza..:
这取决于你对有序意义的看法.
实际上,HashMaps
s内部使用具有固定排序的数组或其他集合.但是,顺序与插入顺序或类似的东西无关.例如,元素按其散列值的大小增加排序,并且它们与元素本身的某些实际排序无关.
如果你认为是关键元素的哈希值,那么HashMap
确实有类似于get(n)
方法的东西.调用该方法,它首先计算给定key-element 的哈希值,然后通过使用它来查看内部结构的值.n
get(*key*)
get(*hash-value*)
这是一个快速搜索产量的图像,显示了HashSet
s 的结构:
请注意,HashSet
s有点相同HashMaps
,它们使用相同的技术并应用相同的图像.但是,映射不是仅插入元素,而是插入由键标识的容器,并另外保存一个值.
就像一个小概述.哈希函数是一个函数,它给定一个对象使用其属性计算一个小值,即哈希值.计算通常可以快速完成,因此在散列值给定的位置处对内部阵列的查找也很快.
为了您的具体问题,作为一个用户一个HashMap
你通常不感兴趣的什么元素专门躲在哈希值1
或2
等等,这就是为什么他们不包括这样的方法.但是,如果您确实需要为特殊应用程序执行此操作,或者总是尝试使用Reflection来访问您的内部,HashMap
或者您也可以在提供此类方法的类周围编写一个小包装器.