欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Java集合框架

时间:2023-06-10
Java容器 一、Map 1、HashMap

JDK1.7中使用数组+链表实现JDK1.8中使用数组+链表+红黑树实现在JDK1.8中的原理
初始容量(capacity )为16,在第一次放入元素时才分配
扩容条件:当前容量(capacity )*加载因子(loadFactor )>总容量(threshold )。每次扩容为当前的2倍
当链表节点大于8个,且桶的长度大于64则升级为红黑树,没有超过64则直接扩容为两倍
当红黑树的节点小于6个则还原为链表线程不安全无序、最多一条key为null的数据 2、HashTable

哈希表:数组+链表实现初始容量为11,加载因子0.75,每次扩容为2倍+1线程安全 3、TreeMap

红黑树实现对key自动排序,key不能重复无序、键值可为null 4、linkedHashMap

链表实现有序线程不安全 5、ConcurrentHashMap

JDK1.7:使用分段锁segmentJDK1.8:取消分段锁,使用CAS和Synchronized来保证线程安全,Synchronized只锁了当前链表或红黑树的首结点,从而提升了效率 二、Collection 1、List ArrayList

动态数组实现JDK1.7:在创建对象时就创建一个长度为10的数据,放不下时创建一个长度为原先1.5倍的新数组,将原先的内容复制到新数组。对象的创建类似单例模式中的饿汉式。JDK1.8:创建对象时创建空数组,第一次调用add操作时才创建长度为10的数组。对象的创建类似单例模式中的懒汉式。线程不安全查询快、增删慢 linkedList

双向链表实现线程不安全增删快、查询慢空间占用比ArrayList大 Vector

动态数组实现默认创建长度为10的数组,每次扩容为当前的两倍线程安全,synchronized实现。相当于加了锁的ArrayList CopyonWriterArrayList

写入时复制适合大量读的操作,可以读写分离,但并不是读写锁实现的线程安全初始容量为0,每次写入的时候扩容,新的容量为插入容量+当前容量 2、Set TreeSet

基于TreeMap实现有序、不允许有重复元素 HashSet

基于HashMap实现无序、不允许有重复元素, 允许有 null 值线程不安全 linkedHashSet

基于linkedHashMap实现 CopyonWriteSet

基于CopyOnWriteArrayList实现 3、Queue Deque

常用子类ArrayDeque BlockingQueue——阻塞队列

常用子类

linkedBlockingQueue
ArrayBlockingQueue

常用来实现生产者和消费者模型

AbstractQueue
学习笔记,欢迎纠正补充~

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。