Map 集合概述和使用
双列集合一次存两个元素
Interface Map<K,V> K: 键的数据类型 ;V:值得数据类型
键不能重复,值可以重复
键和值是一一对应的,每一个键只能找到自己对应的值
键+值 这个整体我们称之为键值对 或者键值对对象,在JAVA中叫做Entry对象
创建Map的集合对象,要使用多态
具体的实现类我们使用HashMap
Map<String,String> map = new HashMap<>();
map.put("001","libai");
map.put("002","lihei")
添加元素时 我们使用put方法而不是add
Map集合的基本功能
V put(K key,V value) | 添加元素 |
V remove(Object key) | 根据键删除键值对元素 |
void clear() | 移除所有的键值对元素 |
boolean containsKey(Object key) | 判断集合是否包含指定的键 |
boolean containsValue(Object value) | 判断集合是否包含指定的值 |
boolean isEmpty() | 判断集合是否为空 |
int size() | 集合的长度,也就是集合中键值对的个数 |
put 方法中 如果键已经存在了,那么会替换原来的值 并且将原来的值返回
Map 集合遍历
V get(Object key) | 根据键获取值 |
Set<K> keySet() | 获取所有键的集合 |
第一种遍历方式,先找到所有Key的集合 再遍历
public static void main(String[] args) { Map<String,String> map =new HashMap<>(); map.put("1号丈夫","1号老婆"); map.put("2号丈夫","2号老婆"); map.put("3号丈夫","3号老婆"); map.put("4号丈夫","4号老婆"); Set<String> keys = map.keySet(); // 获取所有键的集合 for (String key : keys) { //遍历键的集合,每个键都对应一个值 成功遍历出Map集合 String value = map.get(key); System.out.println(key+"-------"+value); } }
第二种遍历方式,先获取所有的entry(键值对)对象
Set<Map.Entry<K,V>> entrySet() | 获取所有键值对对象的集合 |
K getKey() | 获得键 |
V getValue() | 获得值 |
public static void main(String[] args) { Map<String,String> map =new HashMap<>(); map.put("1号丈夫","1号老婆"); map.put("2号丈夫","2号老婆"); map.put("3号丈夫","3号老婆"); map.put("4号丈夫","4号老婆"); Set<Map.Entry<String, String>> entries = map.entrySet(); for (Map.Entry<String, String> entry : entries) { String key = entry.getKey(); String value= entry.getValue(); System.out.println(key+"------"+value); } }
第三种遍历方法
用Map类自带的forEach方法循环遍历所有的键和值 ;括号内用Lambda 表达式,重写怎么处理得到的键和值
map.forEach((Student key,String value)->{ System.out.println(key+"-----"+value); });
HashMap 小结
HashMap底层是哈希表结构的
依赖hashCode方法和equals方法保证键的唯一
如果键要存储的是自定义对象,需要重写hashCode和equals方法
TreeMap
是Map里的一个实现类
没有额外需要学习的特有方法,直接用Map的就可以了
TreeMap 底层跟TreeSet一样是红黑树结构的
TreeMap底层是红黑树结构的
依赖自然排序或者比较器排序,对键进行排序
如果键存储的是自定义对象,需要实现Comparable接口或者在创建TreeMap对象时候给出比较器排序规则