Map

接口概述

我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图。

  • Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。

  • Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。

  • Collection中的集合称为单列集合,Map中的集合称为双列集合。

  • 需要注意的是,Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。

  • Map中常用的集合为HashMap集合、LinkedHashMap集合。

Map接口中常用集合概述

通过查看Map接口描述,看到Map有多个子类,这里我们主要讲解常用的HashMap集合、LinkedHashMap集合。

  • HashMap<K,V>:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。

  • LinkedHashMap<K,V>:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。

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

Map接口中的常用方法

没有,则没有这个键对应的值,返回null,并把指定的键值添加到集合中;

使用put方法时,若指定的键(key)在集合中存在,则返回值为集合中键对应的值(该值为替换前的值),并把指定键所对应的值,替换成指定的新值。

  • get方法:获取指定键(key)所对应的值(value)

  • put方法:将指定的键与值对应起来,并添加到集合中

方法返回值为键所对应的值

使用put方法时,若指定的键(key)在集合中

  • remove方法:根据指定的键(key)删除元素,返回被删除元素的值(value)。

Map接口的方法演示

public class MapDemo {public static void main(String[] args) {//创建Map对象Map<String, String> map = new HashMap<String,String>();       //数据采用的哈希表结构//给map中添加元素map.put("星期一", "Monday");map.put("星期日", "Sunday");System.out.println(map); // {星期日=Sunday, 星期一=Monday}//当给Map中添加元素,会返回key对应的原来的value值,若key没有对应的值,返回nullSystem.out.println(map.put("星期一", "Mon")); // MondaySystem.out.println(map); // {星期日=Sunday, 星期一=Mon}//根据指定的key获取对应的valueString en = map.get("星期日");System.out.println(en); // Sunday//根据key删除元素,会返回key对应的value值String value = map.remove("星期日");System.out.println(value); // SundaySystem.out.println(map); // {星期一=Mon}}
}

Map集合遍历键找值方式

键找值方式:即通过元素中的键,获取键所对应的值

操作步骤与图解:

1.获取Map集合中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键

2.遍历键的Set集合,得到每一个键

3.根据键,获取键所对应的值

代码演示: //利用了迭代器Iterator  (点此了解迭代器)

public class MapDemo {public static void main(String[] args) {//创建Map对象Map<String, String> map = new HashMap<String,String>();//给map中添加元素map.put("邓超", "孙俪");map.put("李晨", "范冰冰");
map.put("刘德华", "柳岩");//获取Map中的所有keySet<String> keySet = map.keySet();//遍历存放所有key的Set集合Iterator<String> it =keySet.iterator();    **while(it.hasNext()){                         //利用了Iterator迭代器**//得到每一个keyString key = it.next();//通过key获取对应的valueString value = map.get(key);System.out.println(key+"="+value);}}
}

Map集合遍历键值对方式

键值对方式:即通过集合中每个键值对(Entry)对象,获取键值对(Entry)对象中的键与值。

操作步骤与图解:

1.获取Map集合中,所有的键值对(Entry)对象,以Set集合形式返回。

2.遍历包含键值对(Entry)对象的Set集合,得到每一个键值对(Entry)对象

3.通过键值对(Entry)对象,获取Entry对象中的键与值。

public class MapDemo {public static void main(String[] args) {//创建Map对象Map<String, String> map = new HashMap<String,String>();//给map中添加元素map.put("邓超", "孙俪");map.put("李晨", "范冰冰");map.put("刘德华", "柳岩");//获取Map中的所有key与value的对应关系Set<Map.Entry<String,String>> entrySet = map.entrySet();//遍历Set集合Iterator<Map.Entry<String,String>> it =entrySet.iterator();while(it.hasNext()){//得到每一对对应关系Map.Entry<String,String> entry = it.next();//通过每一对对应关系获取对应的keyString key = entry.getKey();//通过每一对对应关系获取对应的valueString value = entry.getValue();System.out.println(key+"="+value);}}
}

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


下面转载自来自一个Map的用法例子:

//假设key 为Integer型 value 为String ,具体自行定义
Map<Integer,String> map = new HashMap<Integer,String>();

放入数据


map.put(1,"a");
map.put(2,"b");
map.put(3,"c");

根据key获取对应的value

map.get(1); //获取到对应key=1时的value=a

遍历方法1:keyset遍历

Iterator<String> iter = map.keySet().iterator();while (iter.hasNext()) {int key = iter.next();String value = map.get(key);
}————————————————————————————————————————————//还有一种写法 用for each
for (String key : map.keySet()) {String value = map.get(key);
}

遍历方法2:

Iterator<Entry<String, String>> iter = map.entrySet().iterator();Entry<String, String> entry;while (iter.hasNext()) {entry = iter.next();int key = entry.getKey();String value = entry.getValue();}
//同样的for each写法
for (Entry<String, String> entry: map.entrySet()) {int key = entry.getKey();String value = entry.getValue();}

另外,在考虑效率方面,for each速度更快一点点,推荐使用for each写法来遍历。

java笔记--Map的用法相关推荐

