软件包:java.util
接口:Map
描述:将键映射到值的对象

一,Map与Collection

  1. Collection接口:定义了单列集合规范,集合中的元素是独立存在的,每次存储一个(单个)元素
  2. Map接口:定义了双列集合的规范,集合中的元素是成对出现的,每次存储一对元素,每个元素由键和值两部分组成,通过可以找到的值

二,Map<K,V>接口

  1. 映射:像IP地址与主机名这种一一对应的关系就叫做映射,Map接口提供了专门的集合类来存放这种映射关系的对象

  2. 类型参数:元素是一个键值对

    K(key) - 此映射所维护的键的类型(键)

    V(value) - 映射值的类型(值)

    一个映射不能包含重复的键,但值可以重复

  3. 特点

    • Map是一个双列集合,其中每个元素包含键(key)和值(value)两个部分,两个部分一一对应
    • 键(key)和值(value)的数据类型可以相同也可以不同
    • 键(key)不允许重复,值(value)可以重复

三,实现类

  1. HashMap<K,V>基于哈希表的Map接口的实现,不同步(多线程),是一个无序的集合

    • 特点:查询速度快,key不允许重复,无序
  2. LinkedHashMap<K,V>HashMap的子类,基于哈希表和链表的Map接口的实现,是一个有序的集合
    • 特点:查询速度快,key不允许重复,多了一层链表,保证了元素的有序(存和取的顺序一致)
  3. HashTable<K,V>:早期的双列集合(JDK1.0+),基于哈希表的Map接口的实现,与HashMap类似,但不允许存储null对象,同步(单线程,线程安全,速度慢),与Vector集合一样在JDK1.2版本被取代

提示:哈希表 = 数组 + 链表/红黑树(提高了查询速度)

四,常用方法

方法 描述
put(K key,V value) 把指定的值与键添加到Map集合中,返回value值
remove(Object key) 把指定键所在的键值对在集合中删除,返回被删除元素
get(Object key) 根据指定的键,获取对应的值
containsSky(Object key) 判断集合是否包含指定键,返回true或false
keySet() 获取Map集合中所有的键,存储到Set集合
entrySet() 获取Map集合中所有的键值对对象,存储到Set集合

注意

  • put()方法,若key不重复,返回值value返回null;若key重复,会使用新的value替换Map中重复的value,返回被替换的value
  • remove()方法,若key存在,删除对应的键值对,返回被删除的value;若key不存在,返回值value返回null
  • get()方法,若key存在,返回对应的值;若key不存在,返回null

五,使用

import java.util.HashMap;
import java.util.Map;public class MapTest {public static void main(String[] args) {Map<String,String> map = new HashMap<>();/* put(K key,V value) */String s1 = map.put("张三","1");  //Map中原来没有此key,value返回nullSystem.out.println(s1); //nullString s2 = map.put("张三","2");  //Map中已有此key,value被替换,并返回原来的值"1"System.out.println(s1); //1map.put("李四","1");System.out.println(map); //{李四=1, 张三=2}(打印的不是地址,Map重写了toString方法)System.out.println("------");/* remove(Object key) */System.out.println(map);String s3 = map.remove("张三");  //返回对应的value值System.out.println(s3);// 2System.out.println(map);String s4 = map.remove("1");  //没有此元素,返回nullSystem.out.println(s4);// nullSystem.out.println("------");/* get(Object key) */System.out.println(map.get("李四")); //1System.out.println(map.get("1")); //null}
}

注意:获取返回的value值时,为防止元素不存在返回null时出现异常,多使用包装类

六,Entry键值对对象

  1. Map.Entry<K,V>:在Map接口中有一个内部接口Entry
  2. 概念:一对键值对在Map中被称为一个Entry(项),Entry将键值对的对应关系封装成了对象,即键值对对象,当Map集合创建时,就会在Map集合中创建一个Entry对象,用来记录键与值(键值对对象,键与值的映射关系)
  3. 使用:
    • entrySet():把Map集合内部的多个Entry对象取出来,存储到一个Set集合
    • getKey():Entry对象中的方法,用于获取key
    • getvalue():Entry对象中的方法,用于获取value

七,遍历

  1. 通过键找值

    • 使用keySet()方法获取Map集合中所有的键,存储到Set集合
    • 使用迭代器或增强for循环遍历,获取key
    • 通过key,使用get()方法获取对应的value
    Map<String,Integer> map2 = new HashMap<>();map2.put("张三",18);map2.put("李四",17);Set<String> s = map2.keySet();  //使用keySet()方法获取Map集合中所有的键,存储到Set集合for (String i : s) {  //使用迭代器或增强for循环遍历,获取keySystem.out.println(i);System.out.println(map2.get(i)); //通过key,使用get()方法获取对应的value}/* 也可以使用Iterator迭代器 */Iterator<String> it = s.iterator();while (it.hasNext()){String key = it.next();System.out.println(key);System.out.println(map2.get(key));}
    
  2. 通过Entry对象

    • 获取所有键值对的Entry对象
    • 通过Entry对象获取对象中的键与值
    Map<String,Integer> map3 = new HashMap<>();map3.put("张三",18);map3.put("李四",17);Set<Map.Entry<String,Integer>> set = map3.entrySet(); //将Entry对象存储到set集合for (Map.Entry<String, Integer> i : set) {  //获取每一个Entry对象 System.out.println(i.getKey());  //通过Entry对象获取对象中的键与值System.out.println(i.getValue());}
    

八,HashMap存储自定义类型键值

Map集合保证key是唯一的:作为key的元素,必须重写hashCode方法和equals方法,以保证key唯一

import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class DemoHashMap {public static void main(String[] args) {show();}private static void show() {HashMap<Person,String> map = new HashMap<>();map.put(new Person("张三",18),"北京");map.put(new Person("李四",17),"北京");map.put(new Person("张三",18),"北京");Set<Map.Entry<Person, String>> smap = map.entrySet();for (Map.Entry<Person, String> i : smap) {System.out.println(i.getKey()+"->"+i.getValue());}}
}
import java.util.Objects;public class Person {private String name;public int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Person person = (Person) o;return age == person.age && Objects.equals(name, person.name);}@Overridepublic int hashCode() {return Objects.hash(name, age);}
}

