一,Map 集合
体系:
Map
--HashMap
--LinkedHashMap
--Hashtable
--TreeMap
1.特点:
Map 集合存储都是key-value键值对的形式,key不能重复
2.Map 和 Collection 不同
a. Map 存储的是键值对, Collection 存储的是单个元素
b. Map 的key唯一(和value无关),Set 集合存储元素唯一
3.Set 与 Map 的关系(了解)
HashSet 底层 使用的是 HashMap ,
HashSet 中存储的元素就是 相当于 HashMap 的key
//当利用HashSet的add(元素)时,相当于HashMap的put(元素,new Object())
底层哈希算法数据结构只与key有关
TreeSet 底层 使用的是 TreeMap ,
TreeSet 中存储的元素就是 相当于TreeMap 的key
//当利用TreeSet的add(元素)时,相当于HashMap的put(元素,new Object())
二叉树算法数据结构只与key有关
4.Map 集合功能
a:添加功能
V put(K key,V value): 添加元素,可添加 null
b:删除功能
void clear(): 移除所有的键值对元素
V remove(Object key): 根据键删除键值对元素,并把值返回
c:判断功能
boolean containsKey(Object key): 判断集合是否包含指定的键
boolean containsValue(Object value): 判断集合是否包含指定的值
boolean isEmpty(): 判断集合是否为空
d:获取功能
Set<Map.Entry<K,V>> entrySet(): 获取'键值对'封装到 Entry 对象
V get(Object key): 根据键获取值
Set<K> keySet(): 获取集合中所有键的集合
Collection<V> values(): 获取集合中所有值的集合
e:长度功能
int size(): 返回集合中的键值对的个数
5.Map集合两种遍历方式的思路是什么?
a.通过键遍历
1.获取keySet()并遍历
2.获取集合中每一个key值,然后调用get(key)方法获得对应的值
3.输出 key 和 value
b.通过'键值对'对象遍历
1.获取entrySet()并遍历
2.获取集合中每一个'键值对'Entry对象
3.调用 entry.getKey() 和 entry.getValue() 输出.
6.源码分析
在 HashMap 内部通过一个 Entry 内部类实现了 Map.Entry 接口
static class Entry<K,V> implements Map.Entry<K,V> {}
二,Map 集合的两个子类
1.LinkedHashMap 的概述和使用
特点: 同时拥有 Linked 和 HashMap 特点.
2.TreeMap
特点:
底层的二叉树数据结构只有key有关,存入 TreeMap 的时候会比较key
我们需要让key具有比较性(自然顺序)或者传一个比较器,完成比较
TreeSet 低层就是 TreeMap 实现的
3.HashMap 和 Hashtable 有什么区别?
a.Hashtable 是JDK1.0版本出现的,是线程安全的,效率低
HashMap 是JDK1.2版本出现的,是线程不安全的,效率高
b.Hashtable 不可以存储null键和null值
HashMap 可以存储null键和null值
三,Collections 类
1.方法
public static <T> void sort(List<T> list) //排序
public static <T> int binarySearch(List<?> list,T key) //2分查找
public static <T> T max(Collection<?> coll) //最值
public static void reverse(List<?> list) //反转
public static void shuffle(List<?> list) //乱序
2.泛型通配符
? extends E ? 要么是E类型要么是E的子类型
? super E ? 要么是E类型要么是E的父类型
|