双列集合是每个元素都有键与值两部分组成的集合,记录的是键值对对应关系。即通过键可以找到值。
Map集合概述
Map接口概述:双列集合 每次存储元素都要存储两个元素,元素由键和值组成 一个键,一个值,称为键值对。 键必须是唯一,值可以重复 Map接口常用实现类 * HashMap * LinkedHashMap * Hashtable(了解)
Map集合的特点:
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
Map 基本使用
A:Map(HashMap)的使用:创建对象时加入两个泛型。
Map<k,v>key - 此映射所维护的键的类型value - 映射值的类型
Map集合的功能概述:
1:添加功能
- V put(K key,V value):添加元素。 - 如果键是第一次存储,就直接存储元素,返回null - 如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
2:删除功能
- void clear():移除所有的键值对元素 - V remove(Object key); - 根据键删除键值对,返回键对应的值。 - 如果键不存在,则返回null
3:判断功能
- boolean containsKey(Object key):判断集合是否包含指定的键 - boolean containsValue(Object value):判断集合是否包含指定的值 - boolean isEmpty():判断集合是否为空
4:获取功能
Set<Map.Entry<K,V>> entrySet() 返回此映射中包含的映射关系的 Set 视图。 Map.Entry 是一个嵌套类 Entry 中的方法如下: * K getKey() 获取键 * V getValue() 获取值
- V get(Object key):根据键获取值 - Set<K> keySet():获取集合中所有键的集合 - Collection<V> values():获取集合中所有值的集合
5:长度功能
int size():返回集合中的键值对的对数
// 创建集合对象 Map<String, String> map = new HashMap<String, String>(); // 向集合中添加元素 map.put("1", "a"); map.put("2", "b"); map.put("3", "c"); map.put("4", "d"); // 返回所有键的集合 Set<String> keySet = map.keySet(); System.out.println(keySet); // 返回所有值得集合 Collection<String> values = map.values(); System.out.println(values); System.out.println("=========================="); //根据键删除键值对元素,并把值返回 System.out.println("map.remove(\"2\"):"+map.remove("2")); System.out.println("map.remove(\"1\", \"b\"):"+map.remove("1", "b")); System.out.println("map.remove(\"1\", \"a\"):"+map.remove("1", "a")); //判断集合是否包含指定的键 System.out.println("map.containsKey(\"3\"):"+map.containsKey("3")); //判断集合是否包含指定的值 System.out.println("map.containsValue(\"d\"):"+map.containsValue("d")); // 返回所有键的集合 keySet = map.keySet(); System.out.println(keySet); // 返回所有值得集合 values = map.values(); System.out.println(values); System.out.println("=========================="); //根据键获取值 System.out.println("map.get(\"3\"):"+map.get("3")); //返回集合中的键值对的对数 System.out.println("map..size():"+map.size()); //移除所有的键值对元素 map.clear(); //判断集合是否为空 System.out.println("map.isEmpty():"+map.isEmpty());
Map 集合遍历⽅式 1
第 1 种遍历方式是,使用 Map 集合的 keySet()方法A:思路:
通过 keySet()方法获取所有键的集合
遍历键的集合,获取到每一个键
根据键找值
//创建集合对象 Map<String, String> map = new HashMap<String, String>(); //向集合中添加元素 map.put("1", "a"); map.put("2", "b"); map.put("3", "c"); map.put("4", "d"); //返回所有键的集合 Set<String> keySet = map.keySet(); System.out.println(keySet); //返回所有值得集合 Collection<String> values = map.values(); System.out.println(values); System.out.println("=========================="); //map 集合的常用遍历 Set<String> keySet2 = map.keySet(); //迭代所有键的 Set 集合,依次获取每一个键 Iterator<String> iterator = keySet2.iterator(); while(iterator.hasNext()) { String thisKey = iterator.next(); //通过键找值,记住这里使用 map 集合通过键找值 String thisValue = map.get(thisKey); System.out.println(thisKey+"="+thisValue); }
Map 集合遍历⽅式 2
第 2 种遍历方式是,使用 Map 集合的 entrySet()方法A:思路:
通过 entrySet()方法获取所有键值对对象的集合
遍历键值对对象的集合,获取到每一个键值对对象
根据键值对对象找键和值
B: entrySet()方法解释
Set<Map.Entry<K,V>> entrySet() 方法用于返回某个集合所有的键值对对象。
Map.Entry 说明 Entry 是 Map 的内部接口,将键和值封装成了 Entry 对象,并存储在 Set 集合中。可以从一个 Entry对象中获取一个键值对的键与值。
C: Entry 中的方法如下:
K getKey() 获取键
V getValue() 获取值
public static void main(String[] args) { //创建集合对象 HashMap<String, String> map = new HashMap<String, String>(); //向集合中添加元素 map.put("001", "rose"); map.put("002", "jeck"); map.put("003", "lucy"); //获取集合中所有的键值对对象的 Set 集合 Set<Entry<String,String>> entrySet = map.entrySet(); //迭代集合,依次获取每一个键值对对象 for(Entry<String,String> thisEntry: entrySet) { //通过键值对对象获取键 String key = thisEntry.getKey(); //通过键值对对象获取值 String value = thisEntry.getValue(); System.out.println(key+":"+value); } }
Map集合和Collection集合的区别?
Map集合存储元素是成对出现的,Map集合的键是唯一的,值是可重复的。可以把这个理解为:夫妻对
Collection集合存储元素是单独出现的,Collection的儿子Set是唯一的,List是可重复的。
注意:
Map集合的数据结构只针对键有效,跟值无关 。
Collection集合的数据结构是针对元素有效
Map集合存储自定义对象
- 如果自定义对象作为键,需要实现去重效果, - 则需要自定义对象需要重写hashCode和equals方法
LinkedHashMap
Linked 链表结构,保证存取顺序一致。
Hash 结构保证元素唯一
以上约束对键起作用
public static void main(String[] args) { //创建集合对象 LinkedHashMap<String, String> map = new LinkedHashMap<String, String>(); //向集合中添加元素 map.put("001", "Rose"); map.put("002", "lucy"); map.put("003", "Lily"); map.put("002", "Lily"); map.put("001", "Lily"); //观察集合元素 System.out.println(map); //遍历集合 //获取所有键的集合 Set<String> keys = map.keySet(); //迭代所有键的集合 for(String thisKey: keys) { //通过键找值 String thisValue = map.get(thisKey); //打印信息 System.out.println(thisKey+":"+thisValue); } }