Java 映射(Map)和集合(Set) 用法总结
1、定义层面
Map 接口定义映射,存储一组键值对的映射关系。
Set 接口定义集合,存储一组互不相同的元素,该接口继承了 Collection 接口。
2、Map 接口的概念和常用方法
Map 接口存储一组键值对的映射关系,映射中的每个键对应一个值。映射中不能有重复的键,否则会出现一个键对应多个值的情况,这违背了映射的定义。
(1)放置键值对
放置键值对的方法有 put 和 putAll,其中 put 一次放置一个键值对,putAll 一次将另一个映射中的键值对全部添加道当前映射中。在映射中放置键值对时,如果映射中没有对应的键,则在映射中新建一个键值对,否则用新的键值对覆盖原来的相同键的键值对。
(2)删除键值对
删除键值对的方法有 remove 和 clear,其中 remove 删除指定键的键值对,clear 删除当前映射中的全部键值对。
(3)判断包含键或值
判断包含键或值的方法有 containsKey 和 containsValue,其中 containsKey 判断映射中是否包含指定的键,containsValue判断映射中是否包含指定的值。
(4)根据键获得值
根据键获得值得方法有 get,该方法返回映射中指定键的值。
(5)获得键或键值对的集合
获得键或键值对的集合的方法有 entrySet 和 keySet,其中 entrySet 返回映射的所有键值对的集合,keySet 返回映射的所有键的集合。
(6)获得值的容器
获得值的容器的方法有 values,该方法返回映射的所有值的容器。
(7)其他方法
方法 isEmpty 判断当前映射是否为空(即不包含键值对),方法 size 返回映射中的键值对数目。
(8)Map 接口的实现类 HashMap、Hashtable 和 TreeMap
- HashMap 和 Hashtable
HashMap 类是散列映射,通过散列函数计算键对应的存储位置,因此可以快速地完成放置键值对、删除键值对、根据键获得值的操作。
//初始化方法
Map<Character,Integer>change=new HashMap<Character,Integer>(){{put('I',1);put('V',5);put('X',10);put('L',50);put('C',100);put('D',500);put('M',1000);}};
JDK 1.8 之前的 HashMap 的底层通过数组和链表实现,如果出现冲突则通过拉链法解决冲突。JDK 1.8 在解决冲突时的实现有较大变化,当链表长度大于阈值(默认为 8)时,将链表转化为红黑树,以减少搜索时间。
Hashtable 类是散列表,其功能和 HashMap 相似。以下是 HashMap 和 Hashtable 的部分区别。
HashMap 不是线程安全的,Hashtable 的大多数方法用关键字 synchronized 修饰,因此 Hashtable 是线程安全的。在不需要保证线程安全的情况下,HashMap 的效率高于 Hashtable。
HashMap 允许键或值为 null,只能有一个键为 null,可以有一个或多个键对应的值为 null,Hashtable 不允许键或值为 null。
从 JDK 1.8 开始,HashMap 在链表长度大于阈值(默认为 8)时,将链表转化为红黑树以减少搜索时间,Hashtable 没有这样的机制。
- TreeMap
TreeMap 是有序映射,键可以使用 Comparable 接口或 Comparator 接口排序。
TreeMap 的底层实现是红黑树,通过红黑树维护映射的有序性。由于要维护映射的有序性,因此 TreeMap 的各项操作的平均效率低于 HashMap,但是 TreeMap 可以按照顺序获得键值对。
3、Set 接口的定义和常用方法
Set 接口存储一组互不相同的元素,一个集合中不存在两个相等的元素。
Set 接口继承了 Collection 接口,没有引入新的方法或常量,只是规定其实例不能包含相等的元素。
(1)Set 接口的实现类 HashSet 和 TreeSet
- HashSet
HashSet 类是散列集合,其底层实现基于 HashMap。当对象加入散列集合时,需要判断元素是否重复,首先通过方法 hashCode 计算对象的散列码检查是否有对象具有相同的散列码,如果没有相同的散列码则没有重复元素,否则再通过方法 equals 检查是否有相等的对象。
根据散列约定,如果两个对象相同,它们的散列码一定相同,因此如果在子类中重写了 equals 方法,必须在该子类中重写 hashCode 方法,以保证两个相等的对象对应的散列码是相同的。
- TreeSet
TreeSet 类是有序集合,其底层实现基于 TreeMap。和 TreeMap 相似,TreeSet 可以使用 Comparable 接口或 Comparator 接口对元素排序。
Java 映射(Map)和集合(Set) 用法总结相关推荐
- js中数据结构数组Array、映射Map、集合Set、对象、JSON
全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js中数据结构 js中原生自带的数据结构比较简单,主要有数组Array.映射Map.集合Set.我们可以根据这三个基本数据结构实 ...
- java containskey_Java Map containsKey()用法及代码示例
java.util.Map.containsKey()方法用于检查特定键是否已映射到Map中.它使用key元素作为参数,如果该元素在映射中映射,则返回True. 用法: boolean contain ...
- java 遍历map并比较值_Java遍历Map,List的不同方法,并比较其性能
最近在做文本分析相关的实验,统计词频,情感度量许多数据预处理的工作要用到集合类的遍历,借这个机会也好好复习了一下Java中Map,List的用法. 1. Map的遍历 Map这种集合不能直接取出元素, ...
- Java-杂项:Java数组Array和集合List、Set、Map
ylbtech-Java-杂项:Java数组Array和集合List.Set.Map 1.返回顶部 1. 之前一直分不清楚java中的array,list.同时对set,map,list的用法彻底迷糊 ...
- Java中Map用法详解
原文地址http://blog.csdn.net/guomutian911/article/details/45771621 原文地址http://blog.csdn.net/sunny2437885 ...
- Java中Map集合类的用法(HashMap)
Map键值对,键(key)一般存储索引,值(value)一般存储对象. Map的特性即「键-值」(Key-Value)匹配 java.util.HashMap HashMap在内部使用哈希(Hash) ...
- Java当中Map的认识和基本用法
一:Map Map用于保存具有映射关系的数据,Map集合里保存着两组值,一组用于保存Map的ley,另一组保存着Map的value,也就是Map的 键值 和关键值 .具体举例 ,和查字典类似,通过ke ...
- java集合——映射表+专用集合映射表类
[0]README 0.1) 本文描述转自 core java volume 1, 源代码为原创,旨在理解 java集合--映射表+专用集合映射表类 的相关知识: 0.2) for full sour ...
- java 映射数组_Java中的数组,列表,集合,映射,元组,记录文字
java 映射数组 有时,当我对JavaScript的强大功能和表现力感到兴奋时,我发现自己错过了Java世界中的一两个功能. 除了lambda表达式/闭包或任何您想称为"匿名函数" ...
- java基础—Map集合的常见方法操作(java集合八)
Map集合的常见方法操作 Map集合中的元素取出并打印的三种方式 import java.util.Collection; import java.util.HashMap; import java. ...
最新文章
- Android开源项目发布jCenter
- 老话题,不要在遍历容器中增删容器数据
- 记mysqldump导出导入数据库的一个小问题~
- 160个Crackme009
- 说说基于网络的五种IO模型
- java框架实例---自定义标签实例
- php构建的开源的淘宝客cms程序下载地址总结,采集插件小程序等
- Linux教程+操作系统教程 -- 大全
- postgres常用SQL
- Python学习笔记-2017.5.4thon学习笔记-2017.8.16
- 路由器/交换机/服务器的分类
- edge打开pdf不显示印章_教你PDF文档无法在edge中打开怎么解决
- svg 可视化操作_使用SVG和D3可视化浏览指标
- 多CPU 多核CPU | 多进程 多线程 | 并行 并发
- 外部中断----高低电平触发,(边沿触发)上升沿触发和下降沿触发区别
- 苹果电脑虚拟键盘怎么打开
- 4.一起学习Highcharts 配置选项详细说明
- 有道云笔记 协作android版,有道云笔记Android版升级_软件资讯软件快报-中关村在线...
- vs2012 nuget 基础连接已经关闭:发送时发生错误
- 真实感受一下县比省大不包邮,省市区乡镇多级数据重装上阵