Java常用集合,编码优化,Map篇

本文介绍了Java中的常见Map集合,包括HashMap、HashTable、LinkedHashMap和TreeMap。HashMap是非线程安全且允许null值,内部基于数组+链表实现。HashTable线程安全但不支持null值。LinkedHashMap在HashMap基础上增加顺序性,而TreeMap则提供了排序功能,基于红黑树实现。此外,文章还提到了集合访问的优化技巧。

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

常用Map集合包括:HashMap,HashTable,LinkedHashMap,TreeMap

HashMap与HashTable:

HashTable是线程安全的,它的key与value不允许为null值。HashMap则允许key或value为null,HashMap与HashTable对key的hash算法和hash值到内存的映射算法不同。

HashMap的数据结构:HashMap底层使用数组实现,数组内存储Entry对象,这也是Map迭代时可以使用Map.Entry的原因。Entry对象包含了key,value,hash,next。next指向另外一个Entry,因此HashMap实际上是一个链表的数组。当Map的put()方法产生冲突时,新的值会替换旧值,同时next指向旧值,这样在一个数组索引空间存放多个值。

HashMap的构造方式:HashMap构造时可以指定其数组的容量参数,和负载因子,默认情况其容量为16,负载因子为0.75,同时内部维护一个thresHold阈值,为负载因子*当前数组容量,当实际存入的元素个数超过阈值时,HashMap会进行扩容,因此HashMap的填充比不会超过负载因子,合理的指定容量与负载因子,减少hash冲突,可以提高HashMap的操作效率。

有序的HashMap---LinkedHashMap:

LinkedHashMap在继承HashMap基础上,维护了一个链表,依据构造函数参数LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder),维护两种内部元素的顺序,加入时的顺序和最近一次使用顺序即get()使用的顺序。当使用accesssOrder 为true时,记录get取得的数据顺序,但是在迭代时使用get会报错,在这种情况下get操作会修改元素位置,导致并发的异常,需要注意使用。

可排序的Map---TreeMap:

TreeMap功能强大,实现了SortedMap接口,具备排序功能。TreeMap排序是基于元素本身的顺序排序,即元素的Comparator方法或Comparable,来确定元素顺序。TreeM

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值