一: Map集合的特点:
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
二: Map集合和Collection集合的区别?
Map集合存储元素是成对出现的,Map集合的键是唯一的,值是可重复的。可以把这个理解为:夫妻对
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
二: Map集合和Collection集合的区别?
Map集合存储元素是成对出现的,Map集合的键是唯一的,值是可重复的。可以把这个理解为:夫妻对
Collection集合存储元素是单独出现的,Collection的儿子Set是唯一的,List是可重复的。可以把这个理解为:光棍(11.11)
Map集合的数据结构值针对键有效,跟值无关
Collection集合的数据结构是针对元素有效
Map集合功能:添加 删除 获取 判断 长度 遍历 代码如下:
package Map; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Set; /*** * * * Map集合的功能概述: * 1:添加功能 * V put(K key,V value):添加元素。这个其实还有另一个功能?先不告诉你,等会讲 * 如果键是第一次存储,就直接存储元素,返回null * 如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值 * 2:删除功能 * void clear():移除所有的键值对元素 * V remove(Object key):根据键删除键值对元素,并把值返回 * 3:判断功能 * boolean containsKey(Object key):判断集合是否包含指定的键 * boolean containsValue(Object value):判断集合是否包含指定的值 * boolean isEmpty():判断集合是否为空 * 4:获取功能 * Set<Map.Entry<K,V>> entrySet()返回的是键值对对象的集合 * V get(Object key):根据键获取值 * Set<K> keySet():获取集合中所有键的集合 * Collection<V> values():获取集合中所有值的集合 * 5:长度功能 * int size():返回集合中的键值对的对数 * * */ public class MapDemo { public static void main(String[] args) { Map<String,String> map = new HashMap<String,String>(); //添加功能 // 如果键是第一次存储,就直接存储元素,返回null 如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值 // System.out.println(map.put("文章", "马伊琍")); // System.out.println(map.put("文章", "姚笛")); map.put("周杰伦", "昆凌"); map.put("刘恺威", "杨幂"); map.put("文章", "马伊琍"); map.put("黄晓明", "杨颖"); //删除功能 // map.clear(); // System.out.println("删除"+map.remove("黄晓明")); // System.out.println("删除"+map.remove("黄晓波")); //判断功能 // System.out.println("判断"+map.containsKey("黄晓明")); // System.out.println("判断"+map.containsKey("黄小波")); // System.out.println(map.isEmpty()); //长度功能 // System.out.println(map.size()); //获取功能 // System.out.println(map.get("周杰伦")); // System.out.println(map.get("周杰")); // System.out.println("-------------------------"); // Set<K> keySet():获取集合中所有键的集合 /* Set<String> set = map.keySet(); for(String s:set){ System.out.println(s); } System.out.println("-------------------------");*/ /* Collection<V> values():获取集合中所有值的集合*/ // Collection<String> son = map.values(); // for (String s:son) { // System.out.println(s); // // } /*Map集合的遍历 夫妻对 *思路: * A 把所有的丈夫集中起来/获取所有的键 * B 遍历丈夫的集合,获取每一个丈夫/遍历键的集合,获取每一个键 * C 让丈夫找自己的妻子/根据键去找值*/ // Set<Map.Entry<K,V>> entrySet():??? //遍历 方式一 //获取所有的键 Set<String> set = map.keySet(); //遍历键的集合,获取每一个键 for(String key:set){ //根据键去找值 String value = map.get(key); System.out.println(key+"------"+value); } //遍历方式二 /*Map-- 夫妻对 *思路: * A 获取所有结婚证的集合/获取所有键值对的集合 * B 遍历结婚证的集合,得到每一个结婚证/遍历键值对对象的集合,得到每一个键值对对象 * C 根据结婚证获取丈夫和妻子/根据键值对对象获取键和值 */ //获取每一个键值对对象,Entry为实体 //获取所有键值对的集合 Set<Map.Entry<String,String>> set2 = map.entrySet(); //遍历键值对对象的集合,得到每一个键值对对象 for(Map.Entry<String,String> me:set2){ //根据键值对对象获取键和值 String key = me.getKey(); String value = me.getValue(); System.out.println(key+"-----"+value); } } }
遍历的两种方式:
第一:根据键找值
获取所有键的集合
遍历键的集合,获取到每一个键
根据键找值
第二:
根据键值对对象找键和值
获取所有键值对对象的集合
遍历键值对对象的集合,获取到每一个键值对对象
根据键值对对象找键和值
LinkedHashMap 类中由哈希表保证键唯一,链表是有序的(有序 唯一)
面试题:1 HashMap和Hashtable的区别?
Hashtable:线程安全,效率低,不允许null键和null值
HashMap:线程不安全,效率高,允许null键和null值
2 Collection 和 Collections的区别?
Collection :是单列集合的顶层接口,有子接口List和Set
Collections:是针对集合操作的工具类,有对集合进行排序和二分查找的方法