当前位置: 首页 / 技术干货 / 正文
Map接口与HashMap集合

2022-12-22

map 集合 java

Map接口简介

Map接口是一种双列集合,它的每个元素都包含一个键对象Key和值对象Value,键和值对象之间存在一种对应关系,称为映射。从Map集合中访问元素时,只要指定了Key,就能找到对应的Value。

Map接口中的常用方法如下表。

1

HashMap集合

HashMap集合是Map接口的一个实现类,用于存储键值映射关系,但HashMap集合没有重复的键并且键值无序。接下来通过一个案例学习HashMap的用法。

Java
import java.util.HashMap;

public class Example14 {
    public static void main(String[] args) {
        HashMap map = new HashMap(); // 创建Map对象
        map.put("1", "张三"); // 存储键和值
        map.put("2", "李四");
        map.put("3", "王五");
        System.out.println("1:" + map.get("1")); // 根据键获取值
        System.out.println("2:" + map.get("2"));
        System.out.println("3:" + map.get("3"));
    }
}

Map集合中的键具有唯一性,现在向Map集合中存储一个相同的键看看会出现什么情况,下面增加一行代码,如下所示: 

Java
map.put("3", "赵六");

 Map中仍然只有3个元素,只是第二次添加的值“赵六”覆盖了原来的值“王五”,这也证实了Map中的键必须是唯一的,不能重复,如果存储了相同的键,后存储的值则会覆盖原有的值,简而言之就是:键相同,值覆盖。

在程序开发中,经常需要取出Map中所有的键和值,那么如何遍历Map中所有的键值对呢?有两种方式可以实现。

第一种方式就是先遍历Map集合中所有的键,再根据键获取相应的值。接下来通过一个案例来演示先遍历Map集合中所有的键,再根据键获取相应的值。 

Java
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class Example15 {
    public static void main(String[] args) {
        HashMap map = new HashMap(); // 创建Map集合
        map.put("1", "张三"); // 存储键和值
        map.put("2", "李四");
        map.put("3", "王五");
        Set keySet = map.keySet(); // 获取键的集合
        Iterator it = keySet.iterator(); // 迭代键的集合
        while (it.hasNext()) {
            Object key = it.next();
            Object value = map.get(key); // 获取每个键所对应的值
            System.out.println(key + ":" + value);
        }
    }
}

 首先调用Map对象的KeySet()方法,获得存储Map中所有键的Set集合,然后通过Iterator迭代Set集合的每一个元素,即每一个键,最后通过调用get(String key)方法,根据键获取对应的值。

Map集合的另外一种遍历方式是先获取集合中的所有的映射关系,然后从映射关系中取出键和值。接下来通过一个案例演示这种遍历方式。

Java
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class Example16 {
    public static void main(String[] args) {
        HashMap map = new HashMap(); // 创建Map集合
        map.put("1", "张三"); // 存储键和值
        map.put("2", "李四");
        map.put("3", "王五");
        Set entrySet = map.entrySet(); // 返回此映射中包含的映射关系的Set视图
        Iterator it = entrySet.iterator(); // 获取Iterator对象
        while (it.hasNext()) {
            // 获取集合中键值对映射关系
            Map.Entry entry = (Map.Entry) (it.next());
            Object key = entry.getKey(); // 获取Entry中的键
            Object value = entry.getValue(); // 获取Entry中的值
            System.out.println(key + ":" + value);
        }
    }
}

 首先调用Map对象的entrySet()方法获得存储在Map中所有映射的Set集合,这个集合中存放了Map.Entry类型的元素(Entry是Map内部接口),每个Map.Entry对象代表Map中的一个键值对,然后迭代Set集合,获得每一个映射对象,并分别调用映射对象的getKey()和getValue()方法获取键和值。

在Map中,还提供了一些操作集合的常用方法,例如,values()方法用于得到map实例中所有的value,返回值类型为Collection;size()方法获取map集合类的大小;containsKey()方法用于判断是否包含传入的键;containsValue()方法用于判断是否包含传入的值;remove()方法用于根据key移除map中的与该key对应的value等。

接下来通过一个案例演示Map这些方法的使用。 

Java
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;

public class Example17 {
    public static void main(String[] args) {
        HashMap map = new HashMap(); // 创建Map集合
        map.put("1", "张三"); // 存储键和值
        map.put("3", "李四");
        map.put("2", "王五");
        map.put("4", "赵六");
        System.out.println("集合大小为:" + map.size());
        System.out.println("判断是否包含传入的键:" + map.containsKey("2"));
        System.out.println("判断是否包含传入的值:" + map.containsValue("王五"));
        System.out.println("移除键为1的值是:" + map.remove("1"));
        Collection values = map.values();
        Iterator it = values.iterator();
        while (it.hasNext()) {
            Object value = it.next();
            System.out.println(value);
        }
    }
}

 从上面的例子可以看出,HashMap集合迭代出来元素的顺序和存入的顺序是不一致的。如果想让这两个顺序一致,可以使用Java中提供的LinkedHashMap类,它是HashMap的子类,与LinkedList一样,它也使用双向链表来维护内部元素的关系,使Map元素迭代的顺序与存入的顺序一致。

接下来通过一个案例学习LinkedHashMap的用法: 

Java
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Set;

public class Example18 {
    public static void main(String[] args) {
        LinkedHashMap map = new LinkedHashMap(); // 创建Map集合
        map.put("1", "张三"); // 存储键和值
        map.put("2", "李四");
        map.put("3", "王五");
        Set keySet = map.keySet();
        Iterator it = keySet.iterator();
        while (it.hasNext()) {
            Object key = it.next();
            Object value = map.get(key); // 获取每个键所对应的值
            System.out.println(key + ":" + value);
        }
    }
}

分享: 更多

上一篇:TreeSet集合

下一篇:TreeMap集合

好程序员公众号

  • · 剖析行业发展趋势
  • · 汇聚企业项目源码

好程序员开班动态

More+
  • HTML5大前端 <高端班>

    开班时间:2021-04-12(深圳)

    开班盛况

    开班时间:2021-05-17(北京)

    开班盛况
  • 大数据+人工智能 <高端班>

    开班时间:2021-03-22(杭州)

    开班盛况

    开班时间:2021-04-26(北京)

    开班盛况
  • JavaEE分布式开发 <高端班>

    开班时间:2021-05-10(北京)

    开班盛况

    开班时间:2021-02-22(北京)

    开班盛况
  • Python人工智能+数据分析 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2020-09-21(上海)

    开班盛况
  • 云计算开发 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2019-07-22(北京)

    开班盛况
IT培训IT培训
在线咨询
IT培训IT培训
试听
IT培训IT培训
入学教程
IT培训IT培训
立即报名
IT培训

Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号