Java集合(自用)

一、单列集合:Collection

1.List

有序可重复

1)ArrayLIst

允许添加所有元素,包括null,可以多个null;以数组来实现存储结构;线程不安全,随机查询效率高;尾部增删效率高,其他增删效率低。

  • transient Object[] elementData; 
    • 此属性为数据缓冲区,缓冲区的大小就是ArrayList的容量。
    • 主要依赖此属性对数据进行操作。
    • 番外:transient 瞬时的、短暂的,此关键字描述的属性不参与序列化。
  • 构造器
    • public ArrayList() 无参构造器,会将elementData属性赋值为空数组;
    • public ArrayList(int initialCapacity) 带初始容量的构造器,将elementData属性赋值为已传入参数为容量的Object数组,参数必须大于或等于0;
    • public ArrayList(Collection<? extends E> c),将c的内容拷贝到elementData中。
  • ArrayList 扩容机制
    • 初始容量
      • new ArrayList(),初始容量为0。
      • new ArrayList(initialCapacity),初始容量为 initialCapacity,initialCapacity 为 int。
      • new ArrayList(c),初始容量为 c.size(),c为Collection<? extends E>类型。
    • 扩容
      • 如果原数组elementData容量不够用,进行扩容。
      • 如果原容量为0,直接扩容至10。
      • 如果原容量大于0,扩容至原容量的1.5倍,即 原容量 + (原容量 / 2)。
      • 最大容量为Integer.MAX_VALUE,即 2147483647(2³¹-1)。

2)Vector

允许添加所有元素,包括null,可以多个null;以数组来实现存储结构;线程同步的,即线程安全的,Vector公开的方法基本都用synchronized来修饰的

  • protected Object[] elementData;
    • 此属性为数据缓冲区,此属性的长度就是Vector的容量,以此来操作数据
  • 构造器
    • public Vector(); 
      •  初始容量为10,默认扩容机制。
    • public Vector(int initialCapacity); 
      • 初始容量为 initialCapacity ,默认扩容机制。
    • public Vector(int initialCapacity, int capacityIncrement); 
      • 初始容量为 initialCapacity,扩容机制为 capacityIncrement。
  • 扩容机制
    • 原数组elementData容量不够用,进行扩容。
    • protected int capacityIncrement;
      • 此属性为Vector的扩容机制
      • 当扩容机制为0时,翻倍扩容,即 原容量 + 原容量
      • 当扩容机制不为0时,增量为扩容机制,即 原容量 + 扩容机制(capacityIncrement)

3)LinkedList

允许添加所有元素,包括null,可以多个null;以双向链表来实现存储结构;线程不安全的,随机查询效率低;头尾增删效率高,其他增删效率低。

2.set

不可重复

1)HashSet 

底层以HashMap实现;无法保证取出的顺序与添加的顺序一致;无法通过索引获取;线程不安全;可以存null(只能有一个)

① LinkedHashSet 

继承HashSet,实现Set;底层以LinkedHashMap实现;取出的顺序添加时的顺序一致;线程不安全的;可以存null

2)TreeSet

底层以红黑树实现;

二、双列集合(一般为键值对形式):Map

1.HashMap

底层以数组+链表+红黑树实现

  • 扩容机制
    • 默认情况(使用无参构造器创建HashMap):添加第一个元素时,初始table容量为16,扩容阈值为12(当HashMap内的元素个数超过12时,进行扩容)
    • 扩容因子:默认0.75(可以在使用构造器HashMap(int initialCapacity, float loadFactor)指定扩容因子);用于计算扩容阈值,table容量 * 扩容因子;如table容量为16,扩容因子为0.75,扩容阈值为16 * 0.75=12.
    • 当某一条链表的元素达到8个时,如果table的容量大于等于64,进行红黑树树化,否则对table进行扩容
    • 当HashMap的元素个数超过了扩容阈值,对table进行扩容
    • table扩容:原容量 << 1(原容量*2)
  • 树的退化
    • 扩容时,如果发生的树的拆分,当树的元素个数<=6时退化为链表
    • 删除树结点时,如果根结点、根结点的左子结点、根结点的右子结点、根结点的左子结点的左子结点当中有一个节点为null,退化为链表

1)LinkedHashMap

继承HashMap实现Map;底层以数组+双向链表实现

2.TreeMap

3.Hashtable

1)Properties

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值