集合框架(总结)
集合框架:
Collection(单列集合)
|------List(有序,可重复)
|------------ArrayList(数组,查询快,增删慢,不安全,效率高)
|------------Vector(数组,查询快,增删慢,安全,效率低)
|------------LinkedList(链表,查询慢,增删快,不安全,效率高)
|------Set(无序,且唯一)
|------------HashSet(哈希表,依赖hashCode()和equals())
执行顺序:首先判断hashCode()值是否相同
是:继续执行equals(),看其返回值是true,说明元素重复,不添加
false,就直接添加到集合。
否:就直接添加到集合。
自动生成hashCode()和equals()即可。
|-----------------------LinkedHashSet(链表和哈希表,链表保证有序,哈希表保证唯一)
|------------TreeSet(红黑树)
如何保证元素唯一性呢?
根据比较的返回值是否是0来决定。
如何保证元素的排序呢?
两种方式:
自然排序(元素具备比较性)让元素所属的类实现Comparable接口。
比较器排序(集合具备比较性)让集合接收一个Comparator实现类对象。
Map(双列集合)
1:Map集合的数据结构仅仅针对键有效,与值无关。
2:存储的是键值对形式的元素,键唯一,值可重复。
|------HashMap(哈希表,不安全,效率高) --> 同HashSet
|--------------LinkedHashMap --> 同LinkedHashSet
|------Hashtable(哈希表,安全,效率低) --> 同HashMap
|------TreeMap --> 同TreeSet
如何选择使用哪种集合?
看具体需求!
是否是键值对形式?
|--------是:Map
键是否需要排序?
|----------------是:TreeMap
|----------------否:HashMap
不知道,就选择HashMap。
|--------否:Collection
要安全吗?
|----------------是:Vector
|----------------否:ArrayList或LinkedList
增删多:LinkedList
查询多:ArrayList
不知道,就选择ArrayList
集合常见方法及遍历方式:
Collection:
- add()
- remove()
- contains()
- iterator()
- size()
遍历:
增强for
迭代器
|--List
get()
遍历:普通for
|--Set
Map:
- put()
- remove()
- containKey(),containsValue()
- keySet()
- get()
- value()
- entrySet()
- size()
遍历:
根据键找值
根据键值对对象分别找键和值
ArrList,LinkedList,HashSet,HashMap(掌握)
存储字符串和自定义对象数据并遍历。
集合的嵌套遍历(理解)