Java Map 接口详解
软件包:java.util
接口:Map
描述:将键映射到值的对象
一,Map与Collection
- Collection接口:定义了单列集合规范,集合中的元素是独立存在的,每次存储一个(单个)元素
- Map接口:定义了双列集合的规范,集合中的元素是成对出现的,每次存储一对元素,每个元素由键和值两部分组成,通过键可以找到对的值
二,Map<K,V>接口
映射:像IP地址与主机名这种一一对应的关系就叫做映射,Map接口提供了专门的集合类来存放这种映射关系的对象
类型参数:元素是一个键值对
K
(key) - 此映射所维护的键的类型(键)V
(value) - 映射值的类型(值)一个映射不能包含重复的键,但值可以重复
特点
- Map是一个双列集合,其中每个元素包含键(key)和值(value)两个部分,两个部分一一对应
- 键(key)和值(value)的数据类型可以相同也可以不同
- 键(key)不允许重复,值(value)可以重复
三,实现类
HashMap<K,V>
:基于哈希表的Map接口的实现,不同步(多线程),是一个无序的集合- 特点:查询速度快,key不允许重复,无序
LinkedHashMap<K,V>
:HashMap的子类,基于哈希表和链表的Map接口的实现,是一个有序的集合- 特点:查询速度快,key不允许重复,多了一层链表,保证了元素的有序(存和取的顺序一致)
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键值对对象
Map.Entry<K,V>
:在Map接口中有一个内部接口Entry- 概念:一对键值对在Map中被称为一个Entry(项),Entry将键值对的对应关系封装成了对象,即键值对对象,当Map集合创建时,就会在Map集合中创建一个Entry对象,用来记录键与值(键值对对象,键与值的映射关系)
- 使用:
entrySet()
:把Map集合内部的多个Entry对象取出来,存储到一个Set集合getKey()
:Entry对象中的方法,用于获取keygetvalue()
:Entry对象中的方法,用于获取value
七,遍历
通过键找值
- 使用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));}
通过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 接口详解相关推荐
- Java Map接口详解
Map接口 Map接口概述 Map与Collection并列存在.用于保存具有映射关系的数据:key-value Map 中的 key 和 value 都可以是任何引用类型的数据 Map 中的 key ...
- Java—Map集合详解(HashMap/Hashtable/LinkedHashMap/Properties/TreeMap/WeakHashMap/IdentityHashMap/EnumMap)
关注微信公众号:CodingTechWork,一起学习进步. Map Map集合介绍 Map(也称为字典.关联数组)是用于保存具有映射关系的数据,保存两组值,key和value,这两组值可以是任何 ...
- java小程序详解_微信小程序登录Java后台接口(详解,附示例代码)
首先看一下官方文档 地址:微信小程序官方文档API登录接口 我们先对官方给的时序图进行简单的分析 1.当小程序调用wx.login()时,会获得一个code(临时登录凭证),然后我们需要用wx.req ...
- java map集合详解_JAVA干货:Map 集合详解
java.util.Map集合 Map集合的特点: 1.Map集合是一个双列集合,一个元素包含两个值(一个key,一个value) 2.Map集合中的元素,key和value的数据类型可以相同,也可以 ...
- Java Map排序详解
一)Map简介 java.util.Map是一个键值对集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. HashMap:最常用的Map ...
- Java~Map集合详解
文章目录 Map介绍 核心Map 内部哈希:哈希映射技术 常用方法 遍历Map Map介绍 java.util中的集合类包含Java中某些最常用的类,其中最常用的集合类就是List和Map. 并且在集 ...
- java函数式接口-详解(狗头保命)
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口. 函数式接口可以被隐式转换为 lambda 表达式. JDK 1.8 之前已有的函数 ...
- Java Collection接口详解
Collection 接口是 List.Set 和 Queue 接口的父接口,通常情况下不被直接使用.Collection 接口定义了一些通用的方法,通过这些方法可以实现对集合的基本操作.定义的方法既 ...
- Java集合核心详解【十分钟带你了解整个集合体系】
前言: 集合是Java中非常重要的一章,学习难度也相对较大,不会很快就能掌握,这里我们先对集合框架有一个大概的了解,记住其中的基础知识,后面深入研究某一个集合时,才能更好的掌握. 文章目录 一.集合介 ...
最新文章
- 同步SQL Server 2000 数据库
- 三招看穿ERP软件是否可行
- BJUI怎样对input添加自定义验证规则
- 牛客 - 车辆调度(dfs)
- android jni arm x86,使用houdini(Android模拟器)在基于x86的AVD上运行ARM库
- 浙江网信办处置44家违规网站 包含网易游戏、花瓣网等
- form data怎么接收_VUE发送Formdata数据,NodeJS接收
- 共享茶室小程序都具备哪些功能?
- VUE根据后端返回url链接下载文件
- python 对象的销毁_销毁类python的对象
- LCD RGB 控制技术 时钟篇(上)
- Apache DolphinScheduler征稿 — 小Demo轻松入门DolphinSchedule大数据调度工具
- 搜索邻近计算机打印机,在活动目录中设置和管理发布打印机
- HPRT HLP106S-UE 驱动
- 微信美化版去水印小程序源码分享 附接口
- 抖音是一款什么样的短视频软件?
- Android美化之全局透明背景
- AI规则迎来进化:从“阿西莫夫三原则”到“李彦宏四原则”
- python采用函数式_python -- 函数以及函数式编程
- UDP实现简单通讯(夕佳佳)