Java学习笔记——浅谈数据结构与Java集合框架(第三篇、Map)
桃李春风一杯酒,江湖夜雨十年灯
——寄黄几复
之前图上写错了,是Hashtable类。t是小写的,它是个很古老的类,以至于命名都没有那么规范..
HashMap
HashMap就是存储key-value键值对的集合,是一种映射关系。key中的元素组成了一个Set集合(key无序,不允许重复,可以是null),且任意key中的元素有且只有一个value值与其对应(value值可以是null)
上代码:
public class MapTest { public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
//成对放入
map.put("疯狂Java讲义", );
map.put("疯狂iOS讲义", );
map.put("疯狂Ajax讲义", );
//value可以重复
map.put("轻量级Java EE企业应用实战", );
//key重复时,新的value会覆盖原有的value,并返回被覆盖的value值,输出:10,不重复返回null
System.out.println(map.put("疯狂iOS讲义", ));
//无序的,形式{key =value,key=value,...}
System.out.println(map);
//是否包含指定key,输出:true
System.out.println(map.containsKey("疯狂Java讲义"));
//是否包含指定value,输出:true
System.out.println(map.containsValue());
//获取所有key集合,通过key,value遍历所有
for (String item : map.keySet()) {
System.out.println(item+"--"+map.get(item));
}
//entry遍历
for (Entry<String, Integer> item : map.entrySet()) {
System.out.println(item.getKey()+"--"+item.getValue());
}
map.remove("疯狂Java讲义");
System.out.println(map);
}
}
Java8新增方法:
public class MapTest02 { public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
//成对放入
map.put("疯狂Java讲义", );
map.put("疯狂iOS讲义", );
map.put("疯狂Ajax讲义", );
//尝试替换value值
map.replace("疯狂Java讲义", );
System.out.println(map);
//没有找到key,所以不会替换
map.replace("疯狂Jav讲", );
System.out.println(map);
//使用原value与传入参数计算出来的结果覆盖原value
//该方法调用BiFunction<T, U, R>接口的apply(oldValue, value)方法,该接口为函数式接口(只含有一个抽象方法的接口),可使用lambda表达式
map.merge("疯狂Java讲义", , (oldVal,newVal) -> oldVal/newVal);//Value值为56/23
//key为Java对应的value为null或者key本身为null时使用计算结果作为新value
map.computeIfAbsent("Java", (key) -> ((String)key).length());
//key为Java对应的value为存在时使用计算结果作为新value
map.computeIfPresent("Java",(key,value) -> value*value );//感觉这个lambda表达式没什么用
System.out.println(map);
}
}
Hashtable
Hashtable是一个线程安全的实现,HashMap是线程不安全的。所有HashMap性能比HashTable高一些。但如果多个线程访问同一个Map对象也可以使用Hashtable。
Hashtable不允许使用null作为key值和value值,如果使用,将会引发NullPointerException
判断HashMap和HashTable中key值是否重复的方法和判断HashSet中元素是否重复是一样的:
1、两个key对象equals
2、连个key对象的hashCode相等
判断HashMap和HashTable都有containsValue()方法,判断连个value相等的标准是:
两个对象通过equals方法比较返回true即可
TreeMap
类似TreeSet,TreeMap的key值自然排序
Java学习笔记——浅谈数据结构与Java集合框架(第三篇、Map)的更多相关文章
- Java学习笔记——浅谈数据结构与Java集合框架(第一篇、List)
横看成岭侧成峰,远近高低各不同.不识庐山真面目,只缘身在此山中. --苏轼 这一块儿学的是云里雾里,咱们先从简单的入手.逐渐的拨开迷雾见太阳.本次先做List集合的三个实现类的学习笔记 List特点: ...
- Java学习笔记——浅谈数据结构与Java集合框架(第二篇、Queue、Set)
江南好,何处异京华. 香散翠帘多在水,绿残红叶胜于花.无事避风沙. --<纳兰词> 诗词再好,大图不能忘 上大图: 先说说栈和队列: 栈就好比手枪的弹匣,你往里面压入子弹,最先压入的子弹就 ...
- java设计模式学习笔记--浅谈设计模式
设计模式的目的 编写软件的过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战.设计模式为了让程序具有更好的 1.代码重用性(即:相同功能的代码,不用多次编写) ...
- 疯狂Java学习笔记(84)----------大约 Java 对象序列化,你不知道 5 事
几年前,.当一个软件团队一起用 Java 书面申请.我认识比一般程序猿多知道一点关于 Java 对象序列化的知识所带来的优点. 关于本系列 您认为自己懂 Java 编程?其实,大多数程序猿对于 Jav ...
- 疯狂Java学习笔记(70)-----------挚爱Java
与大家分享! 挚爱Java 10个使用Java最广泛的现实领域 写好Java代码的30条经验总结 Java字符串的substring真的会引起内存泄露么? Java内存的原型及工作原理深度剖析 Jav ...
- Java学习笔记(十六)——Java RMI
[前面的话] 最近过的好舒服,每天过的感觉很充实,一些生活和工作的技巧注意了就会发现,其实生活也是可以过的如此的有滋有味,满足现在的状况,并且感觉很幸福. 学习java RMI的原因是最近在使用dub ...
- 0031 Java学习笔记-梁勇著《Java语言程序设计-基础篇 第十版》英语单词
第01章 计算机.程序和Java概述 CPU(Central Processing Unit) * 中央处理器 Control Unit * 控制单元 arithmetic/logic unit /ə ...
- Java学习笔记(十四)——Java静态工厂
[前面的话] 每天过的还行,对我来说,只要让自己充实,生活就会是好的. 学习Java工场方法的原因是最近在使用Spring框架做一个系统,其中有一个注入的方法是使用静态工场方法注入,所以学习一下,基础 ...
- 零基础学Java之Java学习笔记(一):Java概述
什么是Java? Java是一门面向对象编程语言,可以编写桌面应用程序.Web应用程序.分布式系统和嵌入式系统应用程序. Java特点有哪些? 1.Java语言吸收了C++语言的各种优点,具有功能强大 ...
随机推荐
- The 15th UESTC Programming Contest Preliminary G - GC?(X,Y) cdoj1564
地址:http://acm.uestc.edu.cn/#/problem/show/1564 题目: G - GC?(X,Y) Time Limit: 3000/1000MS (Java/Others ...
- 微信小程序已经开放个人开发者申请了,还不快上车?
前言 就在昨天(3月27号),微信公众号平台推送了文章"小程序新能力",这篇文章是广大开发者的福音.个人开发者可申请小程序!!! 小程序开放个人开发者申请注册,个人用户可访问微信公 ...
- python之smtplib发邮件
第一版: 认证发信,不支持附件 #!/usr/bin/env python # --------------------------------------- # author : Geng Jie ...
- 在VB6/VBA中使用正则表达式
一.关于起因 最近在Office的QQ群里问如何在一串字符串中提取数值并加总的问题.如果使用正则表达式可以非常迅速的解决这个问题. 那么今天我就探讨一下在VB6/VBA中使用正则表达式的方法及代码,另 ...
- Xamarin+Prism开发之.net standard化
前面[Visual Studio 2017创建.net standard类库编译出错原因]已经解决.net standard类库的编译问题,现在可以正式进入主题了.作为.net 跨平台开发者也得跟上时 ...
- PCIE_DMA实例三:Xilinx 7系列(KC705/VC709)FPGA的EDK仿真
一:前言 好久没写博客了,前段时间有个朋友加微信请教关于PCIe的一些学习方法.本人也不是专家,只是略知一些皮毛.对于大家反馈的问题未必能一一解答,但一定知无不言.以后我会常来博客园看看,大家可以把问 ...
- java 基础知识五 数组
java 基础知识五 数组 数组保存的是一组有顺序的.具有相同类型的数据. 同一个数组中所有数据元素的数据类型都是相同的. 可以通过数组下标来访问数组,数据元素根据下标的顺序,在内存中按顺序存放 ...
- Log4j配置文件内容详解
.Log4j的优点 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送地:我们也可以控制每一条日志的输出格式:通过定义每一条日志信息的级别,我们能够更加细致地控 ...
- wow.js中各种特效对应的类名
一.(页面在向下滚动的时候,有些元素会产生细小的动画效果.虽然动画比较小,但却能吸引你的注意.) 刚知道wow.js这个插件,之前访问别的网站下拉滚动条会出现各种效果感觉特别神奇,现在自己依葫芦画瓢也 ...
- 业务订单号生成算法,每秒50W左右,不同机器保证不重复,包含日期可读性好
参考snowflace算法,基本思路: 序列12位(更格式化的输出后,性能损耗导致每毫秒生成不了这么多,所以可以考虑减少这里的位,不过留着也并无影响) 机器位10位 毫秒为左移 22位 上述几个做或运 ...