.用|--方式把整个集合框架的共性和区别总结下,哪些是按顺序输出的,哪些不是按顺序的,
哪些可以有重复哪些没有重复元素,还有其的数据结构,查询快慢,增删快慢,线程安全,效率高低,
Collection
|--List 元素可以重复,有序
|--ArrayList
底层数据结构是数组,查询快,增删慢
线程不安全,效率高。
|--Vector
底层数据结构是数组,查询快,增删慢
线程安全,效率低。
|--LinkedList
底层数据结构是链表,查询慢,增删快
线程不安全,效率高。
|--Set 元素唯一,无序
|--HashSet
底层数据结构是哈希表。
如果保证元素唯一性的呢?
它依赖于两个方法:hashCode和equals。
首先,判断哈希值是否相同,如果不同,就直接添加到集合中。
如果相同,在进入equals方法判断,
如果返回值是false,就添加进集合。
如果返回值是true,说明是重复元素,不添加到集合中。
|--TreeSet
底层数据结构是二叉树。
如果保证元素唯一性的呢?
根据Comparable接口的compareTo方法或者Comparator接口的compare方法的返回值是否为0,
来确定是否是重复元素。如果是0,就不添加元素。
排序:
让元素本身具备比较性:Comparable -- compareTo
让集合具备比较性:Comparator -- compare
如果你使用的集合要保证元素唯一:Set
你想排序吗?
不想:HashSet
想:TreeSet
不懂:HashSet
如果你使用的集合不用保证元素唯一:List
你是用于查询吗?ArrayList
你是用经常改变吗?LinkedList
有多线程安全问题吗?Vector
我真的不懂:ArrayList
小技巧:
Array:说明底层数据结构是数组,查询快,增删慢
Link:说明底层数据结构是链表,查询慢,增删快
Hash:说明底层数据结构是哈希表,保证元素唯一,要依赖hashCode和equals。
Tree:说明底层数据结构是二叉树,有两种方案保证唯一和排序:
A:Comparable -- compareTo
B:Comparator -- compare
Map 键唯一,双列的集合
|--HashMap
数据结构是哈希表,保证键唯一
键和值可以为null
线程不安全的
|--LinkedHashMap
保证键唯一,有序
|--Hashtable
数据结构是哈希表,保证键唯一
键和值不可以为null
线程安全的
|--Properties
可以和IO结合的集合对象
|--TreeMap
数据结构是二叉树,保证键唯一,还可以排序
线程不安全的 |
|