java集合类归纳

粗略看了下集合类的常用类,没耐心看源码,看了到面试那会也忘了,就简单记录下各个类的基本特点吧(摸鱼真爽)

先来张架构图撑下场面,好看的
Collection架构

List

接口特性:有序的,元素可重复,允许元素为null

ArrayList 🔥

  • 底层结构是数组,初始容量为10,每次扩容1.5倍
  • 在增删时,用的是数组复制System.arraycopy方法,是native方法,效率不错
  • 适合随机查找和遍历,不适合插入和删除
  • 非线程安全

LinkedList 🔥

  • 底层结构是双向链表
  • 实现Deque接口,可以像栈和队列操作它
  • 适合插入和删除,不适合查找
  • 非线程安全

Vector

  • 底层结构是数组,初始容量为10,每次扩容2倍
  • 线程安全,但不推荐,可以使用List list = Collections.synchronizedList(new ArrayList(…));

Map

存储key-value键值对,没有实现Collection接口

HashMap 🔥

  • 底层结构是散列表+红黑树,初始容量为16,装载因子0.75,每次扩容2倍
  • key不可重复,允许key和value为null
  • 存储无序
  • 非线程安全

LinkedHashMap

  • 底层结构是散列表+红黑树+双向链表,父类是HashMap
  • 允许key和value为null
  • 插入有序
  • 提供两种遍历顺序,访问顺序和插入顺序(默认)
  • 非线程安全

TreeMap 🔥

  • 底层结构是红黑树
  • 不允许key为null
  • 使用Comparator/Comparable实现排序
  • 可以根据key进行排序,默认使用key的自然排序
  • 非线程安全

Hashtable

  • 底层结构是散列表
  • 不允许key或value为null
  • 线程安全,但效率低,已过时

ConcurrentHashMap

  • 底层结构是散列表+红黑树
  • key和value都不能为null
  • 使用锁分段技术保证线程安全

Set

Set接口特性:不允许重复的数据。检索效率低下,删除和插入效率高

HashSet 🔥

  • 底层结构是哈希表+红黑树
  • 无序
  • 数据可为null
  • 非线程安全

TreeSet

  • 底层结构是红黑树
  • 有序,可实现排序功能
  • 数据不可为null
  • 非线程安全

LinkedHashSet

  • 底层结构是哈希表+双向链表,父类是HashSet
  • 无序
  • 数据可为null
  • 写入比HashSet强,新增和删除比HashSet差
  • 非线程安全

参考链接

0%