Collection结构图
Map结构图
总结
推荐视频:Java零基础教程视频(适合Java 0基础,Java初学入门)
ArrayList
:底层是数组
LinkedList
:底层是双向链表
Vector
:底层是数组,线程安全的,效率较低,使用较少
HashSet
:底层是 HashMap,放到 HashSet集合中的元素等同于放到HashMap集合 key部分
TreeSet
:底层是TreeMap,放到TreeSet.集合中的元素等同于放到TreeMap集合key部分
HashMap
:底层是哈希表
HashTable
:底层是哈希表,线程安全,效率较低,使用较少
Properties
:线程安全的,key和value只能存储字符串
TreeMap
:底层是二叉树,它的key可以自动按照大小排序
List
集合存储元素的特点:
- 有序:存进去和取出来的顺序相同,每个元素都有下标
- 可重复
Set
集合存储元素的特点:
- 无序:存进去和取出来的顺序不相同,Set集合中元素没有有下标
- 不可重复
SortedSet
(SortedMap
)集合存储元素的特点
- 无序不可重复
- SortedSet集合中元素是可排序的
- 可排序:可以按照大小顺序排列
Map
集合的key就是一个Set集合,往Set集合放数据实际上放到了Map集合的key部分。
ArrayList
- 默认初始化容量为10
- 底层是object数组
- 扩容1.5倍
- 建议给定一个预估的初始化容量,减少数组的扩容次数
- 优点:随机增删元素效率低
- 缺点:末尾增删元素效率高
LinkedList
- 底层也是有下标的,双向链表
- 检索、查询的时候只能从头结点开始
- 优点:随机增删元素效率高
- 缺点:查询效率低
Vector
- 线程安全
- 初始化容量为10
- 2倍扩容
- 底层是数组
HashSet
- 底层HashMap
- 无序,不可重复
- 无序是指没有下标
TreeSet
- 底层TreeMap
- 无序,不可重复
- 元素会自动排序存储
- 要实现
Comparable<T>
的compareTo(T o)
方法
HashMap
-
底层是哈希表
-
数组+单向链表
-
源码
public class HashMap<K,V>{ //数组 transient Node<K,V>[] table; //链表 static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; V value; Node<K,V> next; } }
-
同一个链表的hash值相等
-
放在HashMap中的元素需要重写equals和hashCode方法
-
map.put(k,v)
- 封装node对象
- 调用hashCode()方法获取哈希值
- 通过哈希函数转化成数组下标
- 下标处没有元素,直接将Node添加到这个位置
- 有元素,在链表每个节点进行euquals()比较,如果全为false,在末尾添加,如果有True,更新Value
-
map.get(k)
- 调用hashCode()方法获取哈希值
- 通过哈希函数转化成数组下标
- 下标处没有元素,返回None
- 下标有链表,对链表元素的Key比较equals,有true返回value,全为false,代表没有元素,返回null
-
扩容是原来长度的2倍
-
允许key值为null
HashTable
- key和value都不能为null
- 线程安全
- 初始化容量11
- 扩容2倍+1
Properties
- 继承HashTable,线程安全的
- key和value只能存储字符串
TreeMap
- 放到TreeMap集合中的元素的key部分进行排序有两种实现方式
- 实现
java.lang.Comparable
的compareTo方法 - 构造TreeSet或TreeMap集合的时候传一个比较器对象Comparator
- 实现
- 比较规则不会发生改变或者比较规则只有一个的时候使用Comparable
- 比较规则多个,并且比较规则需要频繁切换Comparator