一、集合框架总体架构图
黄色:代表接口 绿色:代表抽象类 蓝色:代表类
概述:
List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口
Set下有HashSet,LinkedHashSet,TreeSet
List下有ArrayList,Vector,LinkedList
Map下有Hashtable,LinkedHashMap,HashMap,TreeMap
Collection接口下还有个Queue接口,有PriorityQueue类
二、Connection接口
List 有序,可重复
每一个元素都存在整数索引
ArrayList
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程不安全,效率高
Vector
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程安全,效率低
LinkedList
优点: 底层数据结构是链表,查询慢,增删快。
缺点: 线程不安全,效率高
遍历方式
- 迭代器
- 普通for
- 增强for
Set 无序,唯一
HashSet
底层数据结构是哈希表。(无序,唯一)
如何来保证元素唯一性?
1.依赖两个方法:hashCode()和equals()
LinkedHashSet
底层数据结构是链表和哈希表。(FIFO插入有序,唯一)
1.由链表保证元素有序
2.由哈希表保证元素唯一
TreeSet
底层数据结构是红黑树。(唯一,有序)
- 如何保证元素排序的呢?
自然排序
比较器排序
2.如何保证元素唯一性的呢?
根据比较的返回值是否是0来决定
遍历方式
- 迭代器
- 增强for
注意
Collection集合我们到底使用谁呢?
唯一吗?
是:Set
排序吗?
是:TreeSet或LinkedHashSet
否:HashSet
如果你知道是Set,但是不知道是哪个Set,就用HashSet。
否:List
要安全吗?
是:Vector
否:ArrayList或者LinkedList
查询多:ArrayList
增删多:LinkedList
如果你知道是List,但是不知道是哪个List,就用ArrayList。
如果你知道是Collection集合,但是不知道使用谁,就用ArrayList。
如果你知道用集合,就用ArrayList。
三、Map接口
Map集合为双列集合,Map接口有三个比较重要的实现类,分别是HashMap、TreeMap和HashTable。
Map集合的数据结构只和键有关,和值无关
HashMap
无序,不同步,线程不安全,允许null值(key和value都允许),效率高,父类是AbstractMap
底层数据结构是哈希表。(无序,唯一)
如何来保证元素唯一性?
1.依赖两个方法:hashCode()和equals()
HashTable
无序,同步,线程安全(所有 public 方法声明中都有 synchronized关键字),不予许null值,效率低,父类是Dictionary
TreeMap
底层数据结构是二叉树。(唯一,有序)
- 如何保证元素排序的呢?
自然排序
比较器排序
自然排序要求元素必须实现Comparable接口,到底使用的是那种排序主要依赖于构造函数 - 如何保证元素唯一性的呢?
根据比较的返回值是否是0来决定
Map集合的遍历方式
- 根据键获取值
keySet()和get(Object key) - 根据键值对对象获取键和值
entrySet();
Entry这个接口下面的方法
getKey():获取键
getValue():获取值