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) 用法总结相关推荐

  1. js中数据结构数组Array、映射Map、集合Set、对象、JSON

    全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js中数据结构 js中原生自带的数据结构比较简单,主要有数组Array.映射Map.集合Set.我们可以根据这三个基本数据结构实 ...

  2. java containskey_Java Map containsKey()用法及代码示例

    java.util.Map.containsKey()方法用于检查特定键是否已映射到Map中.它使用key元素作为参数,如果该元素在映射中映射,则返回True. 用法: boolean contain ...

  3. java 遍历map并比较值_Java遍历Map,List的不同方法,并比较其性能

    最近在做文本分析相关的实验,统计词频,情感度量许多数据预处理的工作要用到集合类的遍历,借这个机会也好好复习了一下Java中Map,List的用法. 1. Map的遍历 Map这种集合不能直接取出元素, ...

  4. Java-杂项:Java数组Array和集合List、Set、Map

    ylbtech-Java-杂项:Java数组Array和集合List.Set.Map 1.返回顶部 1. 之前一直分不清楚java中的array,list.同时对set,map,list的用法彻底迷糊 ...

  5. Java中Map用法详解

    原文地址http://blog.csdn.net/guomutian911/article/details/45771621 原文地址http://blog.csdn.net/sunny2437885 ...

  6. Java中Map集合类的用法(HashMap)

    Map键值对,键(key)一般存储索引,值(value)一般存储对象. Map的特性即「键-值」(Key-Value)匹配 java.util.HashMap HashMap在内部使用哈希(Hash) ...

  7. Java当中Map的认识和基本用法

    一:Map Map用于保存具有映射关系的数据,Map集合里保存着两组值,一组用于保存Map的ley,另一组保存着Map的value,也就是Map的 键值 和关键值 .具体举例 ,和查字典类似,通过ke ...

  8. java集合——映射表+专用集合映射表类

    [0]README 0.1) 本文描述转自 core java volume 1, 源代码为原创,旨在理解 java集合--映射表+专用集合映射表类 的相关知识: 0.2) for full sour ...

  9. java 映射数组_Java中的数组,列表,集合,映射,元组,记录文字

    java 映射数组 有时,当我对JavaScript的强大功能和表现力感到兴奋时,我发现自己错过了Java世界中的一两个功能. 除了lambda表达式/闭包或任何您想称为"匿名函数" ...

  10. java基础—Map集合的常见方法操作(java集合八)

    Map集合的常见方法操作 Map集合中的元素取出并打印的三种方式 import java.util.Collection; import java.util.HashMap; import java. ...

最新文章

  1. Android开源项目发布jCenter
  2. 老话题,不要在遍历容器中增删容器数据
  3. 记mysqldump导出导入数据库的一个小问题~
  4. 160个Crackme009
  5. 说说基于网络的五种IO模型
  6. java框架实例---自定义标签实例
  7. php构建的开源的淘宝客cms程序下载地址总结,采集插件小程序等
  8. Linux教程+操作系统教程 -- 大全
  9. postgres常用SQL
  10. Python学习笔记-2017.5.4thon学习笔记-2017.8.16
  11. 路由器/交换机/服务器的分类
  12. edge打开pdf不显示印章_教你PDF文档无法在edge中打开怎么解决
  13. svg 可视化操作_使用SVG和D3可视化浏览指标
  14. 多CPU 多核CPU | 多进程 多线程 | 并行 并发
  15. 外部中断----高低电平触发,(边沿触发)上升沿触发和下降沿触发区别
  16. 苹果电脑虚拟键盘怎么打开
  17. 4.一起学习Highcharts 配置选项详细说明
  18. 有道云笔记 协作android版,有道云笔记Android版升级_软件资讯软件快报-中关村在线...
  19. vs2012 nuget 基础连接已经关闭:发送时发生错误
  20. 真实感受一下县比省大不包邮,省市区乡镇多级数据重装上阵

热门文章

  1. java基于springboot的毕业生简历模板分享管理系统
  2. Office2016+Visio2016安装过程
  3. 快速了解安卓四大组件
  4. Golang优化之内存对齐
  5. vc2013 开发 winusb 简单测试程序 基于 nu_bridge
  6. 微信公众平台基础开发--禾今微信投票系统
  7. 3dmm计算特征向量,c++读写txt和二进制记录
  8. 微信公众号发送模板消息 -- PHP后台
  9. 大数据集群安装02之Hadoop配置
  10. Faster R-CNN算法详细流程