Java 之 Map 集合

一、Map 接口概述

  java.util.Map 接口专门用来存放键值对这种对象关系的对象。

  下面比较一下 Collection 与 Map 的区别:

    •  Collection 中的集合,元素是孤立存在的(理解是为单身),向集合存储元素采用一个个元素的方式存储。
    •     Map 中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找到所对应的值。
    •     Collection 中的集合称为 单列集合,Map 中的集合称为双列集合。
    •     注意:Map 中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。 

    Map 集合的特点

    1. Map 集合是一个双列集合,一个元素包含两个值(一个 key,一个 value)

    2. Map 集合中的元素,key 和 value 的数据类型可以相同,也可以不同

    3. Map 集合中的元素,key 是不允许重复的,value 是可以重复的

    4. Map 集合中的元素,key 和 value 是 一一对应

    注意Map接口中的集合都有两个泛型变量,在使用时,要为两个泛型变量赋予数据类型。两个泛型变量的数
据类型可以相同,也可以不同。

二、Map 接口中常用方法

  常用方法

public V  put(K key,V value):把指定的键与指定的值添加到Map集合中
public V remove(Object key):把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值 
public V get(Object key):根据指定的键,在 Map 集合中获取对应的值
public Set<K> keySet():获取 Map 集合中所有的键,存储到 Set 集合中
public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)

    方法详解

    1、get() 方法

 public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
            返回值:
                key存在,返回对应的value值
                key不存在,返回null

    2、containsKey() 方法

 boolean containsKey(Object key) 判断集合中是否包含指定的键。
        包含返回true,不包含返回false

    3、remove() 方法

public V remove(Object key): 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
            返回值:V
                key存在,v返回被删除的值
                key不存在,v返回null

   4、put() 方法

 public V put(K key, V value):  把指定的键与指定的值添加到Map集合中。
            返回值:v
                存储键值对的时候,key不重复,返回值V是null
                存储键值对的时候,key重复,会使用新的value替换map中重复的value,返回被替换的value值

  

三、Map 集合遍历方法

  1、通过 键找值 的方式

    Map 集合中的方法:Set<K> keySet() 返回此映射中包含的键的 Set 视图。

    实现步骤

      (1)使用 Map 集合中的方法 keySet(),把 Map 集合所有的 key 取出来,存储到一个 set 集合中

      (2)通过 set 集合,获取 Map 集合中的每一个 key

      (3)通过 Map 集合中的方法 get(key),通过 key 找到 value。

     Demo:

 1 public static void main(String[] args) {
 2         //创建Map集合对象
 3         Map<String,Integer> map = new HashMap<>();
 4         map.put("赵丽颖",168);
 5         map.put("杨颖",165);
 6         map.put("林志玲",178);
 7 
 8         //1.使用Map集合中的方法keySet(),把Map集合所有的key取出来,存储到一个Set集合中
 9         Set<String> set = map.keySet();
10 
11         //2.遍历set集合,获取Map集合中的每一个key
12         //使用迭代器遍历Set集合
13         Iterator<String> it = set.iterator();
14         while (it.hasNext()){
15             String key = it.next();
16             //3.通过Map集合中的方法get(key),通过key找到value
17             Integer value = map.get(key);
18             System.out.println(key+"="+value);
19         }
20         System.out.println("-------------------");
21         //使用增强for遍历Set集合
22         for(String key : set){
23             //3.通过Map集合中的方法get(key),通过key找到value
24             Integer value = map.get(key);
25             System.out.println(key+"="+value);
26         }
27         System.out.println("-------------------");
28         //使用增强for遍历Set集合
29         for(String key : map.keySet()){
30             //3.通过Map集合中的方法get(key),通过key找到value
31             Integer value = map.get(key);
32             System.out.println(key+"="+value);
33         }
34     }

  2、使用 Entry 对象遍历

    Map 中存放的是两种对象,一种称为 key(),一种称为 value(),它们在在 Map 中是一一对应关系,这一对对象又称做 Map 中的一个 Entry()

    Entry 将键值对的对应关系封装成了对象。即键值对对象,这样我们在遍历 Map 集合时,就可以从每一个键值对( Entry )对象中获取对应的键与对应的值。

    既然Entry表示了一对键和值,那么也同样提供了获取对应键和对应值得方法:

public K getKey() :获取Entry对象中的键。
public V getValue() :获取Entry对象中的值。

        Map集合中的方法: 

Set<Map.Entry<K,V>> entrySet()   返回此映射中包含的映射关系的 Set 视图。

       实现步骤

    (1)使用Map集合中的方法entrySet(),把Map集合中多个Entry对象取出来,存储到一个Set集合中

    (2)遍历Set集合,获取每一个Entry对象

    (3)使用Entry对象中的方法getKey()和getValue()获取键与值

   Demo:

 1 public static void main(String[] args) {
 2         //创建Map集合对象
 3         Map<String,Integer> map = new HashMap<>();
 4         map.put("赵丽颖",168);
 5         map.put("杨颖",165);
 6         map.put("林志玲",178);
 7 
 8         //1.使用Map集合中的方法entrySet(),把Map集合中多个Entry对象取出来,存储到一个Set集合中
 9         Set<Map.Entry<String, Integer>> set = map.entrySet();
10 
11         //2.遍历Set集合,获取每一个Entry对象
12         //使用迭代器遍历Set集合
13         Iterator<Map.Entry<String, Integer>> it = set.iterator();
14         while(it.hasNext()){
15             Map.Entry<String, Integer> entry = it.next();
16             //3.使用Entry对象中的方法getKey()和getValue()获取键与值
17             String key = entry.getKey();
18             Integer value = entry.getValue();
19             System.out.println(key+"="+value);
20         }
21         System.out.println("-----------------------");
22         for(Map.Entry<String,Integer> entry:set){
23             //3.使用Entry对象中的方法getKey()和getValue()获取键与值
24             String key = entry.getKey();
25             Integer value = entry.getValue();
26             System.out.println(key+"="+value);
27         }
28     }

  注意Map集合不能直接使用迭代器或者foreach进行遍历。但是转成 Set 之后就可以使用了。

四、Map 常用子类

  1、HashMap:

  2、TreehMap:

猜你喜欢

转载自www.cnblogs.com/niujifei/p/11443865.html