Java技术整理(2)—— Java集合篇

集合类存放在 java.util 中,主要有三种:Set、List、Map

Collection:是List、Set、Queue的最基础接口。
Iterator:迭代器,可以通过迭代器遍历集合中的数据
Map:映射表的基础接口

  • List

    • ArrayList:
      • 特点: 有序、可重复、查询速度快、更新速度慢
      • 底层实现: 数组
      • 线程安全性: 线程不安全
      • 扩容机制: 当容量不足时扩充当前容量的1.5倍
    • Vector:
      • 特点: 有序、可重复、查询速度快、更新速度慢
      • 底层实现: 数组
      • 线程安全性: 线程安全(线程同步,只有获得同步锁的线程才能写Vector)
      • 扩容机制: 当容量不足时扩充当前容量的1倍
    • LinkedList
      • 特点: 有序、可重复、查询速度慢、更新速度快
      • 底层实现: 链表
      • 线程安全性: 线程不安全
      • 区别: 专门定义了操作表头和表尾的元素,可实现堆、栈、队列和双向队列的功能。
  • Set

    • HashSet:
      • 特点: 无序、不可重复、存取速度快
      • 底层实现: Hash表
      • 存储特点: 根据hashCode判断是否为同一对象
      • 解决hash冲突的方法: 若hashCode相同,则采用拉链法;若hashCode不同,则采用hash表顺延的方式,直到有空位置
    • TreeSet:
      • 特点: 有序、不可重复、存取速度快
      • 底层实现: 排序二叉树
      • 存储对象的排序特点: Integer和String对象采用默认的排序规则,自定义对象必须实现Comparable接口,并且覆写compareTo()才能进行排序。
    • LinkedHashSet:
      • 特点: 无序、不可重复、存取速度快
      • 底层实现: hash表+双向队列
      • 结构特点: 基于LinkedHashMap的HashSet接口,LinkedHashMap存储数据,操作方法上继承了HashSet。
  • Queue

    • 特点: 无序、可重复、存取速度快
    • 底层实现: 数组或链表
  • Map

    • HashMap:
      • 特点: key-value映射、key和value允许null值
      • 底层实现: 数组+链表+红黑树(JDK 1.8引入)、数组+链表(JDK 1.7引入)
      • 线程安全性: 线程不安全
      • 结构特点: 一个hash表,元素是Entry链表,Entry对象包含四个属性:key、value、hashCode、nextNode
        • capacity: 当前数组容量,始终保持2^n,每次扩容为当前数组的一倍。
        • loadFactor: 负载因子,默认为0.75
        • threshold: 扩容阈值,等于 capacity * loadFactor
      • 链表与红黑树的转换机制: 当链表元素数为8个或以上,则自动将链表转换为红黑树;当树节点少于8个,则自动转换为链表进行存储。
    • Hashtable:
      • 特点: key-value映射、key唯一、value可重复
      • 底层实现: hash表存储键值对
      • 线程安全性: 线程安全(采用线程同步锁的方式保证线程安全)
    • TreeTable:
      • 特点: key-value映射,默认按照键排序,可指定比较器进行排序
      • 底层实现: 二叉树
    • LinkedHashMap
      • **特点:**按照添加顺序进行存储
    • ConcurrentHashMap
      • 特点: 并发存储数据
      • 线程安全性: 线程安全(采用分段锁Segment,分段锁继承重入锁ReentranLock特点)
      • 结构特点: 整个Map是由Segment组成的,每次线程操作该map时,都只是操作一个segment,其它segment不受其影响。
        • concurrencyLevel: 并行级别,默认为16,初始化后不可扩容,是该Map组成的segment数,可同时支持16个线程并发写
      • Java 8 的并发Map: 引入了红黑树,主要是针对每个segment存储的HashMap进行改进。

你可能感兴趣的:(java,开发语言)