集合框架(Map集合)
Map接口概述:
* 将键映射到值的对象
* 一个映射不能包含重复的键
* 每个键最多只能映射到一个值
Map接口和Collection接口的不同:
* Map是双列的,Collection是单列的。
* Map的键唯一,Collection的子体系Set是唯一的。
* Map集合的数据结构值针对键有效跟值无关;Collection集合的数据结构是针对元素有效。
集合框架(Map集合的功能概述)
添加功能:
* put (K key ,Vvalue) :添加元素
* 如果键是第一次存储,就直接存储元素,返回null
* 如果键不是第一次,就用值把以前的值替换掉,返回以前的值。
删除功能:
* void clear( ) :移除所有的键值对元素。
* remove( ) :根据键删除键值对元素,并把值返回。
判断功能:
* Boolean containsKey(Object key) :判断集合是否包含传入的键
* Boolean containsValue(Object key) :判断集合是否包含传入的值
* Boolean isEmpty( ):判断集合是否为空。
获取功能:
* Set< Map.Entry<K , V> > entrySet( ): 键值对对象集合
* get (Object key) : 根据键获取值
* Set <K> keySet( ):获取集合中所有值的集合
* Collection<v> values():获取集合中所有值的集合。
长度功能:
* int size( ):返货集合中键值对的个数
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); Integer l1 = map.put("张三", 14); Integer l2 = map.put("李四", 15); Integer l3 = map.put("王五", 16); Collection<Integer> c=map.values(); //values():获取集合中所有值的集合。 // Integer l4 = map.put("张三", 18); //put()方法: 相同的键不存储,值覆盖,把覆盖的值返回 // Integer l5=map.remove("张三"); //remove()方法: 根据键删除元素 ,返回键对应的值 System.out.println(map.containsKey("张三")); //类.containsKey():判断集合是否包含传入的键 System.out.println(map.containsValue(16)); //类.containsValue():判断集合是否包含传入的值 System.out.println(c.size()); //size():返回集合中键值对的个数。 System.out.println(c); }
集合框架(Map集合的遍历)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
第一种遍历(keySet()): public static void main(String[] args) { Map<String, Integer> map=new HashMap<>(); map.put("张三", 14); map.put("李四", 15); map.put("王五", 16); // Integer i=map.get("张三"); //根据键获取值 //获取所有的键 for (String string : map.keySet()) { //keySet():获取集合中所有值的集合 System.out.println(string+"...."+map.get(string)); } } 第二种遍历(entrySet()): public static void main(String[] args) { Map<String, Integer> map=new HashMap<>(); map.put("张三", 14); map.put("李四", 15); map.put("王五", 16); // Map.Entry说明Entry是Map的内部接口,将键和值封装成Entryd对象,并存储在Set集合中。 for (Map.Entry<String, Integer> en : map.entrySet() ) { //en是键值对对象 System.out.println(en.getKey()+"..."+en.getValue() ); //通过键值对对象拿到键和值 } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public static void main(String[] args) { // TODO 自动生成的方法存根 HashMap<Student, String> hm= new HashMap<>(); hm.put(new Student("张三", 18),"北京"); hm.put(new Student("李四", 20),"上海"); hm.put(new Student("王五", 22),"广州"); for (Student string : hm.keySet()) { System.out.println("姓名:"+string.getName() +" "+"年龄:"+string.getAge()+" "+"地址:"+hm.get(string)); } System.out.println(hm); }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public static void main(String[] args) { TreeMap<Student, String> tree = new TreeMap<>(); tree.put(new Student("张三", 18), "北京"); tree.put(new Student("李四", 20), "上海"); tree.put(new Student("王五", 2), "广州"); for (Student string : tree.keySet()) { System.out.println( "姓名:" + string.getName() + " " + "年龄:" + string.getAge() + " " + "地址:" + tree.get(string)); } System.out.println(tree); }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public static void main(String[] args) { //统计字符串中每个字符出现次数 String s = "aaaacccvvvvv"; char[] arr = s.toCharArray(); HashMap<Character, Integer> hs = new HashMap<>(); //遍历字符数组,将字符添加到双列集合中 for (char c : arr) { //如果不包含这个键 hs.put(c, !hs.containsKey(c) ? 1 : hs.get(c) + 1); } for (Character key :hs.keySet()) { System.out.println(key+"="+hs.get(key)); } }