Java---Map详解
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详解相关推荐
- java map详解
java map详解 Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键对象和一个值对象.其中,键对象不允许重复,而值对象可以重复,并且值对象还可以是 Map 类 ...
- java中list和map详解
java中list和map详解 一.概叙 List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口, List下有ArrayList,Vector,LinkedL ...
- java中set和ge什么么意思,java的Collection和Map详解
java的Collection和Map详解 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构.这些类均在java.util包中.本文 ...
- Java泛型详解-史上讲解最详细的,没有之一
目录 1. 概述 2. 一个栗子 3. 特性 4. 泛型的使用 4.1 泛型类 4.2 泛型接口 4.3 泛型通配符 4.4 泛型方法 4.4.1 泛型方法的基本用法 4.4.2 类中的泛型方法 4. ...
- java 泛型详解、Java中的泛型方法、 java泛型详解
本文参考java 泛型详解.Java中的泛型方法. java泛型详解 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用. 什么是泛型?为什么要使用泛型? 泛型,即& ...
- 最详细的java泛型详解
来源:最详细的java泛型详解 对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下. 本文参考java 泛型详解.Java中的泛型方法. ja ...
- java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一,大厂 HR 如何面试
写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 对j ...
- Java集合详解6:TreeMap和红黑树
<Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...
- 【Java-Java集合】Java集合详解与区别
[Java-Java集合]Java集合详解与区别 1)概述 2)集合框架图 2.1.总框架图 2.2.Iterable 框架图 2.3.Map 框架图 3)List 3.1.ArrayList 类继承 ...
- Java集合排序及java集合类详解
Java集合排序及java集合类详解 (Collection, List, Set, Map) 摘要内容 集合是Java里面最常用的,也是最重要的一部分.能够用好集合和理解好集合对于做Java程序的开 ...
最新文章
- 李子柒爆红:既然做直播能年薪过亿, 为何还要努力高考?
- 瘦了!光荣!都是忙工作忙的!
- 广西互联网金融平台系列-7条奇怪的投资数据
- (转)利用libcurl和国内著名的两个物联网云端通讯的例程, ubuntu和openwrt下调试成功(四)...
- wifi分析仪怎么看哪个信道好_游戏工作室用什么路由器好?合理选择组建手机工作室网络...
- 【PAT甲级 替换指定字符】1035 Password (20 分) Java版 4/4通过
- Java web之web.xml配置详解
- SpringBoot+MyBatis搭建迷你小程序
- 一个整数转换成字符串(C/C++自己写的算法)
- Oracle的 EXEC SQL CONTEXT学习
- 一个常见的下拉框(css)
- python不会英语不会数学怎么自学-学习Python,数学英语基础很重要吗?
- 输入一个十进制数N,将它转换成R进制数输出(运用递归实现)
- 摩拜单车的节能黑科技
- 对称矩阵 c语言,对称矩阵的判定 C语言 SDUT
- .scc文件是做什么用的?
- 使用OFBIZ的理由和不使用OFBIZ的理由
- html去除图片背景颜色,canvas实现图片背景色去色变透明 » 张鑫旭-鑫空间-鑫生活...
- [区块链]区块链技术在殡葬行业的思考
- Taro微信小程序实现 美团购物车小红点动画效果