跳转至

集合

集合

优点

  1. 动态保存任意多个对象,使用方便
  2. 提供了一系列方便的方法

框架体系

  1. 分为两组:
    1. 单列集合:单个对象
      1. ListSet 实现的子类
    2. 双列集合:键值对
      1. Map 实现的子类 单列集合 双列集合

iterator

  • 使用iterator()方法返回一个迭代器
  • 使用iterator.hasNext()
  • 再次遍历则重置迭代器

List接口

ArrayList

  1. 基本等同于Vector,但ArrayList是线程不安全的(效率高),在多线程的情况下一般使用Vector

源码分析

  1. ArrayList中维护了一个Object类型的数组transient Object[] elementData
  2. 创建对象时,入伙使用的时无参构造器,则初始elementData容量为0
  3. 添加元素时,先判断是否需要扩容,如需要,则调用grow()方法,使容量变为1.5

Vector

  1. Vector的所有方法都是带Synchronized,都是线程同步的、线程安全的(多线程开发时)

源码分析

  1. Vector中维护了一个Object类型的数组transient Object[] elementData
  2. 创建对象时,入伙使用的时无参构造器,则初始elementData容量为10
  3. 添加元素时,先判断是否需要扩容,如需要,则调用grow()方法,使容量变为2

LinkedList

  • 底层实现了双向链表和双端队列的特点
  • 可以添加任意元素
  • 线程不安全

底层结构

  • 维护了一个双向链表
  • 维护了两个属性:firstlast

Set接口

  1. 基本介绍:
    1. 无序,无法索引,顺序取决于hash后索引的结果
    2. 不允许重复的元素

HashSet

底层机制

  1. HashSet底层是HashMap
  2. 添加一个元素时,先得到hash值,再转换成索引值
  3. 找到存储数据表table,看这个索引位置是否已经存放元素
    1. 没有则直接加入
    2. 有则对用equals()比较
      1. 相同则放弃添加
      2. 不相同则添加到最后
  4. 如果一条链表的元素个数超过TREEIFY_THRESHOLD(默认为8),并且table的大小>= MIN_TREEIFY_CAPACITY(默认64),则进化为红黑树