Java的Map(映射)特性及编程思想
目录
Map特性
映射的三种视图的返回方式
遍历键值对集的方法:
Map编程思想
Map遍历方式
使用接口 SortedMap,k>
Class HashMap,v>
Class LinkedHashMap,v>
Class TreeMap,v>
例子:
Map特性
- Map也是集合的一种,由键和值组成——{键:值}。如果熟悉python的人可能就很熟悉了,这不就是python里面的字典吗?json也是这种结构。在Java中这种结构被称为Map映射。
- 在Map中一个键只能对应一个值,一个值却能对应多个键。即键是唯一的不能重复,但是值可以重复——C只能对应一个值3,但是值3能对应键C和键D。对同一个键调用两次put,后面的put会取代前面的值。
- 集合框架不认为映射本身是一个集合,不过可以得到映射视图(view)——这是实现了Collection接口或某个子接口的对象。映射的三种视图:
映射的三种视图的返回方式
Set<K> keySet()
键的集合 Collection<V> valus() 值的集合(不是一个集合) Set<Mep.entry<K,V>> entrySet() 键/集对的集合
遍历键值对集的方法:
for(Map.Entry<String,Employee> entry : staff.entrySet()) {
...
}
曾经最高效的方法 consts.forEach((k,v) -> {
...
})
最高效得方法 先Set<K> keySet() 取得键的集合,再通过键查找值maps.get(key) 最简单得方法
- 集合框架不认为映射本身是一个集合,不过可以得到映射视图(view)——这是实现了Collection接口或某个子接口的对象。映射的三种视图:
Map编程思想
- 由Map的关联性可以得到,Map的键和值有着强关联性。所以我们在需要储存具有强关联性的两个值时就需要用到Map。
- 由于Map的键唯一性,我们就可以储存不可重复的值。例如一个员工对象,员工Id是唯一值,所以就可以通过员工Id对应员工对象建立Map映射{Id:employee};商品数量以及总价格{count:totalPrice}
Map遍历方式
如果我们要返回一个有序的Map集合我们应该如何去获取呢?
使用接口 SortedMap<V,K>
方法 | 作用 |
Comparator<? super K> comparator() | 返回对键进行排序的比较器 |
K firstMap() | 返回映射中最大值 |
K lastKet() | 返回映射中最小值 |
另外还有一些其他的重要实现类:
Class HashMap<K,V> |
HashMap基于哈希表的实现的Map接口。特性: 无序,不重复,无索引。 |
Class LinkedHashMap<K,V> |
HashMap基于哈希表的实现的Map接口。特性: 有序,不重复,无索引。 |
Class TreeMap<K,V> |
TreeMap 基于红黑树实现的高效率Map接口。特性: 排序,不重复,无索引。 |
还有一些实现特殊需求的实现类:
AbstractMap , Attributes , AuthProvider , ConcurrentHashMap , ConcurrentSkipListMap , EnumMap , Hashtable , IdentityHashMap , LinkedHashMap , PrinterStateReasons , Properties , Provider , RenderingHints , SimpleBindings , TabularDataSupport , UIDefaults , WeakHashMap
例子:
public class MapTest {public static void main(String[] args) {Map<String, Integer> maps = new HashMap<>();maps.put("F",90);maps.put("R",90);maps.put("A",90);maps.put("H",90);maps.put("B",34);maps.put("C",3242);maps.put("D",34);maps.put("E",55);System.out.println(maps);//先遍历键,再根据键遍历值Set<String> keys = maps.keySet();for (String key : keys) {int value = maps.get(key);System.out.println(key+":"+value);}/** for(Map.Entry<String,Employee> entry : staff.entrySet()) {** ...** }*/System.out.println("---------------------------------------");for (Map.Entry<String, Integer> stringIntegerEntry : maps.entrySet()) {System.out.println(stringIntegerEntry);}/*maps.forEach((k,v) -> {});*/System.out.println("---------------------------------------");maps.forEach((k,v) -> {System.out.println((k + ":" + v));});System.out.println("---------------------------------------");//转为有序SortedMap<String, Integer> sortedMap = new TreeMap();sortedMap.putAll(maps);System.out.println(sortedMap);} }
运行结果:
{A=90, R=90, B=34, C=3242, D=34, E=55, F=90, H=90}
A:90
R:90
B:34
C:3242
D:34
E:55
F:90
H:90
---------------------------------------
A=90
R=90
B=34
C=3242
D=34
E=55
F=90
H=90
---------------------------------------
A:90
R:90
B:34
C:3242
D:34
E:55
F:90
H:90
---------------------------------------
{A=90, B=34, C=3242, D=34, E=55, F=90, H=90, R=90}Process finished with exit code 0
Java的Map(映射)特性及编程思想相关推荐
- java map映射_【Java】Map 映射接口 概述
Map 映射接口 概述 Map是一个双列数据,存储K-V类型的数据 JDK1.2 - HashMap 是目前Map的主要实现类 JDK1.2 线程不安全的,效率高,可存储null的key和value ...
- java基础—几种for循环编程思想
几种for循环编程思想 public class TextDemos1 {public static void main(String[] args) {// TODO Auto-generated ...
- Java程序员的日常—— 《编程思想》关于类的使用常识
Java虽然利用JVM,让程序员可以放心大胆的使用,可是仍然会出现内存泄露等问题.世上没有绝对的银弹,因此也不能完全把所有的任务都交给JVM,了解Java中的初始化与垃圾回收还是必不可少的知识. 关于 ...
- Java编程思想(第4版)(评注版)
传世经典书丛 Java编程思想(第4版)(评注版) (美)埃克尔(Eckel, B.)著 刘中兵评注 ISBN 978-7-121-13521-7 2011年6月出版 定 价:108.00元 ...
- Android知识架构 · Java的编程思想
1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注这些 ...
- 【java】《java编程思想》 读书笔记
之前主要用的C++的比较多,之前花了快2个月的实际认真系统全面的学习了以下java的基础语法,<java编程思想>这本书翻译水平确实不是很好,很多话读着会比较拗口.推荐读之前,先去网上搜索 ...
- Java编程思想日志
Thinking In Java的作者是大牛!做事要站在巨人的肩膀上有助于提高效率和开阔眼界!建议学习java的小伙伴儿有时间可以抽空了解一下,以下内容为读书笔记,比较杂乱,仅供参考,推荐阅读原著: ...
- java编程思想--概述
之前主要用的C++的比较多,之前花了快2个月的实际认真系统全面的学习了以下java的基础语法,<java编程思想>这本书翻译水平确实不是很好,很多话读着会比较拗口.推荐读之前,先去网上搜索 ...
- Java编程思想第四版学习总结
Java编程思想第四版学习总结 文章目录 Java编程思想第四版学习总结 第 1 章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 实现方案的隐藏 1.4 方案的重复使用 1.5 继承:重 ...
最新文章
- php solr 更新数据类型,Solr更新文档数据
- STM32的IIC应用详解1
- 实至名归!ACM宣布深度学习三巨头共同获得图灵奖
- cordova 发布 android release 签名打包
- 35岁前需要完成的事
- 技术对游戏公司来讲到底有多重要?
- 当你不能回答别人的提问时怎么办
- php多线程实现抓取,php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
- J1939协议之通俗易懂----概述
- Oracle数据库的数据类型
- C语言中除法怎么取得小数
- linux抓包UDP流量
- 发动机冒黑烟_发动机总冒黑烟 用这招解决最快!
- 用Java实现N*N的标准数独及对角线数独解题
- 知识图谱(Knowledge Graph)
- vivado ooc综合
- 30.7.1 通过mysqladmin修改用户密码
- 组合查询条件的合理应用
- mysql约束表达式大全_SQL常用约束语句
- 当贝投影K歌详细教程 只要三步就能打造专属练歌房