Map(双列集合)

概述

Map集合中存放的是一一对应的键值对的集合,将键映射到值的对象,一个映射不能包含重复的键,但可以有重复的值。每个键只能映射到一个值。

存储特点

1.Collection中的集合,元素是孤立存在的,向集合中存储元素采用一个个元素的方式存储;而Map中的集合,元素是成对存在的,每个元素由键和值两部分组成,通过键可以找到对应的值。

Map常用子类

1.HashMap<K,V>:存储数据采用的是哈希表的结构,元素的存取顺序不能保证一致。因为要保证键的唯一,不重复,所以需要重写键的HashCode()方法,equals()方法。

2.LinkedHashMap<K,V>:是HashMap下的子类,存储结构采用的是哈希表+链表的结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证键的唯一,不重复,需要重写键的hashCode()方法,equals()方法

Map接口中的常用方法

1.put(K key, V value):向Map中添加数据,如果集合中存在指定的key值,则把指定key所对应的Value值替换成新加入的值。返回的是被覆盖的原来的值

2.putAll(Map<? extends K,? extends V> m):向Map中添加另一个Map集合

3.isEmpty():Map中是否包含数据

4.size():Map中包含键值对的个数

5.get(key):根据key获取value

6.clear():清空Map

7.containsKey(key):判断Map中是否包含key

8.containsValue(value):判断Map中是否包含value

9.keySet():返回Map中所有key组成的Set集合

10.values():返回Map中所有value组成的集合(返回值Collection类型)

11.entrySet():返回此映射中包含的映射关系的Set集合

Map遍历

Map集合遍历—键找值方式

1.获取map中所有的键,由于键是唯一的,所以会返回一个Set集合存储所有的键,使用的方法是keySet()

2.遍历键的Set集合,得到每一个键

3.根据键获取对应的值,使用方法get(Key k);

public class test {public static void main(String[] args) {//创建Map集合对象 Map<String, String> map = new HashMap<String,String>();//添加元素到集合 map.put("张三", "33");map.put("历史", "22");map.put("王五","24");//获取所有的键Set<String> keys = map.keySet();// 遍历键获取对应的值for (String key : keys) {//获取对应值String value = map.get(key);System.out.println(key+" "+value+"岁");}  }
}
Map集合遍历Entry键值对方式

Entry键值对对象

1.定义:Map中一组存放两种对象,一种称为键(key),一种称为值(value),他们在Map中是一一对应的关系,这一对对象又称为Map的一个Entry项。Entry将键值对的对应关系封装成了对象,这样我们在遍历Map集合的时候,就可以从每一个键值对对象中获取对应的键和值。

2.获取Map集合中所有Entry对象的方法:
public Set<Map.Entry<K,V>> entrySet();

3.从Entry中获取键和值的方法:
①public K getKey():获取Entry对象中的键

②public V getValue():获取Entry对象中的值

键值对方式遍历集合
1.获取Map集合中,所有的键值对(Entry)对象,以Set集合形式返回。方法使用entrySet()。

2.遍历包含键值对(Entry)对象的Set集合,得到每一个键值对(Entry)对象。

3.通过键值对(Entry)对象,获取Entry对象中的键与值。 方法使用getkey() ,getValue()

public class test {public static void main(String[] args) {// 创建Map集合对象 Map<String, String> map = new HashMap<String,String>();// 添加元素到集合 map.put("张三", "33");map.put("历史", "22");map.put("王五","24");// 获取所有的 entry对象  entrySetSet<Entry<String,String>> entrySet = map.entrySet();// 遍历得到每一个entry对象for (Entry<String, String> entry : entrySet) {// 获取键和值 String key = entry.getKey();String value = entry.getValue();  System.out.println(key+" "+value+"岁");}}
}

注:Map集合不能直接使用迭代器或foreach进行遍历,但是转换成Set之后就可以使用了。

其他子类

Hashtable
是一个比较古老的类,特点是线程安全的,不允许有null键值对,用法和HashMap相同,基本被HashMap替代

HashMap和Hashtable的区别:
hashMap:线程不安全,允许有null键值对
Hashtable:线程安全,不允许有null键值对

TreeMap
特点:会根据key值进行升序排列

LinkedHashMap
是HashMap的一个子类,与HashMap的不同之处在于,具有可预知的迭代顺序,存储键值对的顺序和遍历集合时取出键值对的顺序一致。

Java---Map详解相关推荐

