Java学习总结:55(偶对象保存:Map接口)
偶对象保存:Map接口
我们前面讲到的Collection属于单值保存父接口,每次只能保存一个对象;而我们这节讲的Map属于偶对象保存接口,利用Map可以保存一对关联数据(按照"key = value"的形式)。
Map接口的常用方法
No | 方法名称 | 类型 | 描述 |
---|---|---|---|
1 | public V put(K key,V value) | 普通 | 向集合中保存对象 |
2 | public V get(Object key) | 普通 | 根据key查找对应的value数据 |
3 | public Set<Map.Entry<K,V>>entrySet() | 普通 | 将Map集合转化为Set集合 |
4 | public Set< K >keySet() | 普通 | 取出全部的key |
Map接口中两个常用的子类:HashMap、Hashtable。
HashMap
例:观察HashMap子类的基本使用
package Project.Study.Map.HashMap;import java.util.HashMap;
import java.util.Map;public class Test1 {public static void main(String[]args){Map<String,Integer>map = new HashMap<>(); //定义Map集合map.put("One",1); //保存数据map.put("一",1);map.put("一",2); //key数据重复map.put("一一",11);map.put(null,0); //key为nullmap.put("空",null); //value数据为nullSystem.out.println(map); //输出全部map集合}
}
//结果:
//{一=2, null=0, One=1, 一一=11, 空=null}
由上程序我们可以发现Map集合有如下特点:
- 使用HashMap定义的Map集合是无序存放的(顺序无用);
- 如果发现了重复的key会进行覆盖,使用新的key内容来替换旧的内容;
- 使用HashMap子类保存数据时key或value可以保存为null。
例:查询操作
package Project.Study.Map.HashMap;import java.util.HashMap;
import java.util.Map;public class Test2 {public static void main(String[]args){Map<String,Integer>map = new HashMap<>(); //定义Map集合map.put("高数成绩",89); //保存数据map.put("英语成绩",78);map.put("离散成绩",96);System.out.println(map.get("高数成绩")); //key存在则返回valueSystem.out.println(map.get("离散成绩"));System.out.println(map.get("英语成绩"));System.out.println(map.get("线代成绩")); //key不存在则返回null}
}
//结果:
//89
//96
//78
//null
由此我们可以发现Map和Colletion的区别,Map接口保存数据主要是为了通过key来进行查询,而Collection接口保存数据的目的则是输出。
Hashtable
Hashtable使用的注意事项:
在使用Hashtable子类实例化的Map集合中,保存的key或value都不允许出现null,否则会出现异常。
例:使用Hashtable
package Project.Study.Map.Hashtable;import java.util.Hashtable;
import java.util.Map;public class Test1 {public static void main(String[]args){Map<String,Integer>map = new Hashtable<>(); //定义Map集合map.put("高数",100);map.put("离散",99);map.put("高数",88);map.put("离散",92);System.out.println(map.get("高数")); //key存在返回valueSystem.out.println(map.get("离散"));System.out.println(map.get("英语")); //key不存在返回null}
}
//结果:
//88
//92
//null
HashMap与Hashtable的区别
No. | 区别点 | HashMap | Hashtable |
---|---|---|---|
1 | 推出时间 | JDK 1.2推出 | JDK 1.0推出 |
2 | 性能 | 采取异步处理 | 采取同步处理 |
3 | 数据安全 | 非线程安全 | 线程安全 |
4 | 设置null | 允许key或value内容为null | 不允许key或value的内容设置为null |
利用Iterator输出Map集合
当使用Map集合保存数据时,所保存的key与value会自动包装为Map.Entry接口对象,也就是说如果利用Iterator进行迭代,那么每当使用next()方法读取数据时返回的都是一个Map.Entry接口对象,此接口定义如下:
public static interface Map.Entry<K,V>{}
通过定义我们可以发现Map.Entry接口属于Map接口定义的一个static内部接口(相当于外部接口)。Map.Entry接口定义的常用方法如下:
No. | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public K getKey() | 普通 | 取得数据中的key |
2 | public V getValue() | 普通 | 取得数据中的value |
3 | public V setValue(V value) | 普通 | 修改数据中的value |
在Map接口中定义了一个entrySet()方法,而实现Iterator输出Map集合的关键就在于此方法的使用上,步骤如下:
- 利用entrySet()方法将Map接口数据中的数据转换为Set接口实例化进行保存,此时Set接口中所使用的泛型类型为Map.Entry,而Map.Entry中的K与V的泛型类型则与Map集合定义的K与V类型相同;
- 利用Set接口中的iterator()方法将集合Set转化为Iterator接口实例;
- 利用Iterator接口进行迭代输出,每一次迭代取得的都是Map.Entry接口实例,利用此接口实例可以进行key与value的分离。
例:利用Iterator实现Map接口的输出
package Project.Study.Map;import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;public class Test1 {public static void main(String[]args){Map<String,Integer>map = new Hashtable<>(); //定义Map集合map.put("高数",98); //保存数据map.put("离散",78);map.put("英语",87);map.put("英语",81); //key数据重复//将Map集合变为Set集合,目的是使用iterator()方法,注意泛型的统一Set<Map.Entry<String,Integer>>set = map.entrySet();Iterator<Map.Entry<String,Integer>>iter = set.iterator();//取得Iterator实例while(iter.hasNext()){ //迭代输出Map.Entry<String,Integer>ma = iter.next(); //取出Map.EntrySystem.out.println(ma.getKey()+"="+ma.getValue()); //输出数据}}
}
//结果:
//英语=81
//离散=78
//高数=98
自定义Map集合的key类型
我们可以使用自定义的类型作为key,而作为key自定义的类必须覆写Object类中的hashCode()与equals()两个方法,因为只有靠这两个方法才能确定元素是否重复。
例:使用自己定义的类作为Map集合的key
package Project.Study.Map;import java.util.HashMap;
import java.util.Map;class Student{ //此类为要保存的key类型private String name; //只定义一个属性public Student(String name){ //构造方法接收数据this.name = name;}@Overridepublic String toString(){return "学生姓名:"+this.name;}@Overridepublic int hashCode(){ //取得对象编码final int prime = 31;int result = 1;result = prime*result+((name==null)?0:name.hashCode());return result;}@Overridepublic boolean equals(Object obj){ //进行对象比较if (this==obj){return true;}if (obj==null){return false;}if (getClass()!=obj.getClass()){return false;}Student other = (Student) obj;if (name==null){if (other.name!=null){return false;}else if (!name.equals(other.name)){return false;}}return true;}
}
public class Test2 {public static void main(String[]args){Map<Student,Integer>map = new HashMap<>(); //实例化Map接口集合map.put(new Student("小泓"),100); //向Map接口保存数据System.out.println(map.get(new Student("小泓"))); //根据key取得value}
}
//结果:
//100
相关文章:

WPF的图片操作效果(一):RenderTransform
一.RenderTransform类的成员: 1.TranslateTransform 平移效果 2.RotateTransform 旋转效果 3.ScaleTransform 缩放效果 4.SkewTransform 扭转效果 5.TransformGroup 组合效果 6.MatrixTransform 是其他几个变形类的基类…

2022-2028年中国大气污染防治产业投资分析及前景预测报告
【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国大气污染防治行业市场行业相关概述、中国大气污染防治行业市场行业运行环境、分析了中国大…

最近做手机端,GPS,微信QQ分享总结的问题
Android端 百度地图: 1.libs包中armeabi下liblocSDK4d.so文件丢失,导致百度定位失效。 微信分享: 1.分享App,app的内容(图片加描述)不能超过32kb ,不然无法分享。(直接跳至Oncancel事件中&#…

cap理论与分布式事务的解决方案
现在很火的微服务架构所设计的系统是分布式系统。分布式系统有一个著名的CAP理论,即一个分布式系统要同时满足一致性(Consistency)、可用性(Availablility)和分区容错(Partition Tolerance)三个…

Blender中的多平面动画学习教程
技能分享–Blender中的多平面动画 Skillshare – Multiplane Animation in Blender 语言:英语中英文字幕(根据原英文字幕机译更准确) 大小解压后:1.34G 含课程素材 信息: 我们将在这堂课中致力于创建一个2D多平面相机效果…

BestCoder Round #68 (div.2) 1002 tree
题意:给你一个图,每条边权值0或1,问每个点周围最近的点有多少个? 思路:并查集找权值为0的点构成的连通块。 1 #include<stdio.h>2 #include<string.h>3 #include<stdlib.h>4 #include<math.h>…

Java学习总结:56(Stack子类)
Stack子类 Stack表示栈操作,栈也是一种动态对象数组,采用的是一种先进后出的数据结构形式,即在栈中最早保存的数据最后才会取出,而最后保存的数据可以最先取出。Stack类的定义如下: public class Stack<E>exte…

2022-2028年中国大理石料行业市场研究及前瞻分析报告
【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国大理石料行业市场行业相关概述、中国大理石料行业市场行业运行环境、分析了中国大理石料行…

ActionScript 3操作XML 详解
AS3引入了E4X ,它是根据ECMAScript标准处理XML 数据的全新机制。这使得程序员在程序中无缝地操作XML。在AS3中可以使用XML字面值将XML数据直接写入代码,该字面值将被自动解析。 一、AS3中的XML入门 1.可以将XML直接写入代码 public var employeelist:XML…

kubernetes关键特性和概述
kubernetes关键特性和概述 https://blog.csdn.net/u014042372/article/details/80573213 posted on 2019-08-16 11:23 竹径风声 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/girl1314/p/11362768.html

Blender创作你自己的动画短片学习教程
Filmmaking with Blender – Create your own animated Short Film 时长:1h 20m |视频:. MP4 1280720,30 fps(r) |音频:AAC,44100 Hz,2ch |大小:1G 语言:英语中英文字幕(根据原英文字幕机译更准确) 在本课…

Java学习总结:57(Properties子类)
Properties子类 Properties类本身是Hashtable的子类,但是由于Properties类都使用String数据类型进行操作,所以在使用Properties类时主要使用本类所定义的方法。Properties类常用方法如下: No.方法类型描述1public Object setProperty(Strin…

openwrt入门
一、安装Ubuntu(在vware安装) 注意使用图形系统 二、安装openwrt开发工具 1.打开命令窗CtrlAltT,切换到root用户:sudo -sH或sudo su,退出root用户:CtrlD或exit 2.切换到root,下载安装组件(apt-get install …

2022-2028年中国大飞机项目产业链分析及投资咨询报告
【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国大飞机项目行业市场行业相关概述、中国大飞机项目行业市场行业运行环境、分析了中国大飞机…

一种可以避免数据迁移的分库分表scale-out扩容方式
原文地址:http://jm-blog.aliapp.com/?p590目前绝大多数应用采取的两种分库分表规则mod方式dayofweek系列日期方式(所有星期1的数据在一个库/表,或所有?月份的数据在一个库表)这两种方式有个本质的特点,就是离散性加周期性。例如…

openstack对比其他有什么优点
openstack对比其他有什么优点 (1)模块松耦合。与其他开源软件相比,OpenStack模块分明。添加独立功能的组件非常简单。有时候,不需要通读整个OpenStack的代码,只需要了解其接口规范及API使用,就可以轻松地添…

C#和Unity编码和游戏开发学习教程
MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz,2 Ch 语言:英语中英文字幕(根据原英文字幕机译更准确) |时长:110节课(26小时25分钟)|大小解压后:18.6 GB 含课程文件 学习C#和Unity编码和游戏开发 The Ultimat…

Linux命令行与命令
Linux命令行与命令 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! Linux的命令是很重要的工具,也往往是初学者最大的瓶颈。有朋友用了很长时间的Linux图形界面,基本不使…

Java学习总结:58(Collections工具类)
Collections工具类 Java提供了一个集合的工具类——Collections,这个工具类可以实现List、Set、Map集合的操作。Collections类的常用方法如下: No.方法类型描述1public static < T > boolean addAll(Collection<? super T> c,T…elements…

2022-2028年中国醋酸行业投资分析及前景预测报告
【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国醋酸行业市场行业相关概述、中国醋酸行业市场行业运行环境、分析了中国醋酸行业市场行业的…

[转] linux系统文件流、文件描述符与进程间关系详解
http://blog.sina.com.cn/s/blog_67b74aea01018ycx.html linux(unix)进程与文件的关系错综复杂,本教程试图详细的阐述这个问题。包括:1、linux多/单进程与多/单文件对于文件流和描述符在使用时的关联情况及一些需要注意的问题。2、…

VMware虚拟机 取消 简易安装
我的VMware更新到12.0版本了,突然有了个简易安装操作系统,不得不承认这个功能很省事,如果没有特殊要求,这样安装虚拟机既快速有稳定。 但是专业人士总是要专门的服务,追求自动化,往往忽略一些细节上的东西。…

UE5蓝图初学课程 Unreal Engine 5: Blueprints for Beginners
时长:6h 51m |视频:. MP4 1280720,30 fps(r) |音频:AAC,44100 Hz,2ch |大小解压后:4.4 GB 语言:英语中英文字幕(根据原英文字幕机译更准确) 没有编码的游戏开发 开发一个高质量的游戏,不需要写…

SQL基础学习总结:1(数据库)
数据库 我们通常将可以将大量数据保存下来,通过计算机加工而成的可以进行高效访问的数据集合称为数据库,简称:DB。 而用来管理数据库的计算机系统则称之为数据库管理系统,简称:DBMS。一般情况下,系统的使用…

MyEclipse安装Freemarker插件
以下是安装Freemarker插件并设置MyEclipse使用该插件的步骤:1、下载Freemarker插件 打开http://sourceforge.net/projects/freemarker-ide/files/ 2、解压,将hudson.freemarker_ide_0.9.14文件夹放入eclipse下的plugins文件夹。 发现hudson.freemarker_…

单例模式为什么使用volatile,以及双重检查&单例模式的一些思考
也就是第一个if(singleton==null),这个是为了代码提高代码执行效率,由于单例模式只要一次创建实例即可,所以当创建了一个实例之后,再次调用getInstance方法就不必要进入同步代码块,不用竞争锁。直接返回前面创建的实例即可。

2022-2028年中国IT外包市场投资分析及前景预测报告
【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国IT外包行业市场行业相关概述、中国IT外包行业市场行业运行环境、分析了中国IT外包行业市场…

iOS,Android,WP, .NET通用AES加密算法
这两天为移动App开发API,结果实现加密验证时碰到一大坑。这里不得不吐槽下又臭又硬的iOS,Windows Server无法解密出正确的结果,Android则可以,后来使用了通用的AES256加密算法才最终搞定。 搞服务器端小伙伴没有接触过iOS…

【Linux】Linux下的硬链接与符号链接
Linux的初学者常常混淆Linux中的硬链接(hard link)与符号链接(symbol link)的概念,分不清楚它们的区别。因此,本文将向读者全面介绍硬链接与符号链接,给予读者以全面的认识。 1.Linux下的文件系…

Unity + SQL数据库创建管理玩家排行榜学习教程
Unity SQL Databases Player Management Leaderboards More! Unity SQL数据库玩家管理排行榜更多! MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz,2 Ch 语言:英语中英文字幕(根据原英文字幕机译更准确&…