首页 > 代码库 > Map集合概述和特点

Map集合概述和特点

  A:Map集合概述和特点(Set底层依赖的是Map)

  • 将键映射到值的对象
  • 一个映射不能包含重复的键
  • 每个键最多只能映射到一个值

B:Map接口和Collection接口的不同

  • Map是双列的(是双列集合的根接口),Collection是单列的(是单列集合的根接口)
  • Map的键唯一,Collection的子体系Set是唯一的
  • Map集合的数据结构值针对键有效,跟值无关;如:TreeMap:键是用二叉树算法,HashMap:键是hash算法, Collection集合的数据结构是针对元素有效

图解:

技术分享

 

Map集合的功能概述

   a:添加元素功能

  • V put(K key,V value):添加元素。
  • 如果键是第一次存储,就直接存储元素,返回null
  • 如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值

   b:删除元素功能

  • void clear():移除所有的键值对元素
  • V remove(Object key):根据键删除键值对元素,并把值返回

   c:判断功能

  • boolean containsKey(Object key):判断集合是否包含指定的键
  • boolean containsValue(Object value):判断集合是否包含指定的值
  • boolean isEmpty():判断集合是否为空

    d:获取元素功能

  • Set<Map.Entry<K,V>> entrySet():
  • V get(Object key):根据键获取值
  • Set<K> keySet():获取集合中所有键的集合
  • Collection<V> values():获取集合中 * int size():返回集合中的键值对的个数所有值的集合
package online.msym.map;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
public class Demo1_Map {    
    public static void main(String[] args) {
        //demo1();//添加数据
        //demo2();//删除数据,判断是否包含键或者值
        demo3();//获取map中的所有的值
    }
    private static void demo3() {
        Map<String, Integer> map = new HashMap<>();
        map.put("张三", 23);
        map.put("李四", 24);
        map.put("王五", 25);
        map.put("赵六", 26);
        
        Collection<Integer> c = map.values();
        System.out.println(c);
        System.out.println(map.size());
    }
    public static void demo2() {
        Map<String, Integer> map = new HashMap<>();
        map.put("张三", 23);
        map.put("李四", 24);
        map.put("王五", 25);
        map.put("赵六", 26);
        
        //Integer value = http://www.mamicode.com/map.remove("张三");                //根据键删除元素,返回键对应的值
        //System.out.println(value);
        System.out.println(map.containsKey("张三"));        //判断是否包含传入的键
        System.out.println(map.containsValue(100));        //判断是否包含传入的值
        System.out.println(map);
    }
    public static void demo1() {
        Map<String, Integer> map = new HashMap<>();
        Integer i1 = map.put("张三", 23);//存入的过程先判断有没有"张三",没有就添加,有就覆盖,返回的是被覆盖的部分
        Integer i2= map.put("李四", 24);
        Integer i3 = map.put("王五", 25);
        Integer i4 = map.put("赵六", 26);
        Integer i5 = map.put("张三", 26);                    //相同的键不存储,值覆盖,把被覆盖的值返回
        
        System.out.println(map);
        
        System.out.println(i1);
        System.out.println(i2);
        System.out.println(i3);
        System.out.println(i4);
        System.out.println(i5);
    }
}

Map集合的遍历之键找值

A:键找值思路:

  1. 获取所有键的集合
  2. 遍历键的集合,获取到每一个键
  3. 根据键找值

图解:

技术分享

package online.msym.map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Demo2_Iterator {
    /**
     * Map集合没有iterator方法,
     * 根据键获取值
     */
    public static void main(String[] args) {
        //demo1();//使用keySet方法,通过获取所有的键的集合,在遍历此集合,根据键再获取其对应的值
        demo2();
    }
    private static void demo1() {
        Map<String, Integer> map = new HashMap<>();
        map.put("张三", 23);
        map.put("李四", 24);
        map.put("王五", 25);
        map.put("赵六", 26);        
//        Integer i = map.get("张三");                    //根据键获取值
//        System.out.println(i);
        
        //获取所有的键
        Set<String> keySet = map.keySet();            //获取所有键的集合
        Iterator<String> it = keySet.iterator();    //获取迭代器
        while(it.hasNext()) {                        //判断集合中是否有元素
            String key = it.next();                    //获取每一个键
            Integer value = http://www.mamicode.com/map.get(key);            //根据键获取值
            System.out.println(key + "=" + value);
        }        
    }
    //使用增强for循环
    private static void demo2() {
        Map<String, Integer> map = new HashMap<>();
        map.put("张三", 23);
        map.put("李四", 24);
        map.put("王五", 25);
        map.put("赵六", 26);        
        //使用增强for循环遍历
        for(String key : map.keySet()) {            //map.keySet()是所有键的集合
            System.out.println(key + "=" + map.get(key));
        }
    }
}

Map集合的遍历之键值对对象找键和值

A:键值对对象找键和值思路:

  1. 获取所有键值对对象的集合
  2. 遍历键值对对象的集合,获取到每一个键值对对象
  3. 根据键值对对象找键和值

    技术分享

package online.msym.map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class Demo3_Iterator {
    /**
     * Map集合的第二种迭代,根据键值对对象,获取键和值
     *  A:键值对对象找键和值思路:
        获取所有键值对对象的集合
        遍历键值对对象的集合,获取到每一个键值对对象
        根据键值对对象找键和值
     */
    public static void main(String[] args) {
        //demo1();
        demo2();
    }
    public static void demo1() {
        Map<String, Integer> map = new HashMap<>();
        map.put("张三", 23);
        map.put("李四", 24);
        map.put("王五", 25);
        map.put("赵六", 26);
        
        //Map.Entry说明Entry是Map的内部接口,将键和值封装成了Entry对象,并存储在Set集合中
        Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
        //获取每一个对象
        Iterator<Map.Entry<String, Integer>> it = entrySet.iterator();
        while(it.hasNext()) {
            //获取每一个Entry对象
            Map.Entry<String, Integer> en = it.next();    //父类引用指向子类对象
            //Entry<String, Integer> en = it.next();    //直接获取的是子类对象
            String key = en.getKey();                    //根据键值对对象获取键
            Integer value = http://www.mamicode.com/en.getValue();                //根据键值对对象获取值
            System.out.println(key + "=" + value);
        }    
    }
    //使用增强for循环进行迭代
    public static void demo2() {
        Map<String, Integer> map = new HashMap<>();
        map.put("张三", 23);
        map.put("李四", 24);
        map.put("王五", 25);
        map.put("赵六", 26);    
        //使用增强for循环进行迭代
        for(Map.Entry<String, Integer> en : map.entrySet()) {
            System.out.println(en.getKey() + "=" + en.getValue());
        }    
    }
}

Map集合概述和特点