13.7 Map 接口(血干JAVA系列)

这里写目录标题

  • 13.7.1 Map接口简介
  • 13.7.2 Map.Entry接口简介
  • 13.7.3 Map接口的常用子类
    • 1.新的子类:HashMap
    • 2.相关操作实例
      • (1)实例操作1——向集合中增加和取出内容
        • 【例13.26】增加和取得内容
      • (2)实例操作2------------ 判断指定的key或value是否存在
        • 【例13.27】判断指定内容是否存在
      • (3)实例操作3——输出全部的key
        • 【例13.28】输出全部的key
      • (4)实例操作4——输出全部的value
        • 【例13.29】输出全部的value
    • 3.旧的子类:Hashtable
      • 【例 13.30】 Hashtable 操作
    • 4. HashMap 与 Hashtable 的区别
    • 5.排序的子类:TreeMap
      • 【例13.31】观察TreeMap排序
  • 13.7.4 Map接口的使用注意事项
    • 1.注意事项1——不能直接使用迭代输出Map中的全部内容
      • (1) Map 输出方式 1: Iterator 输出 Map
      • (2) Map输出方式2: foreach输出Map
    • 2.注意事项2——直接使用非系统类作为key
      • 【例 13.34】 String-->Person 映射
      • 【例 13.35】 Person-->String 映射
      • 【例13.36】声明Person对象--> String映射
      • 【例13.37】覆写equals()和hashCode()方法
  • 13.7.5 key 可以重复的 Map 集合:IdentityHashMap
      • 【例13.38】 Map中的key不允许重复,重复就是覆盖
      • 【例13.39】使用IdentityHashMap修改程序

13.7.1 Map接口简介

在这里插入图片描述
在这里插入图片描述

13.7.2 Map.Entry接口简介

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

13.7.3 Map接口的常用子类

在这里插入图片描述

1.新的子类:HashMap

在这里插入图片描述
在这里插入图片描述

2.相关操作实例

(1)实例操作1——向集合中增加和取出内容

在Map接口中使用put(Object key,Object value)方法可以向集合中增加内容,然后可以通过get(E key)方法根据key找出其对应的value。

【例13.26】增加和取得内容
package jiaqi;import java.util.*;public class temp {public static void main(String[] args) {Map<String, String> map = new HashMap<String,String>();map.put("s1","s1_value");map.put("s2","s2_value");map.put("s3","s3_value");map.put("s4","s4_value");System.out.println(map.get("s1"));System.out.println(map.get("s2"));System.out.println(map.get("s3"));System.out.println(map.get("s4"));}
}

(2)实例操作2------------ 判断指定的key或value是否存在

【例13.27】判断指定内容是否存在

如 果 要 判 断 某 一 个 指 定 的 k e y 或 v a l u e 是 否 存 在 , 可 以 使 用 M a p 接 口 中 提 供 的 containsKey(Object key)和 containsValue(Object value)两个方法,前者是判断 Map 集合是否存在指定的key,后者是判断Map集合是否存在指定的value。

package jiaqi;import java.util.*;public class temp {public static void main(String[] args) {Map<String, String> map = new HashMap<String,String>();map.put("s1","s1_value");map.put("s2","s2_value");map.put("s3","s3_value");map.put("s4","s4_value");System.out.println("是否包含key:s1】"+map.containsKey("s1"));System.out.println("是否包含value:s1_value】"+map.containsValue("s1_value"));}
}

(3)实例操作3——输出全部的key

【例13.28】输出全部的key

在 M a p 中 提 供 了 一 个 叫 做 k e y S e t ( ) 的 方 法 , 可 以 将 一 个 M a p 中 的 全 部 k e y 变 为 一 个 S e t 集合,一旦有了 Se t 实例,就可以直接使用I t e r a t o r接口输出。但是在进行操作的时候一定要注意的是,接收的Set集合里指定的泛型要和Map中key的泛型类型保持一致。

