存储特点
-
以键值对的形式存储, 一个元素由两个值组成
-
键(K-key): 无序, 无下标, 元素不可重复
-
值(V-value): 无序, 无下标, 元素可以重复
常用实现类
-
HashMap
-
JDK1.2 底层哈希表实现 线程不安全, 效率高
-
-
LinkedHashMap
-
JDK1.2 是HashMap的子类, 底层哈希表实现 线程不安全, 效率高
-
-
TreeMap
-
JDK1.2 是SortedMap的实现类, 底层红黑树实现 线程不安全,效率高
-
-
Hashtable
-
JDK1.0 底层哈希表实现 线程安全,效率低
-
-
Properties
-
JDK1.0 是Hashtable的子类, 底层哈希表实现 线程安全, 效率低
-
创建
-
建议使用多态
Map<键的泛型,值的泛型> 集合名=new 实现类名<>();
常用方法
-
集合名.方法名(实参列表)
-
旧V put(K, V): 向集合添加一个键值对
-
如果键已经存在, 则进行值的覆盖
-
-
V get(K): 根据键获取对应的值 , 键不存在, 则返回null
-
boolean containsKey(K): 判断集合是否存在指定键
-
boolean containsValue(V): 判断集合是否存在指定值
-
int size(): 获取集合键值对的个数
-
V remove(K): 根据键删除整个键值对
遍历
-
键遍历
-
思路: 先获取集合所有的键, 遍历键根据键获取值
-
Set<K的泛型> keySet(): 获取所有的键存入Set集合返回
//创建Map集合, 存储用户信息Map<String, String> map = new HashMap<>();map.put("username", "zhangsan");map.put("username", "lisi");map.put("tel", "15512347896");map.put("pwd", "15533333333");map.put("address", "郑州"); //键遍历//1. 获取所有的键Set<String> set1 = map.keySet();//2. 遍历所有的键for (String k : set1) {//3. 根据键获取对应的值System.out.println(k+" -> "+map.get(k));}
-
-
值遍历
-
思路: 获取所有的值进行遍历
-
Collection<V的泛型> values(): 获取所有的值存入Collection集合返回
//1. 获取所有的值Collection<String> coll = map.values();//2. 遍历值coll.forEach(v-> System.out.println(v));
-
-
键值对遍历
-
思路: 直接获取所有的键值对-> 将键值对存入一个键值对对象, 以对象集合的形式返回, 再遍历所有的键值对对象, 获取键与值
-
Entry接口: 存储一个键值对的接口, 是Map的内部接口, 表现形式为
Map.Entry<键的泛型, 值的泛型>
-
Entry对象.方法名()
: -
K getKey(): 获取entry对象存储的键
-
V getValue(): 获取entry对象存储的值
-
-
Set<Entry类型> entrySet(): 将键值对存入Entry对象, 并将所有的Entry对象存入Set集合返回
//1. 获取所有的键值对对象Set<Map.Entry<String, String>> set2 = map.entrySet();//2. 遍历键值对对象集合, 获取键和值//外遍历for (Map.Entry<String, String> entry : set2) {//3. 从entry对象中获取键和值System.out.println(entry.getKey()+" -> "+entry.getValue());}//自遍历set2.forEach(entry->System.out.println(entry.getKey()+" -> "+entry.getValue()));
-
-
自遍历forEach
-
思路: 将集合元素传入
BiConsumer
的方法作为实参, 执行方法操作元素 -
集合名.forEach(BiComsumer实现类对象)
-
JDK8.0
System.out.println("\n自遍历-匿名内部类:");map.forEach(new BiConsumer<String, String>() {@Overridepublic void accept(String k, String v) {System.out.println(k+" -> "+v);}});System.out.println("\n自遍历-lambda:");map.forEach((k,v)-> System.out.println(k+" -> "+v));
-
使用
-
底层哈希表实现的几个实现类: 当键为自定义类型时, 必须重写其hashCode()和equals()才能保证键的去重
-
LinkedHashMap可以保证元素存入和取出的顺序一致
-
TreeMap可以根据键进行默认的升序排序
-
当键为自定义类型时, 必须自定义排序规则, 两种方式与TreeSet一致
-
当返回值为0时去重
-
-
Hashtable无法存储null值
-
HashMap可以存储null值, 键至多存在一个null, 值可以存在多个null
-
-
Properties只能存储String类型的数据
-
不推荐使用多态
-
不能添加泛型
-
常用方法:
-
setProperty(k,v): 添加键值对的方法, 与Map中的
put()
一致 -
V getProperty(K): 根据键获取值, 与Map中的
get(K)
一致 -
load(输入流对象): 通过指定IO流将配置文件中的内容加载到集合中
-
-
今日掌握
-
Map的存储特点
-
常用实现类和特点
-
创建语法
-
遍历方式
-
各个实现类的使用特点