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. 同一份数据,Redis为什么要存两次?
  2. 随机访问类(RandomAccessFile)
  3. java比go难学_为什么Go比Java快这么多?看完这个例子就懂
  4. 【Network】Neutron-Docker-K8S
  5. MySQL INNER JOIN:内连接查询
  6. POJ-1364 King 差分约束
  7. Linux平台Makefile文件的编写基础篇和GCC参数详解
  8. PS Raw增效工具:Adobe Camera Raw13 for mac
  9. Python 模块安装失败
  10. java 获取jboss路径_java中获取文件路径的几种方式
  11. 第二百九十八节,python操作redis缓存-Set集合类型,可以理解为不能有重复元素的列表...
  12. Objective-C学习之路-由浅入深
  13. python vbscript_VBScript学习笔记
  14. 沉思录(MEDITATIONS)1-12卷
  15. windows7无声音,提示未插入扬声器或耳机的解决办法
  16. java实时监控系统_JavaMonitor
  17. 计算机在英语翻译上的运用,有道如何在网页上翻译一句话,有道网页上的字翻译怎么用...
  18. COCI 2016/2017 Round 4 C dp
  19. 解析服务器消息失败原因,dns域名解析失败的原因是什么?如何解决?
  20. 深度学习项目-图片自动着色

热门文章

  1. 语音识别软件测试面试,软件测试之ASR(语音识别)评测学习
  2. 手动保存刷新微星主板BIOS图解教程
  3. CAD输出pdf显示失真
  4. ACE admin 后台管理框架
  5. mybatis分页插件 pagehelper点击末页跳到第8页
  6. [连接机顶盒]-使用 adb 命令行无线连接 EC6108V9 华为悦盒
  7. 机顶盒改成无线打印服务器,【当贝市场】如何将网络机顶盒改装成无线路由器...
  8. MySQL软件下载安装配置——详细教程
  9. mysql拼接字符串的方式_mysql 字符串拼接,你知道几种方式?
  10. 算法(第四版) 2.1答案