Set<String> allSet = map.keySet();
package jiaqi;import java.util.*;public class temp {public static void main(String[] args) {Map<String, String> map = new HashMap<String,String>();map.put("s1","s1_value");map.put("s2","s2_value");map.put("s3","s3_value");map.put("s4","s4_value");Set<String> allSet = map.keySet();Iterator<String> iter = allSet.iterator();while(iter.hasNext()) {String str = iter.next();System.out.println(str);}}
}

(4)实例操作4——输出全部的value

【例13.29】输出全部的value

如果要输出全部的value,则使用values()方法,但是此方法的返回类型是Collectiono在进行操作的时候同样也需要注意泛型的类型。

package jiaqi;import java.util.*;public class temp {public static void main(String[] args) {Map<String, String> map = new HashMap<String,String>();map.put("s1","s1_value");map.put("s2","s2_value");map.put("s3","s3_value");map.put("s4","s4_value");Collection<String> allSet = map.values();Iterator<String> iter = allSet.iterator();while(iter.hasNext()) {String str = iter.next();System.out.println(str);}}
}

3.旧的子类:Hashtable

Hashtable也是Map中的一个子类,与Vector类的推出时间是一样的,都是属于旧的操作类, 其使用上也和之前没有太大的区别。

【例 13.30】 Hashtable 操作

package jiaqi;import java.util.*;public class temp {public static void main(String[] args) {Map<String, String> map = new Hashtable<String,String>();map.put("s1","s1_value");map.put("s2","s2_value");map.put("s3","s3_value");map.put("s4","s4_value");System.out.println("key");Set<String> allSet = map.keySet();Iterator<String> iter_key = allSet.iterator();while(iter_key.hasNext()){String str = iter_key.next();System.out.println(str);}Collection<String> allCollection = map.values();Iterator<String> iter = allCollection.iterator();System.out.println("value");while(iter.hasNext()) {String str = iter.next();System.out.println(str);}}
}

4. HashMap 与 Hashtable 的区别

在这里插入图片描述

5.排序的子类:TreeMap

之前的两个类在存放数据的时候并没有对其进行排序,细心的读者可以发现在前面输出全部key的时候是无序的,而TreeMap子类的主要功能是可以按key排序。

【例13.31】观察TreeMap排序

