三种非常见的功能性集合类和低效的linkedlist随机访问方法

本文介绍了Java中几种特殊特性的集合类,包括WeakHashMap、LinkedHashSet、IdentityHashMap和LinkedList的特点及应用场景。WeakHashMap利用弱引用来解决键值对的垃圾回收问题;LinkedHashSet和LinkedHashMap能记录元素插入顺序,并按最近最少使用的策略实现缓存;IdentityHashMap使用对象内存地址作为散列值;LinkedList适用于频繁插入删除但避免随机访问的场景。

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

这个周末看过奥运会的开幕式后就开始java2 核心技术 卷II:高级特性。
因为最近做线程方面的开发,需要一些具有特殊特性的集合类,因此对上面那本书的内容做了一下整理,这些功能性集合类都是为了解决某一特点场景而提出的。
1 weekhashmap 弱散列映射表
映射表中存在除了该映射表本身已经不存在其他引用的键值对,我们无法移除该键值对。但是由于映射表还是存在引用,因此这个键值对会一直无法被垃圾回收器回收。会导致映射表的性能下降,很容易超出指定容量。
weekhashmap 使用弱引用来持有键,weakreference对象用于持有散列表键对象的引用。
垃圾回收器会对不拥有任何引用的对象进行垃圾回收,也会对只拥有weakreference的对象进行垃圾回收。
weekhashmap 在运行期间维护并定期检查一个弱引用队列,然后移除相关联的键值对项。
很适合实现全局的,临时的快速存取策略。
2 linkedhashset和linkedhashmap 链接散列表和链接散列映射表
能够记录插入元素的顺序,使用双向链表实现。
但是当访问元素的时候,linkedhashmap 遵循“最近最少使用”的原则。可以使用这样一个定容量的linkedhashmap 来实现缓存策略。
3 identityhashmap 标示散列映射表
键的散列码不是由hashcode方法来计算的,而是由system.indentityhashcode方法计算的,这是object.hashcode方法根据对象的内存地址来计算散列值的方法。因此identityhashmap 使用==引用比较而不是equals来对各个对象进行比较。
4 linkedlist低效随机访问方法
因为链表不支持快速的随机访问,因此如果想访问链表中的第n的元素,必须要跳过前面的n-1个元素。因此在必须使用整数索引来访问数据的情况下,一般使用arraylist。
对于linkedlist的get(int index)
for(int i=0;i<list.size();i++){

        list.get(i);

}

效率极低

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值