A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

Map体系
Map集合特点:
1. 是双列集合, 一个元素包含两个值 (键key, 值value) 键值对
2. key和value的类型可以相同, 也可以不同
3. key不允许重复, value可以重复
4. key和value是一一对应的, 一个键只能对应一个值
Map集合适合存储"一对一关系"的数据(夫妻)
Map常用子类
java.util.Map<K, V>接口: 双列集合的根接口, 规定了共性的方法
|
|_ HashMap<K, V>类: 底层哈希表. key存取无序不可重复
|_ LinkedHashMap<K, V>类: 底层哈希表+链表. key存取有序不可重复
映射: 键和值的对应关系 mapping
HashSet底层使用的就是HashMap
LinkedHashSet底层使用的就是LinkedHashMap
Map中常用方法(map增删改查通过key修改增删value)
// 成员方法
V put(K key, V value): 添加/修改 键值对.
如果键存在, 则用新值替换已有值, 返回被替换的值; 如果键不存在, 添加键值对, 返回null
V remove(Object key): 根据键删除键值对, 返回被删除元素的值
如果键不存在, 返回null
V get(Object key): 根据键获取值.
如果键不存在, 则返回null
boolean containsKey(Object key): 判断是否包含指定的键
Set<K> keySet(): 获取Map集合中所有的键, 存储到Set集合中
Set<Map.Entry<K,V>> entrySet(): 获取到Map集合中所有的Entry对象的集合(Set集合),并且需要调用子方法:entry.getKey和entry.getValue方法,获取key和value 的值
Map遍历方式一: keySet()方法实现通过键找值
第一种方法(需要对键进行判断的情形下用更好)
Set<K> keySet(): 获取Map集合中所有的键, 存储到Set集合中
keySet()遍历步骤:(快捷键:map.keySet.for)
1. Map对象调用 keySet() 方法, 获取包含所有key的Set集合
2. 遍历Set集合, 获取每个key
3. 通过Map对象调用 get(Object key) 方法根据key获取到value
Map<String, String> map = new HashMap<>();
// keySet()遍历
Set<String> keys = map.keySet();
for (String key : keys) {
// 通过每个键获取值
String value = map.get(key);
// 打印当前键值对
System.out.println(key + "=" + value);
}
Entry键值对对象介绍
(Set<Map.Entry<K,V>> entrySet(): 获取到Map集合中所有的键值对对象的集合(Set集合))
// 常用成员方法
K getKey(): 获取Entry对象中的键
V getValue(): 获取Entry对象中的值
Entry对象就是一个节点, 节点中存储了key和value
拿到一个Entry对象就可以从中获取key和value
Map遍历方式2: 通过entrySet()获取Entry对象形式遍历
Set<Map.Entry<K,V>> entrySet(): 获取到Map集合中所有的键值对对象的集合(Set集合)
entrySet()方法遍历Map步骤:(快捷键:map.entrySet.for)
1. Map对象调用 entrySet() 获取包含所有Entry对象的Set集合
2. 遍历Set集合, 获取每个Entry对象
3. 调用Entry对象的 getKey() 和 getValue() 方法获取键和值
HashMap存储自定义数据类型作为键
HashMap存储自定义JavaBean对象作为key保证key唯一不重复, 在key的泛型是自定义的时候需要JavaBean重写 hashCode() 和equals() 方法,在value的泛型是自定义的时候不需要重写hashCode() 和equals() 方法.
LinkedHashMap类
LinkedHashMap底层: 哈希表 + 链表
key不允许重复, 但key存取有序

Hashtable类
Hashtable和HashMap:
相同点:
1. 底层都是哈希表
不同点:
1. Hashtable不允许存储 null 值和 null 键; HashMap允许存储 null 值和 null 键
2. Hashtable线程安全效率低; HashMap线程不安全效率高
Hashtable目前很少使用.但其子类 Properties 集合, 可以与IO流结合使用, 应用较多
JDK9对集合添加的优化
java.util.List接口:
// 静态方法
static List<E> of(E... e): 返回包含指定元素的 不可变List 集合
java.util.Set接口:
// 静态方法
static Set<E> of(E... e): 返回包含指定元素的 不可变Set 集合
java.util.Map接口:
// 静态方法
static Map<K, V> of(K k1, V v1, ...): 返回包含指定键值对的 不可变Map 集合
注意事项:
1. of() 方法只适用于List接口, Set接口, Map接口, 不适用于接口的实现类
2. of() 方法的返回值是一个不可变的集合, 集合不能再使用 add(), put() 方法添加元素, 会抛出异常
3. Set接口和Map接口在调用 of() 方法的时候, 不能有重复的元素, 否则会抛出异常
Debug调试模式介绍
使用方式:
在行号的右边,鼠标左键单击,添加断点(每个方法的第一行,哪里有bug添加到哪里)
右键,选择Debug执行程序
程序就会停留在添加的第一个断点处
执行程序快捷键:
  f8:逐行执行程序
  f7:进入到方法中
  shift+f8:跳出方法
  f9:跳到下一个断点,如果没有下一个断点,那么就结束程序
  ctrl+f2:退出debug模式,停止程序
  Console:切换到控制台

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马