1、Java中集合的结构对比
2.HashMap底层原理
首先HashMap是根据key的hashCode值来进行存储数据的,大多情况下可以直接定位到他的值,所以具有很快的速度,但遍历顺序不确定,HashMap只允许一条记录的建为null,值可以有多个null。
HashMap的负载因子是0.75,容量超过当前的0.75倍后,容量自动扩充至原来的两倍
HashMap是线程不安全的,如果需要线程安全可以使用Collections中的synchronizedMap方法让HashMap具有线程安全的能力,或者直接使用ConcurrentHashMap。
在 JDK1.8 以前,HashMap是使用数组加链表实现的,但是在jdk1.8之后,HashMap 加入了红黑树,所以其由 数组+链表+ 红黑树组成。如果存储value的链表的长度超过8位之后,会将链表转换为红黑树,极大的降低了时间复杂度。
3.线程安全的集合有哪些
1.HashMap类里有 ConcurrentHashMap(加分段锁,只锁定当前的操作,对读不加锁,默认是效率是HashTable的16倍)
2.HashTable(每一步都要锁定整个对象,效率低)
3.Vector(效率低)