桃李春风一杯酒,江湖夜雨十年灯

              ——寄黄几复

之前图上写错了,是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)的更多相关文章

  1. Java学习笔记——浅谈数据结构与Java集合框架(第一篇、List)

    横看成岭侧成峰,远近高低各不同.不识庐山真面目,只缘身在此山中. --苏轼 这一块儿学的是云里雾里,咱们先从简单的入手.逐渐的拨开迷雾见太阳.本次先做List集合的三个实现类的学习笔记 List特点: ...

  2. Java学习笔记——浅谈数据结构与Java集合框架(第二篇、Queue、Set)

    江南好,何处异京华. 香散翠帘多在水,绿残红叶胜于花.无事避风沙. --<纳兰词> 诗词再好,大图不能忘 上大图: 先说说栈和队列: 栈就好比手枪的弹匣,你往里面压入子弹,最先压入的子弹就 ...

  3. java设计模式学习笔记--浅谈设计模式

    设计模式的目的 编写软件的过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战.设计模式为了让程序具有更好的 1.代码重用性(即:相同功能的代码,不用多次编写) ...

  4. 疯狂Java学习笔记(84)----------大约 Java 对象序列化,你不知道 5 事

    几年前,.当一个软件团队一起用 Java 书面申请.我认识比一般程序猿多知道一点关于 Java 对象序列化的知识所带来的优点. 关于本系列 您认为自己懂 Java 编程?其实,大多数程序猿对于 Jav ...

  5. 疯狂Java学习笔记(70)-----------挚爱Java

    与大家分享! 挚爱Java 10个使用Java最广泛的现实领域 写好Java代码的30条经验总结 Java字符串的substring真的会引起内存泄露么? Java内存的原型及工作原理深度剖析 Jav ...

  6. Java学习笔记(十六)——Java RMI

    [前面的话] 最近过的好舒服,每天过的感觉很充实,一些生活和工作的技巧注意了就会发现,其实生活也是可以过的如此的有滋有味,满足现在的状况,并且感觉很幸福. 学习java RMI的原因是最近在使用dub ...

  7. 0031 Java学习笔记-梁勇著《Java语言程序设计-基础篇 第十版》英语单词

    第01章 计算机.程序和Java概述 CPU(Central Processing Unit) * 中央处理器 Control Unit * 控制单元 arithmetic/logic unit /ə ...

  8. Java学习笔记(十四)——Java静态工厂

    [前面的话] 每天过的还行,对我来说,只要让自己充实,生活就会是好的. 学习Java工场方法的原因是最近在使用Spring框架做一个系统,其中有一个注入的方法是使用静态工场方法注入,所以学习一下,基础 ...

  9. 零基础学Java之Java学习笔记(一):Java概述

    什么是Java? Java是一门面向对象编程语言,可以编写桌面应用程序.Web应用程序.分布式系统和嵌入式系统应用程序. Java特点有哪些? 1.Java语言吸收了C++语言的各种优点,具有功能强大 ...

随机推荐

  1. Spring MVC 处理异常的3种方式

    使用Spring MVC开发的博客网站时,遇到了如何处理业务层抛出的异常的问题,查阅到了spring官方博客-spring MVC中异常的处理,以下将会以登录模块为示例. 愚蠢的处理方式 处理异常遵循 ...

  2. CodeFirst的一些操作!!

    CodeFirst的一些操作!! 转载 2016-08-05 21:03:32 1 首先是codefirst怎么做,这个首先肯定要引入EntityFramework,然后在model中创建实体类,例如 ...

  3. MongoDB基础教程系列--第四篇 MongoDB 查询文档

    查询文档 查询文档可以用 find() 方法查询全部文档,可以用 findOne() 查询第一个文档,当然还可以根据 条件操作符 和 $type操作符 查询满足条件的文档. find() 和 find ...

  4. VB6/VBA中跟踪鼠标移出窗体控件事件(类模块成员函数指针CHooker类应用)

    一.关于起因 前几天发了一篇博文,是关于获取VB类模块成员函数指针的内容(http://www.cnblogs.com/alexywt/p/5880993.html):今天我就发一下我的应用实例. V ...

  5. 存储linux RAID6被重建成RAID5的数据恢复解决方案

    数据恢复故障描述:原存储为12块2T硬盘组成的Linux RAID6,文件系统均为EXT3,此存储上划有3个LUN,每个均为6TB大小,某天在RAID失效后,维护人员为了抢救数据,对此失效的存储重进行 ...

  6. 提交到SVN中的项目被删除 且项目名已经被新建项目占用找回方法

    提到项目找回,一看就头疼,找回起来较麻烦.下面就讲一下. 首先,确定项目是否被删除?找项目,太多了,都被找一遍了,还是没找到,看看就头痛,换了个方法,找了个项目的包,xx.apk,反编译下吧,过程略, ...

  7. H5学习的第三周

    上周,我们结束了京东站的制作,本周我们开始了手机站和响应式网站的学习,并仿制了一个手机端界面和一个响应式界面,在完成这两个网站的过程中我遇到了许多问题,也了解了它们的解决方法,接下来我讲详细介绍本周我 ...

  8. 一个web应用的诞生(11)--在探首页

    就要面对本章的一个难点了,说是难点可能仅仅对于我来说,毕竟我是一个js渣,既然首页打算使用动态加载的形式,那么与后台交互的方式就要进行选择,目前比较流行的为RESTful的形式,关于RESTful的文 ...

  9. 回车键搜索 - Enter搜索

    今天写了个 搜索  想来发表发表 <!DOCTYPE html><html lang="en"><head> <meta charset= ...

  10. sizeof 与 strlen

    一.sizeof     sizeof(...)是运算符,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等.    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小.    由 ...