列举多个例子生动形象的详细说明Java中的hashmap的底层数据结构原理以及如何使用
Java中的HashMap是基于哈希表实现的,底层数据结构包括数组和链表(或红黑树)。
-
简单的数组:当HashMap中的元素数量较少时,底层使用一个简单的数组来存储键值对。数组的每个元素都是一个链表的头节点,每个节点包含键值对的信息。
-
数组+链表:当多个键值对的哈希值相同时,它们会被放入同一个数组位置的链表中。这样就形成了一个数组+链表的数据结构。通过对键的哈希值取模运算,可以得到元素在数组中的位置。
-
数组+红黑树:当链表中的节点数量达到一定阈值(默认为8个),链表会自动转换为红黑树。这是为了提高在大量元素存在冲突时的查找效率。
示例1:添加元素
HashMap<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
在这个示例中,HashMap会根据键的哈希值将键值对存储在数组的相应位置。例如,"apple"的哈希值为101,将存储在数组的索引为101的位置。
示例2:获取元素
int value = map.get("apple");
在这个示例中,HashMap会根据键的哈希值找到数组的相应位置,然后遍历链表(或红黑树)来寻找与键匹配的节点。最终返回对应的值。
示例3:删除元素
map.remove("apple");
在这个示例中,HashMap会根据键的哈希值找到数组的相应位置,并在链表(或红黑树)中删除与键匹配的节点。
需要注意的是,HashMap的性能受到哈希函数的影响。一个好的哈希函数可以使键的分布均匀,减少哈希冲突,提高查找效率。同时,当HashMap的容量超过一定阈值时,会自动进行扩容以保持性能
原文地址: http://www.cveoy.top/t/topic/iZic 著作权归作者所有。请勿转载和采集!