Java Map 接口详解相关推荐

  1. Java Map接口详解

    Map接口 Map接口概述 Map与Collection并列存在.用于保存具有映射关系的数据:key-value Map 中的 key 和 value 都可以是任何引用类型的数据 Map 中的 key ...

  2. Java—Map集合详解(HashMap/Hashtable/LinkedHashMap/Properties/TreeMap/WeakHashMap/IdentityHashMap/EnumMap)

    关注微信公众号:CodingTechWork,一起学习进步. Map Map集合介绍   Map(也称为字典.关联数组)是用于保存具有映射关系的数据,保存两组值,key和value,这两组值可以是任何 ...

  3. java小程序详解_微信小程序登录Java后台接口(详解,附示例代码)

    首先看一下官方文档 地址:微信小程序官方文档API登录接口 我们先对官方给的时序图进行简单的分析 1.当小程序调用wx.login()时,会获得一个code(临时登录凭证),然后我们需要用wx.req ...

  4. java map集合详解_JAVA干货:Map 集合详解

    java.util.Map集合 Map集合的特点: 1.Map集合是一个双列集合,一个元素包含两个值(一个key,一个value) 2.Map集合中的元素,key和value的数据类型可以相同,也可以 ...

  5. Java Map排序详解

    一)Map简介 java.util.Map是一个键值对集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. HashMap:最常用的Map ...

  6. Java~Map集合详解

    文章目录 Map介绍 核心Map 内部哈希:哈希映射技术 常用方法 遍历Map Map介绍 java.util中的集合类包含Java中某些最常用的类,其中最常用的集合类就是List和Map. 并且在集 ...

  7. java函数式接口-详解(狗头保命)

    函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口. 函数式接口可以被隐式转换为 lambda 表达式. JDK 1.8 之前已有的函数 ...

  8. Java Collection接口详解

    Collection 接口是 List.Set 和 Queue 接口的父接口,通常情况下不被直接使用.Collection 接口定义了一些通用的方法,通过这些方法可以实现对集合的基本操作.定义的方法既 ...

  9. Java集合核心详解【十分钟带你了解整个集合体系】

    前言: 集合是Java中非常重要的一章,学习难度也相对较大,不会很快就能掌握,这里我们先对集合框架有一个大概的了解,记住其中的基础知识,后面深入研究某一个集合时,才能更好的掌握. 文章目录 一.集合介 ...

最新文章

  1. 同步SQL Server 2000 数据库
  2. 三招看穿ERP软件是否可行
  3. BJUI怎样对input添加自定义验证规则
  4. 牛客 - 车辆调度(dfs)
  5. android jni arm x86,使用houdini(Android模拟器)在基于x86的AVD上运行ARM库
  6. 浙江网信办处置44家违规网站 包含网易游戏、花瓣网等
  7. form data怎么接收_VUE发送Formdata数据,NodeJS接收
  8. 共享茶室小程序都具备哪些功能?
  9. VUE根据后端返回url链接下载文件
  10. python 对象的销毁_销毁类python的对象
  11. LCD RGB 控制技术 时钟篇(上)
  12. Apache DolphinScheduler征稿 — 小Demo轻松入门DolphinSchedule大数据调度工具
  13. 搜索邻近计算机打印机,在活动目录中设置和管理发布打印机
  14. HPRT HLP106S-UE 驱动
  15. 微信美化版去水印小程序源码分享 附接口
  16. 抖音是一款什么样的短视频软件?
  17. Android美化之全局透明背景
  18. AI规则迎来进化:从“阿西莫夫三原则”到“李彦宏四原则”
  19. python采用函数式_python -- 函数以及函数式编程
  20. UDP实现简单通讯(夕佳佳)

热门文章

  1. python开发工具-5个最好用的Python编程开发工具(IDE)分享
  2. 盘点最常用的几款linux服务器管理面板
  3. 点云检测框投影到图像上(mmdetection3d)
  4. SpringBoot(3) 获取后台返回字符串对象及json数据
  5. 微盛·企微管家杨明:未来企业微信生态能诞生中国的Salesforce
  6. data.length提示undefined
  7. 一个流和百亿级的表的join
  8. 联想拯救者2020R7000双系统装机记录_自用
  9. MyEclipse中maven项目中WEBROOT目录问题
  10. 抱怨,就是在吸引不幸