package jiaqi;import java.util.*;public class temp {public static void main(String[] args) {Map<String, String> allMap = new TreeMap<String, String>();allMap.put("AAA", "AAA_value");allMap.put("DDD", "DDD_value");allMap.put("BBB", "BBB_value");allMap.put("CCC", "CCC_value");allMap.put("AAA", "AAA_value_fuben");
//		System.out.println(allMap);Set<String> allSet = allMap.keySet();Iterator<String> iter = allSet.iterator();while(iter.hasNext()){System.out.print(allMap.get(iter.next())+"\t");}}
}

在这里插入图片描述

13.7.4 Map接口的使用注意事项

1.注意事项1——不能直接使用迭代输出Map中的全部内容

在这里插入图片描述

(1) Map 输出方式 1: Iterator 输出 Map

package jiaqi;import java.util.*;public class temp {public static void main(String[] args) {Map<String, String> allMap = new HashMap<String, String>();allMap.put("AAA", "AAA_value");allMap.put("DDD", "DDD_value");allMap.put("BBB", "BBB_value");allMap.put("CCC", "CCC_value");Set<Map.Entry<String, String>> allSet = allMap.entrySet();Iterator<Map.Entry<String, String>> iter = allSet.iterator();while(iter.hasNext()){Map.Entry<String, String> e = iter.next();System.out.print(e.getKey()+"\t"+e.getValue()+"\n");}}
}

(2) Map输出方式2: foreach输出Map

在这里插入图片描述

package jiaqi;import java.util.*;public class temp {public static void main(String[] args) {Map<String, String> allMap = new HashMap<String, String>();allMap.put("AAA", "AAA_value");allMap.put("DDD", "DDD_value");allMap.put("BBB", "BBB_value");allMap.put("CCC", "CCC_value");Set<Map.Entry<String, String>> allSet = allMap.entrySet();for(Map.Entry<String, String> e:allSet){System.out.print(e.getKey()+"\t"+e.getValue()+"\n");}}
}

2.注意事项2——直接使用非系统类作为key

【例 13.34】 String–>Person 映射

package jiaqi;import java.util.*;
class Person_
{private String name;private int age;public Person_(String name,int age){this.name = name;this.age = age;}public String toString() {return this.name+"的age是:"+this.age;}
}
public class temp {public static void main(String[] args) {Map<String, Person_> allMap = new HashMap<String,Person_>();allMap.put("zhangsan", new Person_("张三",20));System.out.println(allMap.get("zhangsan"));}
}

在这里插入图片描述

【例 13.35】 Person–>String 映射

package jiaqi;import java.util.*;
class Person_
{private String name;private int age;public Person_(String name,int age){this.name = name;this.age = age;}public String toString() {return this.name+"的age是:"+this.age;}
}
public class temp {public static void main(String[] args) {Map<Person_,String> allMap = new HashMap<Person_,String>();allMap.put( new Person_("张三",20),"zhangsan");System.out.println(allMap.get(new Person_("张三",20)));}
}

在这里插入图片描述
在这里插入图片描述

【例13.36】声明Person对象–> String映射

package jiaqi;import java.util.*;
class Person_
{private String name;private int age;public Person_(String name,int age){this.name = name;this.age = age;}public String toString() {return this.name+"的age是:"+this.age;}
}
public class temp {public static void main(String[] args) {Map<Person_,String> allMap = new HashMap<Person_,String>();Person_ per =  new Person_("张三",20);allMap.put(per,"zhangsan");System.out.println(allMap.get(per));}
}

在这里插入图片描述
在这里插入图片描述

【例13.37】覆写equals()和hashCode()方法

package jiaqi;import java.util.*;
class Person_
{private String name;private int age;public Person_(String name,int age){this.name = name;this.age = age;}@Overridepublic boolean equals(Object obj) {if(this==obj)return true;if(!(obj instanceof Person_))return false;Person_ per = (Person_)obj;if(this.name.equals(per.name)&&this.age==per.age) return true;else return false;}public int hashCode() {return this.name.hashCode()*this.age;}public String toString() {return this.name+"的age是:"+this.age;}
}
public class temp {public static void main(String[] args) {Map<Person_,String> allMap = new HashMap<Person_,String>();allMap.put(new Person_("张三",20),"zhangsan");System.out.println(allMap.get(new Person_("张三",20)));}
}

在这里插入图片描述
在这里插入图片描述

13.7.5 key 可以重复的 Map 集合:IdentityHashMap

之前讲解的所有Map操作中key的值是不能重复的,例如,HashMap操作的时候key是不能重复的,如果重复肯定会覆盖之前的内容,如下面代码所示。

【例13.38】 Map中的key不允许重复,重复就是覆盖

package jiaqi;import java.util.*;
class Person_
{private String name;private int age;public Person_(String name,int age){this.name = name;this.age = age;}@Overridepublic boolean equals(Object obj) {if(this==obj)return true;if(!(obj instanceof Person_))return false;Person_ per = (Person_)obj;if(this.name.equals(per.name)&&this.age==per.age) return true;else return false;}public int hashCode() {return this.name.hashCode()*this.age;}public String toString() {return this.name+"的age是:"+this.age;}
}
public class temp {public static void main(String[] args) {Map<Person_,String> allMap = new HashMap<Person_,String>();allMap.put(new Person_("张三",20),"zhangsan——1");allMap.put(new Person_("张三",20),"zhangsan——2");allMap.put(new Person_("李四",21),"李四");Set<Map.Entry<Person_, String>> allSet = allMap.entrySet();Iterator<Map.Entry<Person_, String>> iter = allSet.iterator();while(iter.hasNext()){Map.Entry<Person_,String> e = iter.next();System.out.println(e.getKey()+"\t"+e.getValue());}System.out.println();}
}

在这里插入图片描述
在这里插入图片描述

【例13.39】使用IdentityHashMap修改程序

package jiaqi;import java.util.*;
class Person_
{private String name;private int age;public Person_(String name,int age){this.name = name;this.age = age;}@Overridepublic boolean equals(Object obj) {if(this==obj)return true;if(!(obj instanceof Person_))return false;Person_ per = (Person_)obj;if(this.name.equals(per.name)&&this.age==per.age) return true;else return false;}public int hashCode() {return this.name.hashCode()*this.age;}public String toString() {return this.name+"的age是:"+this.age;}
}
public class temp {public static void main(String[] args) {Map<Person_,String> allMap = new IdentityHashMap<Person_,String>();allMap.put(new Person_("张三",20),"zhangsan——1");allMap.put(new Person_("张三",20),"zhangsan——2");allMap.put(new Person_("李四",21),"李四");Set<Map.Entry<Person_, String>> allSet = allMap.entrySet();Iterator<Map.Entry<Person_, String>> iter = allSet.iterator();while(iter.hasNext()){Map.Entry<Person_,String> e = iter.next();System.out.println(e.getKey()+"\t"+e.getValue());}System.out.println();}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/744033.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMware16如何克隆虚拟机

目录 克隆虚拟机方式一(在Windows上复制粘贴)克隆虚拟机方式二(使用VM的克隆操作 克隆之前需要关机)修改克隆机的IP和主机名虚拟机快照虚拟机的迁移和删除 克隆虚拟机方式一(在Windows上复制粘贴) 直接拷贝一份你已经安装好的虚拟机 复制到目的主机上 然后用VM就能打开它 甚至…

全视智慧机构养老解决方案,以科技守护长者安全

2024年2月28日凌晨1时许&#xff0c;在上海浦东大道的一家养护院四楼杂物间内发生了一起火灾事故。尽管火势不大&#xff0c;过火面积仅为2平方米&#xff0c;但这场小火却造成了1人死亡和3人受伤的悲剧。这一事件再次提醒我们&#xff0c;养老院作为老年人聚集的场所&#xff…

人人站CMS后台登不进去解决方案(已解决)

公司有一个网站使用的是人人站CMS&#xff0c;最近发现后台登录不进去&#xff0c;有以下报错 发生以下错误: file get contents(http://www.rrzcms.com/Public/cms/config/config.ison): failed to open stream: HTTP reguest failed! 请求的URL导致内部服务器错误。 如果您反…

win11文件共享失败的问题

前言 windows 11连接公司内部服务器报错&#xff0c;报错如下&#xff1a; 因为文件共享不安全&#xff0c;所以你不能连接到文件共享。此共享需要过时的SMB1协议&#xff0c;而此协议是不安全的&#xff0c;可能会使你的系统遭受攻击。你的系统需要SMB2或更高版本。有关如何解…

188基于matlab的AR模型参数估计

基于matlab的AR模型参数估计&#xff0c;burg法和ule-Walker法估计信号&#xff0c;并输出估计误差。程序已调通&#xff0c;可直接运行。 188 AR模型参数估计 burg法和ule-Walker法 (xiaohongshu.com)

展厅设计中灯光的要点都是什么

1、白炽灯 白炽灯也就是普通普通白炽灯泡白炽灯有显色性强&#xff0c;开灯即亮&#xff0c;明暗可调&#xff0c;结构简单&#xff0c;造价低等优点&#xff0c;但缺点是使用寿命短&#xff0c;光效较低展厅设计中常使用于走道和其他部位。 2、卤钨灯 充气白炽灯填充气体中含有…

【数理统计实验(三)】假设检验的R实现

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…

【linux中cd指令使用】cd进入与退出路径

【linux中cd指令使用】cd如何进入与退出路径 1、cd进入指定路径&#xff0c;比如我要进入下面这个路径中去运行setup.py文件&#xff0c;如果我不跳转到该路径下直接运行&#xff0c;会报错找不到该文件 cd空格路径&#xff0c;即可跳转到该路径 cd /public2/xxx/tiny-cuda…

鸿蒙不再适合JS语言开发

ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript&#xff08;简称TS&#xff09;基本语法风格的基础上&#xff0c;对TS的动态类型特性施加更严格的约束&#xff0c;引入静态类型。同时&#xff0c;提供了声明式UI、状态管理等相应的能力&#xff0c;让开发者可以以更简洁、…

Pytorch入门-Transforms

文章目录 ComposeToTensorNormalizeResize 在PyTorch中&#xff0c;transforms是一个用于图像预处理和数据增强的模块&#xff0c;通常与torchvision库一起使用。torchvision提供了大量预先定义的transforms&#xff0c;它们可以方便地应用于图像数据&#xff0c;以进行预处理或…

突破内网限制,自由访问 NAS:网络穿透方案大合集! | 开源日报 No.199

anderspitman/awesome-tunneling Stars: 12.2k License: NOASSERTION awesome-tunneling 是一个列出 ngrok 替代方案和其他类似 ngrok 的隧道软件和服务的项目&#xff0c;重点是自托管。 主要面向自托管者和开发人员。提供注册域名并将记录自动指向运行隧道的服务器。自动设…

疯狂数钞票H5游戏

移动端微信h5 <template><div class"container" id"container"><div class"regBag"></div><div class"moneyBox"><transitionv-for"(item,index) in showImgList":key"index"…

这个班要不还是别上了吧。

先不提代码写得对不对。咱就是说&#xff0c;打印语句都出不来&#xff0c;搞个chuanchuan哟。 &#xff08;谁能给我解释一下。。&#x1f643;&#xff09;

芯片架构设计及其作用

芯片架构设计是芯片流片前很重要的一个环节&#xff0c;俗称pre-silicon&#xff0c;芯片架构设计的好坏&#xff0c;决定了芯片产品的质量&#xff0c;决定了芯片产品是否易用&#xff0c;决定了芯片产品的性能&#xff0c;决定了芯片产品在市场上是否具有持久性。芯片生产是个…

公众号怎么转移主体

公众号迁移有什么作用&#xff1f;只能变更主体吗&#xff1f;长期以来&#xff0c;由于部分公众号在注册时&#xff0c;主体不准确的历史原因&#xff0c;或者公众号主体发生合并、分立或业务调整等现实状况&#xff0c;在公众号登记主体不能对应实际运营人的情况下&#xff0…

阿里云服务器ECS--安全,稳定,购买灵活,低成本

阿里云服务器ECS英文全程Elastic Compute Service&#xff0c;云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务&#xff0c;阿里云提供多种云服务器ECS实例规格&#xff0c;如ECS经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等&#xff0c;阿里云服务器网al…

基于Spring Boot的疗养院管理系统的设计与实现

传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装疗养院管理系统软件来发挥其高效地信息处理的作用&#xff0c;可以…

Verovio简介及在Windows10和Ubuntu 22.04上编译过程

Verovio是一个快速、便携、轻量级的开源库&#xff0c;用于将音乐编码倡议(Music Encoding Initiative(MEI))数字乐谱雕刻到SVG图像中。Verovio还包含即时转换器(on-the-fly converters)用于渲染Plaine & Easie Code、Humdrum、Musedata、MusicXML、EsAC和ABC数字乐谱。源代…

零知识玩转AVH(4)—— 怎么玩(3)

接前一篇文章&#xff1a;零知识玩转AVH&#xff08;3&#xff09;—— 怎么玩&#xff08;2&#xff09; 上一回讲解了“arm-avh-best-practice-project-product-subscription-guide-cn.pdf”即“Arm虚拟硬件实践专题一&#xff1a;产品订阅指南&#xff08;百度智能云版&…

python爬虫(9)之requests模块

1、获取动态加载的数据 1、在开发者工具中查看动态数据 找到csdn的门户的开发者工具后到这一页面。 2、加载代码 import requests headers {User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36…