Collection体系:
|--List
元素有序(存入顺序和取出顺序一致),元素可以重复
|--ArrayList
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
|--Vector
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
|--LinkedList
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
|--Set
元素无序,元素要保证唯一
|--HashSet
底层数据结构是哈希表。
如何保证元素的唯一性呢?
它依赖两个方法:hashCode()和equals()
首先判断哈希值是否相同:
不同:就把元素添加到集合中。
相同:继续进入equals方法比较
返回true,说明元素重复,不存。
返回false,就把元素添加到集合中。
|--TreeSet
底层数据结构是二叉树。
可以让集合中的元素排序。
如何保证元素的唯一性的呢?
它是根据比较返回的值是0,说明元素是重复的,就不添加。
有两种实现方案:
A:让自定义对象具备比较性
实现Comparable接口
B:让集合具备比较性
实现Comparator接口
Map体系:(Map体系的数据结构对键有效,跟值无关)
|--HashMap
底层数据结构是哈希表。
如何保证键的唯一性呢?
依赖hashCode()和equals()方法
线程不安全,效率高。允许null键和值。
|--Hashtable
底层数据结构是哈希表。
如何保证键的唯一性呢?
依赖hashCode()和equals()方法
线程安全,效率低。不允许null键和值。
|--TreeMap
底层数据结构是二叉树。
如何保证键的唯一性呢?
两种方式:
自定义元素具备比较性
集合具备比较性
线程不安全,效率高。允许null值,不允许null键。
所以List, Set是否继承自Collection接口,而Map不是,Map又是另一个集合体系。 |