Collection 长度可以变化,存储的是对象类型。
功能:(add(),remove(),size(),contains(),iterator())
|--List 元素可以重复,有序。
功能:(get())
|--ArrayList
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
|--Vector
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
|--LinkedList
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
|--Set 元素不可以重复(唯一),无序。
|--HashSet 元素无序,唯一
底层数据结构是哈希表。
如何保证元素的唯一性呢?
它依赖于hashCode方法和equals方法。
首先判断hashCode方法的值是否相同:
相同:在根据equals方法进行判断
如果返回true,不添加进集合
如果返回false,就把元素添加到集合中
不同:那么,就把元素添加进集合
|--LinkedHashSet
底层数据结构是链表和哈希表。
用链表保证元素有序,用哈希表保证元素唯一。
|--TreeSet 元素按照自己的顺序(默认自然顺序),唯一
底层数据结构是二叉树。
如何保证元素的唯一性和排序呢?
第一种:让元素具备比较性
元素对象实现Comparable接口的compareTo方法
第二种:让集合具备比较性
实现Comparator接口的compare方法
如果元素也具备比较性,集合也具备比较性,那么到底谁起作用呢?
集合具备比较性起作用。
2:代码体现
常见的5个对象必须都要能够存储字符串和自定义对象并遍历。
遍历:
List:
Iterator iterator()
get()和size()
Set:
Iterator iterator()
3:什么时候使用哪种集合对象
你存储的元素要保证唯一吗?
要:Set
需要排序吗?
要:TreeSet
不要:HashSet
不知道用哪个,就用HashSet。
不要:List
需要保证线程安全吗?
需要:Vector
不需要:
多数操作时用于查询:用ArrayList
多数操作时用于增删:用LinkedList
不知道用哪个,就用ArrayList。 |