  1. java containskey_Java Map containsKey()用法及代码示例

    java.util.Map.containsKey()方法用于检查特定键是否已映射到Map中.它使用key元素作为参数,如果该元素在映射中映射,则返回True. 用法: boolean contain ...

  2. java中Map的用法(HaspMap用法)

    public interface Map<K,V> 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. 1 import java.util.HashMap; 2 ...

  3. Java工作笔记-Map的基本用法

    这段话是博客园一大神的,摘录下来: (01) Map 是"键值对"映射的抽象接口. (02) AbstractMap 实现了Map中的绝大部分函数接口.它减少了"Map的 ...

  4. java map contains_Java Map containsValue()用法及代码示例

    java.util.Map.containsValue()方法用于检查特定值是通过Map中的单个还是多个键进行映射的.它使用该值作为参数,如果该值由映射中的任何键映射,则返回True. 用法: boo ...

  5. java的entryset_Java Map entrySet()用法及代码示例

    Java中的java.util.Map.entrySet()方法用于根据Map中包含的相同元素创建集合.它本质上返回Map的集合视图,或者我们可以创建一个新集合并将Map元素存储到其中. 用法: ma ...

  6. Java中entryset用法,keySet()、entrySet()和Map.Entry用法

    2019-11-16 package com.lixing.jihe13; import java.util.*; /** * @author: ZH * @date: 2019/10/25 10:4 ...

  7. java map.get_Java Map get()用法及代码示例

    Java中的Map接口的get()方法用于检索或获取由参数中提到的特定键映射的值.当映射不包含键的此类映射时,它将返回NULL. 用法: thisMap.get(Object key_element) ...

  8. Java中Map用法详解

    原文地址http://blog.csdn.net/guomutian911/article/details/45771621 原文地址http://blog.csdn.net/sunny2437885 ...

  9. list和map用法java,java 集合list和map的用法

    import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Li ...

最新文章

  1. node建立博客系统遇到的问题,1,乱码。2,multer的使用错误。3使用session问题...
  2. iOS开发(2)UILabel学习
  3. 高级java知识结构图,Spring高级框架课程笔记 PDF 下载
  4. IOS之Label画一条删除线
  5. xampp mysql 查询很慢_如何开启mysql的慢查询机制
  6. 【Java并发编程】16、ReentrantReadWriteLock源码分析
  7. 服务器san 虚拟化安装系统,在Hyper-V中安装iSCSI SAN服务器(下)
  8. ajax表单提交post(错误400) 序列化表单(post表单转换json(序列化))
  9. nagios常见错误及页面错误
  10. verilog实现格雷码(Gray Code)与二进制编码转换
  11. 如何让cmd一直默认以管理员身份打开
  12. Rancher某环境所有主机网络瘫痪问题
  13. 【渝粤教育】电大中专跨境电子商务理论与实务 (32)作业 题库
  14. CHM 已取消到该网页的导航
  15. bert模型中的[CLS]、[UNK]、[SEP]是什么意思?
  16. APP开放源码第一弹《纳豆》
  17. 快速云:关于云技术未来的六大趋势
  18. 用pecl命令安装php扩展geoip
  19. __str__()方法
  20. 微软校招编程题Beautiful String的状态机解法

热门文章

  1. 处理迟到问题--简单的Java程序记录
  2. 关系型数据库与分布式数据库
  3. SpringBoot配置Mybatis打印SQL
  4. python实现目标识别眼镜_用Python快速实现YOLO目标检测
  5. Istio测试环境搭建和功能演示
  6. Thinkpad T440s重装系统 Window或者linux
  7. python records_Python Pandas DataFrame.to_records用法及代码示例
  8. Mybatis-plus分页查询records为空,total不为空的问题
  9. .NET web开发入门小例子
  10. outlook计算机应用操作题,全国统考计算机应用基础outlook操作题(总13页).doc