探寻LinkedList,HashMap,TreeMap的区别

本文探讨了LinkedList、HashMap和TreeMap的特点及应用场景。详细介绍了散列与散列码的概念,解释了HashMap为何高效,以及LinkedList和TreeMap的工作原理。适合对数据结构有兴趣的读者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

探寻LinkedList,HashMap,TreeMap的区别:
- 散列与散列码
- HashMap快的原因
- LinkedList
- TreeMap


散列与散列码:

散列 的价值主要在于速度,键没有按照任何特定顺序进行保存,所以只能进行简单的线性查找,而线性是最慢的查询方式了。存储一组元素最快的数据结构是数组,可以通过键的对象生成一个数字,作为数组的下标,这个数字就是散列码,数组并不保存值,而是保存值的list,然后对list的值使用equal()进行线性查找,使用散列的话,不是查询整个list而是快速的跳到数组的某个位置,只对很少的元素进行比较。

HashMap快的原因

在映射表中使用使用get()进行线性搜索时,执行速度会相当慢,HashMap使用了特殊的值,称作散列码,来取代对键的缓慢搜索。散列码是唯一的,用以代表对象的值,他通过将该对象的某些信息进行转换而生成的。hashCode()是根类object中的方法,默认使用对象的地址计算散列码,因此所有java对象都能产生散列码。Map相当于一个数组,数组并不保存”键“本身,而是通过”键“对象生成一个数字,将其作为数组的下标索引,这个数字就是散列码。可以通过构造器设置的容量和负载因子,调整容器的性能。

LinkedHashMap

LinkedHashMap 使用的是LRU算法,最近最少的算法,没有被访问过的元素会出现在队列的前面,类似于HashMap,比他慢一点,但是迭代访问的时候反而更快,因为他使用链表维护内部次序,正如官方文档介绍
Hash table and linked list implementation of the Map interface, with predictable iteration order. This implementation differs from HashMap in that it maintains a doubly-linked listrunning through all of its entries. This linked list defines the iteration ordering, which is normally the order in which keys were inserted into the map (insertion-order).
LinkedHashMap是Hash表和链表的实现,并且依靠着双向链表保证了迭代顺序是插入的顺序。它是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现,它还可以按读取顺序来排列,像连接池中可以应用。

—— [官方文档 ]

TreeMap

TreeMap的实现是红黑树算法的实现,所以要了解TreeMap就必须对红黑树有一定的了解

转载 —— [Java提高篇(二七)—–TreeMap ]

TreeMap特点在于所有的结果都是进行过排序的,是一个唯一带有subMap()方法的Map,可以返回一个子树
TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,通过comparator接口我们可以对TreeMap的内部排序进行精密的控制
TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值