java集合类、Map接口、HashTable、ConcurrentHashMap、Key值类型、TreeMap

HashTable       与HashMap的区别


1.推出版本:jdk1.0        jdk1.2
2.性能    同步操作,性能低    异步操作,性能高
3.安全性 线程安全        非线程安全
4.null操作:key&value都不能为空,否则出现NullPointerException    允许存放null,有且只有一个。

ConcurrentHashMap


1.为什么用ConcurrentHashMap,HashTable同步操作,所有并发操作竞争同一把锁。效率低。
2.而Collections提供的同步包装器,只是利用输入Map构造了另一个同步版本,所有操作不再声明为synchronized方法,但还是利用this作为互斥的mutex,没有真正意义上的改进。
3.ConcurrentHashMap分析
早期:分离锁,将内部进行分段(Segment)。

jdk8以及之后的版本:

内部储存和HashMap类似。
不再使用Segment,初始化操作简化,修改为lazy-load形式,有效避免初始开销。
数据存储利用volatile保证可见性
使用CAS,在特定场景下进行无锁并发操作
使用Unsafe、LOngAdder之类的底层手段,进行极端情况的优化。

Map集合的输出


1.不同于Collection接口的iterator方法可以方便的取得Iterator对象输出,Map接口没有此方法。
2.但是Map接口可以转化成Set接口,即entrySet()方法
public Set<Map.Entry<K,V>> entrySet();

// 1.转化成Set集合
Set<Map.Entry<Integer,String>> set = map.entrySet() ;
// 2.获取Iterator对象
Iterator<Map.Entry<Integer,String>> iterator = set.iterator() ;


关于key值


除了系统类(String,Integer),也可以使用自定义类,但需要覆写Object类的hashCode()&equals()方法。
不然当你使用get()方法输出的时候,得到的是null.

TreeMap子类


1.是一个可排序的子类,依靠key的内容排序
2.排序依靠Comparable接口完成,使用compareTo(),与hashCode()和equals()方法无关。

Map集合小结

1.Collection接口保存数据的目的是输出,Map是根据key值输出
2.Map使用Iterator输出(Map.Entry)
3.HashMap结构要理解(链表与红黑树)、     HashMap与HashTable的区别(相似的还有ArrayList和Vector的区别,不要搞混)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值