图解集合,一目了然!
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、线程不安全,效率高
(如果元素相同不操作,所以不会覆盖)