java当中的集合类或集合框架

collection接口是集合类的顶层接口,collections是工具类
collection有两个子接口,一个list接口,一个是set接口
list接口有序可重复,set接口无序不可重复
list接口常用的实现类有
arrayList 基于数组实现的
linkedList 基于链表实现的 区别参考数组和链表区别
vector 基于数组实现的,但是是线程安全的(synchronized) 线程安全:指多个线程在执行同一段代码的时候采用加锁机制,使每次的执行结果和单线程执行的结果都是一样的,不存在执行程序时出现意外结果。
线程不安全:是指不提供加锁机制保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。
copyOnwriteArrayList 复制数组副本来实现的
set接口常用实现类
HashSet 基于hashMap来实现的,实现不可重复是通过 hashCode方法和equals方法进行两次比较,先比较hashCode,再通过equals
TreeSet 基于二叉树来实现的,可以对元素进行排序(排序规则默认是自然顺序,可以自定义比较器,实现自定义排序)
arrayList和copyonwriteArrayList的区别:
arrayList底层是数组,插入时会先判断容量是否足够,如果不够会进行扩容(新建一个数组,将原有的数据复制到新数组里面)删除时数组元素会进行移动
copyOnwriteArrayList:实现了List接口,内部持有一个ReentrantLock lock = new ReentrantLock();底层是用volatile transient声明的数组 array,读写分离,写时复制出一个新的数组,完成插入、修改或者移除操作后将新数组赋值给array

Map接口(key value结构的)
map接口的实现类
HashMap key不可重复,无序,可以为null
实现原理 基于数组和链表来实现的
当存入一组键值对的时候,先对key进行hash,然后映射到一个初始化长度为16的数组上,当不同的key产生hash碰撞的时候,value会通过链表结构来进行存储,jdk1.8之后对hashMap进行了改进,当链表长度达到临界值8,会通过红黑树来存储value,hashMap有两个参数,一个是初始化数组长度16,负载因子0.75,当满足扩容阈值的时候(当数组的12个元素被存满,并且有hash碰撞了),动态扩容,以2倍的增长方式进行扩容.
HashTable
HashTable是线程安全的hashMap(synchronized机制)key不准许为null
TreeMap基于二叉树来实现的,可对key进行自然排序(自定义比较器,写比较规则)
ConcurrentHashMap是线程安全的,对整个hash桶采用分段策略,拆分成若干个段segment,对每一个段上锁(synchronized),极大的提高了并发修改的效率.

猜你喜欢

转载自blog.csdn.net/he19970408/article/details/107707511