图解集合,一目了然!
Collection(单列集合) Map(双列集合) |--Collection(单列)
|--List(有序,可重复)
|--ArrayList
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
|--Vector
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
|--LinkedList
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
|--Set(可能无序,肯定唯一)
|--HashSet
底层数据结构是哈希表。
线程不安全,效率高。
怎么保证唯一性的呢?
它依赖两个方法:hashCode()和equals()
顺序:
首先判断hashCode()值是否相同。
同:继续走equals(),看返回值
如果true:就不添加到集合。
如果false:就添加到集合。
不同:就添加到集合。
|--TreeSet
底层数据结构是二叉树。
线程不安全,效率高。
怎么保证唯一性的呢?是根据返回是否是0。
怎么保证排序的呢?两种方式
自然排序(元素具备比较性)
实现Comparable接口
比较器排序(集合具备比较性)
实现Comparator接口|--Map(双列 底层结构是针对键有效,跟值无关)
|--HashMap
底层数据结构是哈希表。
线程不安全,效率高。允许null键和值
怎么保证唯一性的呢?
它依赖两个方法:hashCode()和equals()
顺序:
首先判断hashCode()值是否相同。
同:继续走equals(),看返回值
如果true:就不添加到集合。
如果false:就添加到集合。
不同:就添加到集合。
|--Hashtable
底层数据结构是哈希表。
线程安全,效率低。不允许null键和值
怎么保证唯一性的呢?
它依赖两个方法:hashCode()和equals()
顺序:
首先判断hashCode()值是否相同。
同:继续走equals(),看返回值
如果true:就不添加到集合。
如果false:就添加到集合。
不同:就添加到集合。
|--TreeMap
底层数据结构是二叉树。
线程不安全,效率高。
怎么保证唯一性的呢?是根据返回是否是0。
怎么保证排序的呢?两种方式
自然排序(元素具备比较性)
实现Comparable接口
比较器排序(集合具备比较性)
实现Comparator接口
Collection( 接口)单列集合 List( 接口)有序,不唯一 Set( 接口)可能无序,肯定唯一 Vector( 类) ArrayList( 类) LinkecList( 类) HashSet(类) TreeSet(类)1、底层数据结构是数组,查询快,增删慢 2、线程安全,效率低(只有Vector是线程安全的)1、底层数据结构是数组,查询快,增删慢 2、线程不安全,效率高1、底层数据结构是链表,增删快,查询慢 2、线程不安全,效率高1、底层数据结构是哈希表 2、通过重写hashCode() 和equals() 保证唯一性3、线程不安全,效率高(如果元素相同不操作,所以不会覆盖) 1、底层数据结构是二叉树2、通过判断compareTo或compare 方法的返回值是否为 0来判断是否重复3、排序有两种方案:实现Comparable接口重写 compareTo方法实现Comparator接口重写 compare方法4、线程不安全,效率高(如果元素相同不操作,所以不会覆盖)