传智播客java基础班冯佳老师整理,还会持续更新,请关注冯佳老师的微博fengjia_2553868@qq.com
一.集合的分类
-
Collection 一次存一个对象, 单列集合
-
List 可重复, 有索引,存取有序
- ArrayList 数组实现, 查找快
- LinkedList 链表实现, 增删快
- Vector 数组实现, 线程安全
-
Set 不可重复, 没索引,存取无序
-
HashSet 使用哈希算法去重复, 效率高, 但元素无序
- LinkedHashSet HashSet的子类, 原理相同, 除了去重复之外还能保留存储顺序
- TreeSet 使用二叉树算法排序, 可以指定元素的存储顺序
Map 一次存两个对象, 键值对
* HashMap 使用哈希算法对键去重复, 效率高, 但无序
* LinkedHashMap 使用哈希算法去重复, 并且保留存储顺序
* TreeMap 使用二叉树算法排序, 可以自定义顺序
* Hashtable 类似HashMap, 线程安全, 效率略低, 不允许null键和null值
二.Map集合
-
1.Map集合的特点
- Map集合一次存储两个对象, 一个键对象, 一个值对象
- 键对象在集合中是唯一的, 可以通过键来查找值
-
2.Map常用方法
- put() 存储一条记录, 一个键和一个值
- get() 根据键对象获取值
- containsKey() 判断是否包含指定的键
- containsValue() 判断是否包含指定的值
- remove(key) 根据键删除一条记录
- size() Map集合中的记录数
- values() 得到所有的值对象组成的一个Collection集合
-
3.迭代Map集合
-
a.keySet()
- 先调用keySet()方法从Map集合中获取所有Key组成的一个Set集合
- 迭代Set集合可以得到每一个Key
- 然后再调用get()方法通过Key获取每一个Value
-
b.entrySet()
- 先调用entrySet()方法从Map集合中获取所有Entry(键值对)组成的一个Set集合
- 迭代Set集合可以得到每一个Entry
- 然后再调用getKey()和getValue()方法得到每一个Key和每一个Value
-
4.HashMap
- 在使用HashMap存储键值对的时候, 先调用Key对象的hashCode()方法计算一个哈希值, 在Map中查找是否有相同哈希值的Key对象
- 如果没有哈希值相同的Key对象, 这个键值对直接存入
- 如果有哈希值相同的Key对象, 那么就进行equals比较
- 比较结果为false就存入, true则覆盖原Value
-
5.LinkedHashMap
- HashMap的子类, 算法相同, 但保留了存储的顺序
-
6.TreeMap
- 在使用TreeMap存储键值对的时候, 会使用Key对象和集合中已存储的Key对象进行比较, 确定二叉树上的位置
- 比较的方式和TreeSet指定的方式相同, Comparable和Comparator
-
7.Hashtable
- 类似HashMap, 线程安全, 效率略低, 不允许null键和null值
三.集合的迭代
-
1.Collection
- Iteraotr: 通过iterator()方法得到迭代器, 调用hasNext()和next()方法进行迭代
- ForEach: for (类型 变量名 : 容器) { 循环体 }
-
2.Map
- keySet(): 得到所有的键组成的Set, 遍历Set得到每一个键, 然后再分别获取值
- entrySet(): 得到所有的Entry组成的Set, 遍历Set得到每一个Entry, 再分别getKey()和getValue()
-
3.List
- Iterator
- ForEach
- for: 根据索引定义for循环, 调用get()方法根据索引获取每一个元素
-
4.Vector
- Iterator
- ForEach
- for
- Enumeration: 类似Iterator, 通过elements()方法得到Enumeration, 调用hasMoreElements()和nextElement()方法进行迭代
四.重点(必须会的)
- 1.了解ArrayList, LinkedList, HashSet, TreeSet, HashMap, TreeMap的特点
- 2.会迭代ArrayList, LinkedList, HashSet, TreeSet, HashMap, TreeMap
- 3.会用哈希算法(hashCode,equals), 会用二叉树算法(Comparable,Comparator)