  1. java map详解

    java map详解 Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键对象和一个值对象.其中,键对象不允许重复,而值对象可以重复,并且值对象还可以是 Map 类 ...

  2. java中list和map详解

    java中list和map详解 一.概叙 List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口, List下有ArrayList,Vector,LinkedL ...

  3. java中set和ge什么么意思,java的Collection和Map详解

    java的Collection和Map详解 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中.本文 ...

  4. Java泛型详解-史上讲解最详细的,没有之一

    目录 1. 概述 2. 一个栗子 3. 特性 4. 泛型的使用 4.1 泛型类 4.2 泛型接口 4.3 泛型通配符 4.4 泛型方法 4.4.1 泛型方法的基本用法 4.4.2 类中的泛型方法 4. ...

  5. java 泛型详解、Java中的泛型方法、 java泛型详解

    本文参考java 泛型详解.Java中的泛型方法. java泛型详解 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用. 什么是泛型?为什么要使用泛型? 泛型,即& ...

  6. 最详细的java泛型详解

    来源:最详细的java泛型详解 对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下. 本文参考java 泛型详解.Java中的泛型方法. ja ...

  7. java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一,大厂 HR 如何面试

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 对j ...

  8. Java集合详解6:TreeMap和红黑树

    <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...

  9. 【Java-Java集合】Java集合详解与区别

    [Java-Java集合]Java集合详解与区别 1)概述 2)集合框架图 2.1.总框架图 2.2.Iterable 框架图 2.3.Map 框架图 3)List 3.1.ArrayList 类继承 ...

  10. Java集合排序及java集合类详解

    Java集合排序及java集合类详解 (Collection, List, Set, Map) 摘要内容 集合是Java里面最常用的,也是最重要的一部分.能够用好集合和理解好集合对于做Java程序的开 ...

最新文章

  1. 李子柒爆红:既然做直播能年薪过亿, 为何还要努力高考?
  2. 瘦了!光荣!都是忙工作忙的!
  3. 广西互联网金融平台系列-7条奇怪的投资数据
  4. (转)利用libcurl和国内著名的两个物联网云端通讯的例程, ubuntu和openwrt下调试成功(四)...
  5. wifi分析仪怎么看哪个信道好_游戏工作室用什么路由器好?合理选择组建手机工作室网络...
  6. 【PAT甲级 替换指定字符】1035 Password (20 分) Java版 4/4通过
  7. Java web之web.xml配置详解
  8. SpringBoot+MyBatis搭建迷你小程序
  9. 一个整数转换成字符串(C/C++自己写的算法)
  10. Oracle的 EXEC SQL CONTEXT学习
  11. 一个常见的下拉框(css)
  12. python不会英语不会数学怎么自学-学习Python,数学英语基础很重要吗?
  13. 输入一个十进制数N,将它转换成R进制数输出(运用递归实现)
  14. 摩拜单车的节能黑科技
  15. 对称矩阵 c语言,对称矩阵的判定 C语言 SDUT
  16. .scc文件是做什么用的?
  17. 使用OFBIZ的理由和不使用OFBIZ的理由
  18. html去除图片背景颜色,canvas实现图片背景色去色变透明 » 张鑫旭-鑫空间-鑫生活...
  19. [区块链]区块链技术在殡葬行业的思考
  20. Taro微信小程序实现 美团购物车小红点动画效果

热门文章

  1. 淘宝/天猫获得淘宝商品详情高级版 API 返回值说明
  2. MATLAB小技巧(25)竞争神经网络与SOM神经网络
  3. Java将被取代?大数据让你知道真实的Java应用现况
  4. flv + livego + obs 实现简易直播平台(windows版+Linux版)
  5. npm包本地离线安装
  6. RxJava之过滤操作符
  7. Python面试——基础面试题
  8. rua出300道四则运算题
  9. 【抓包工具】配置:Fiddler 配置手机/平板抓包 https
  10. 网络安全(2) -- 关于一次XSS攻击-图片(img标签)的onerror事件