文章目录

现在已经是深夜十二点了,才复习完Map部分的内容,打算将自己今天所学的再做一次巩固,毕竟这一次是我打算给自己留的最后一次机会了,不管以后的路是平坦,是坎坷,我只需要做到无悔于自己的决定。


文章目录

  • 文章目录
  • 前言
  • 一、认识Map集合
    • (1)、Map集合的说明
    • (2)、Map的结构图
  • 二、走进集合
    • (1)、HashMap的认识与使用
    • (2)、LinkedHashMap的使用
    • (3)、HashTable的认识与使用
    • (4)、Properties的使用
    • (5)、HashMap vs LinkedHashMap vs Hashtable vs ConcurrentHashMap作比较
  • 总结

前言

话不多说,开始干。


提示:以下是本篇文章正文内容,下面案例可供参考

一、认识Map集合

(1)、Map集合的说明

在前面我已经解释过集合大家族的另一位成员(Collection),今天来对比着讲解一下本次的主角Map集合,前面说到 Collection集合 其存储特点是存入的是单个的引用类数据,在进行数据的查询的时候可以通过其对应的下标来查询,存储的方式是有序的,而这次的Map集合存入的确实有着映射关系的“键值对”数据,所谓“键值对(key–values)”,一个键(key) 对应着一个值(values),键与值之间的关系是 一 一对应的 ,即 一个键对应着一个值,可以在遍历的时候通过键的查询来锁定需要获取的值。此外存储的方式是无序的

(2)、Map的结构图

今天的主要内容就是以上已经展示出来的,我会尽自己的最大能力来进行解读,其中尽量通过案例来进行解读,还会将部分面试题公布出来,由于集合非常重要,应聘的时候百分之七十的面试题都是和集合有关的。

二、走进集合

(1)、HashMap的认识与使用

对于HashMap而言,最主要的是要先了解他的结构,存储数据的特点(以键值对的方式进行存储),然后了解一下它的基本操作与遍历方式,我将常用的部分以案例的形式发布出来了,写了有点久,主要是上课的笔记有点小混乱。

package net.yzy.homework.homework13.hashmap_class;import java.util.Collection;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;/*** 知识点:HashMap的方法使用** 总结:*     HashMap key是唯一的,value可以重复*   HashMap 存储键值对、无序的*/
public class Test01 {public static void main(String[] args) {HashMap<String,Integer> map=new HashMap<>();//创建一个HashMap//添加元素map.put("盖伦",27);map.put("赵信",21);map.put("嘉文",21);map.put("拉克丝",22);map.put("伊泽瑞尔",23);System.out.println("-------------------------------------");Integer put=map.put("塔里克",25);System.out.println(put);//第一次添加key,返回null//清空集合//map.clear();System.out.println("判断在集合中是否有某个key:"+map.containsKey("盖伦"));//trueSystem.out.println("判断此集合中是否有某个value:"+map.containsValue(25));//trueSystem.out.println("-------------------------------------");System.out.println("通过key获取对应的value");System.out.println("通过key获取对应的value值:"+map.get("赵信"));System.out.println("通过key获取对应的value值:"+map.getOrDefault("雍仲杨",888));//如果没有该对象则返回默认值888System.out.println("判断集合中是否没有元素:"+map.isEmpty());//falseSystem.out.println("-------------------------------------");System.out.println("将新集合中的所有元素添加到map集合中操作:");//创建HashMap集合HashMap<String,Integer> newMap1=new HashMap<>();newMap1.put("卢锡安",21);newMap1.put("赛娜",20);newMap1.put("雷恩加尔",30);map.putAll(newMap1);//将新集合添加到map集合中去System.out.println("-------------------------------------");System.out.println("添加元素操作");/*** 如果有 该 key就不添加,返回集合中的value* 如果 没有 ,就添加 k-v*/Integer putIfAbsent=map.putIfAbsent("奥拉夫",123);System.out.println(putIfAbsent);//null,说明之前的集合中是没有的System.out.println("-------------------------------------");System.out.println("删除操作:");map.remove("赛娜");//通过key来删除映射关系map.remove("卢锡安",21);//通过key + value来删除System.out.println("-------------------------------------");System.out.println("替换操作:");Integer replace=map.replace("雷恩加尔",50);//通过key来替换valueSystem.out.println("返回替换前的value值:"+replace);System.out.println("替换后的值:"+map.get("雷恩加尔"));//替换后的值map.replace("雷恩加尔",50,100);//通过key+value的值来替换System.out.println("-------------------------------------");System.out.println("替换操作:");Integer put2=map.put("雷恩加尔",50);//添加元素,如果有相同的key,就替换value,并返回旧值System.out.println("替换前的值:"+put2);//返回替换之前的值 100System.out.println(map.get("雷恩加尔"));//50,返回新值System.out.println("-------------------------------------");System.out.println("返回集合中的映射个数:");System.out.println("集合中映射个数为:"+map.size());System.out.println("-------------------------------------");System.out.println("获取所有的value值的操作:");Collection<Integer> values=map.values();//将所有的值存入到Collection集合中System.out.println(values);System.out.println("-------------------------------------");System.out.println("遍历方法1---keySet()");//遍历思路:把HashMap中所有的key抽取出存放在Set集合中,遍历Set集合依次取出Key,就能依次取出对应的valueSet<String> keySet=map.keySet();//取出所有的key存放在keySet中for (String a:keySet) {Integer value=map.get(a);System.out.println(a+"---"+value);}System.out.println("-------------------------------------");System.out.println("遍历方法2--entrySet()");//遍历思路:把HashMap中所有的映射关系(Entry)抽取出存放在Set集合中,// 遍历Set集合依次取出映射关系(Entry),就能获取映射关系中的key和valueSet<Entry<String,Integer>> entrySet=map.entrySet();for (Entry<String,Integer>a:entrySet) {String key=a.getKey();//获取每一个键Integer value=a.getValue();//获取每一个值System.out.println(key+"---"+value);}System.out.println("------------基本操作如上---------------");}
}

以上就是对于HashMap的一些基本操作。比较简单,虽然我是以案例的形式进行展示,但是该有的操作都有,而且是我一点一点从API上查完后才补充的,其中加了一些自己的解释。

(2)、LinkedHashMap的使用

LinkedHashMap的使用与 HashMap的使用差不多,毕竟是有着继承关系的,区别在于HashMap 是一个散列表,它存储的内容是键值对(key-value)映射,LinkedHashMap是HashMap的子类,但是内部还有一个双向链表维护键值对的顺序,每个键值对既位于哈希表中,也位于双向链表中。LinkedHashMap支持两种顺序插入顺序 、 访问顺序

package net.yzy.homework.homework13.linkedhashmap_class;import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map.Entry;
import java.util.Set;/*** 知识点:LinkedHashMap的方法使用* <p>* 总结:* LinkedHashMap key是唯一的,value可以重复* LinkedHashMap 存储键值对、有序的*/public class Test01 {public static void main(String[] args) {LinkedHashMap<String, Integer> map = new LinkedHashMap<>();//添加元素map.put("盖伦", 27);map.put("赵信", 21);map.put("嘉文", 21);map.put("拉克丝", 22);map.put("伊泽瑞尔", 23);System.out.println("-------------------------------------");Integer put = map.put("塔里克", 25);System.out.println(put);//第一次添加key,返回null//清空集合//map.clear();System.out.println("判断在集合中是否有某个key:" + map.containsKey("盖伦"));//trueSystem.out.println("判断此集合中是否有某个value:" + map.containsValue(25));//trueSystem.out.println("-------------------------------------");System.out.println("通过key获取对应的value");System.out.println("通过key获取对应的value值:" + map.get("赵信"));System.out.println("通过key获取对应的value值:" + map.getOrDefault("雍仲杨", 888));//如果没有该对象则返回默认值888System.out.println("判断集合中是否没有元素:" + map.isEmpty());//falseSystem.out.println("-------------------------------------");System.out.println("将新集合中的所有元素添加到map集合中操作:");//创建HashMap集合LinkedHashMap<String, Integer> newMap1 = new LinkedHashMap<>();newMap1.put("卢锡安", 21);newMap1.put("赛娜", 20);newMap1.put("雷恩加尔", 30);map.putAll(newMap1);//将新集合添加到map集合中去System.out.println("-------------------------------------");System.out.println("添加元素操作");/*** 如果有 该 key就不添加,返回集合中的value* 如果 没有 ,就添加 k-v*/Integer putIfAbsent = map.putIfAbsent("奥拉夫", 123);System.out.println(putIfAbsent);//null,说明之前的集合中是没有的System.out.println("-------------------------------------");System.out.println("删除操作:");map.remove("赛娜");//通过key来删除映射关系map.remove("卢锡安", 21);//通过key + value来删除System.out.println("-------------------------------------");System.out.println("替换操作:");Integer replace = map.replace("雷恩加尔", 50);//通过key来替换valueSystem.out.println("返回替换前的value值:" + replace);System.out.println("替换后的值:" + map.get("雷恩加尔"));//替换后的值map.replace("雷恩加尔", 50, 100);//通过key+value的值来替换System.out.println("-------------------------------------");System.out.println("替换操作:");Integer put2 = map.put("雷恩加尔", 50);//添加元素,如果有相同的key,就替换value,并返回旧值System.out.println("替换前的值:" + put2);//返回替换之前的值 100System.out.println(map.get("雷恩加尔"));//50,返回新值System.out.println("-------------------------------------");System.out.println("返回集合中的映射个数:");System.out.println("集合中映射个数为:" + map.size());System.out.println("-------------------------------------");System.out.println("获取所有的value值的操作:");Collection<Integer> values = map.values();//将所有的值存入到Collection集合中System.out.println(values);System.out.println("-------------------------------------");System.out.println("遍历方法1---keySet()");//遍历思路:把HashMap中所有的key抽取出存放在Set集合中,遍历Set集合依次取出Key,就能依次取出对应的valueSet<String> keySet = map.keySet();//取出所有的key存放在keySet中for (String a : keySet) {Integer value = map.get(a);System.out.println(a + "---" + value);}System.out.println("-------------------------------------");System.out.println("遍历方法2--entrySet()");//遍历思路:把HashMap中所有的映射关系(Entry)抽取出存放在Set集合中,// 遍历Set集合依次取出映射关系(Entry),就能获取映射关系中的key和valueSet<Entry<String, Integer>> entrySet = map.entrySet();for (Entry<String, Integer> a : entrySet) {String key = a.getKey();//获取每一个键Integer value = a.getValue();//获取每一个值System.out.println(key + "---" + value);}}
}

(3)、HashTable的认识与使用

认识:相比较于HashMap,HashTable的运行效率更慢,线程安全,不允许null作为键或者值,其余的基本操作与前面的一样,没什么变化,都是Map的实现类

package net.yzy.homework.homework13.Hashtable;import java.util.Collection;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map.Entry;
import java.util.Set;public class Test01 {public static void main(String[] args) {Hashtable<String, Integer> map = new Hashtable<>();map.put("盖伦",27);map.put("赵信",21);map.put("嘉文",21);map.put("拉克丝",22);map.put("伊泽瑞尔",23);System.out.println("-------------------------------------");Integer put=map.put("塔里克",25);System.out.println(put);//第一次添加key,返回null//清空集合//map.clear();System.out.println("判断在集合中是否有某个key:"+map.containsKey("盖伦"));//trueSystem.out.println("判断此集合中是否有某个value:"+map.containsValue(25));//trueSystem.out.println("-------------------------------------");System.out.println("通过key获取对应的value");System.out.println("通过key获取对应的value值:"+map.get("赵信"));System.out.println("通过key获取对应的value值:"+map.getOrDefault("雍仲杨",888));//如果没有该对象则返回默认值888System.out.println("判断集合中是否没有元素:"+map.isEmpty());//falseSystem.out.println("-------------------------------------");System.out.println("将新集合中的所有元素添加到map集合中操作:");//创建HashMap集合HashMap<String,Integer> newMap1=new HashMap<>();newMap1.put("卢锡安",21);newMap1.put("赛娜",20);newMap1.put("雷恩加尔",30);map.putAll(newMap1);//将新集合添加到map集合中去System.out.println("-------------------------------------");System.out.println("添加元素操作");/*** 如果有 该 key就不添加,返回集合中的value* 如果 没有 ,就添加 k-v*/Integer putIfAbsent=map.putIfAbsent("奥拉夫",123);System.out.println(putIfAbsent);//null,说明之前的集合中是没有的System.out.println("-------------------------------------");System.out.println("删除操作:");map.remove("赛娜");//通过key来删除映射关系map.remove("卢锡安",21);//通过key + value来删除System.out.println("-------------------------------------");System.out.println("替换操作:");Integer replace=map.replace("雷恩加尔",50);//通过key来替换valueSystem.out.println("返回替换前的value值:"+replace);System.out.println("替换后的值:"+map.get("雷恩加尔"));//替换后的值map.replace("雷恩加尔",50,100);//通过key+value的值来替换System.out.println("-------------------------------------");System.out.println("替换操作:");Integer put2=map.put("雷恩加尔",50);//添加元素,如果有相同的key,就替换value,并返回旧值System.out.println("替换前的值:"+put2);//返回替换之前的值 100System.out.println(map.get("雷恩加尔"));//50,返回新值System.out.println("-------------------------------------");System.out.println("返回集合中的映射个数:");System.out.println("集合中映射个数为:"+map.size());System.out.println("-------------------------------------");System.out.println("获取所有的value值的操作:");Collection<Integer> values=map.values();//将所有的值存入到Collection集合中System.out.println(values);System.out.println("-------------------------------------");System.out.println("遍历方法1---keySet()");//遍历思路:把HashMap中所有的key抽取出存放在Set集合中,遍历Set集合依次取出Key,就能依次取出对应的valueSet<String> keySet=map.keySet();//取出所有的key存放在keySet中for (String a:keySet) {Integer value=map.get(a);System.out.println(a+"---"+value);}System.out.println("-------------------------------------");System.out.println("遍历方法2--entrySet()");//遍历思路:把HashMap中所有的映射关系(Entry)抽取出存放在Set集合中,// 遍历Set集合依次取出映射关系(Entry),就能获取映射关系中的key和valueSet<Entry<String,Integer>> entrySet=map.entrySet();for (Entry<String,Integer>a:entrySet) {String key=a.getKey();//获取每一个键Integer value=a.getValue();//获取每一个值System.out.println(key+"---"+value);}System.out.println("-------------------------------------");System.out.println("-------------------------------------");System.out.println("-------------------------------------");}
}

(4)、Properties的使用

Properties的使用是非常简单的,主要用于在以后的信息系统开发的时候作为数据文件来传递值的时候来使用

首先,在src文件目录下创建 以.properties结尾的文件 里面写上 数据库的用户与用户密码

(5)、HashMap vs LinkedHashMap vs Hashtable vs ConcurrentHashMap作比较

特点:调用方法都是一样的,都继承与Map类
区别:
HashMap:存储键值对,无序,允许存null键,线程不安全
LinkedHashMap:存储键值对,有序,允许存null键,线程不安全
Hashtable:存储键值对,无序,不允许存null键,线程安全(直接在方法中上锁,效率低),已弃用
ConcurrentHashMap:存储键值对,无序,不允许存null键,线程安全(局部加锁,效率高)

package com.dream.concurrenthashmap_class;import java.util.HashMap;
import java.util.Hashtable;
import java.util.LinkedHashMap;
import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;public class Test02 {public static void main(String[] args) {ConcurrentHashMap<Object, Object> map = new ConcurrentHashMap<>();map.put(null, "xx");Set<Entry<Object,Object>> entrySet = map.entrySet();for (Entry<Object, Object> entry : entrySet) {System.out.println(entry.getKey() + " -- " + entry.getValue());}}}

总结

以上就是今天要讲的内容,本文仅仅简单介绍了常用的Map接口下的子类的使用方法,明天我们将进入到底层代码的学习,属于难度较大的内容模块

JavaSE——基础知识回顾14之集合(下半部分Map)相关推荐

  1. JavaSE——基础知识回顾13之集合(上半部分Collection部分)

    文章目录 本次文章就要开始真正进入到Java的核心部分了,集合是属于较难的部分,不仅难在不好理解,还有运用上,再加上这个东西的内容十分的多,体系也十分的庞大,需要花一段时间乃至更久来仔细学习,目前我会 ...

  2. JavaSE基础知识回顾

    文章目录 JavaSE 一.前言 1.1.解决大家的疑惑 1.2.Java和Python的抉择 1.3.走进Java 二.预科 2.1.学习准备:博客 2.2.MarkDown 2.3.基本Dos命令 ...

  3. JavaSE——基础知识回顾18之网络编程部分

    文章目录 文章目录 文章目录 前言 一.什么是网络编程 (1)计算机网络 (2)网络编程 (3) 网络三要素与三大协议 3.1网络三要素 3.2网络三大协议 (3)套接字"Socket&qu ...

  4. java知识点博客园_JAVA基础知识回顾

    JAVA基础知识回顾 一.背景介绍 JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版) JavaEE(J2EE)(Java 2 Platfo ...

  5. 【JavaSE 基础知识盲点小结】

    [JavaSE 基础知识盲点小结] 一.第一天: 1. 在 cmd 命令窗口问题: ①编译是: javac HelloWorld.java ②运行时是: java HelloWorld (类名 不加 ...

  6. Java基础知识回顾之七 ----- 总结篇

    前言 在之前Java基础知识回顾中,我们回顾了基础数据类型.修饰符和String.三大特性.集合.多线程和IO.本篇文章则对之前学过的知识进行总结.除了简单的复习之外,还会增加一些相应的理解. 基础数 ...

  7. c# 找出目录下的所有子目录_C# 基础知识系列- 14 IO篇 文件的操作(2)

    前接上一篇内容. 如果是第一次捧场的小伙伴,为了您阅读的连贯性,烦请扫一眼<C# 基础知识系列- 14 IO篇 文件的操作(1)>.本篇是IO之文件操作的第二篇,介绍一下目录和路径的相关类 ...

  8. 【Java基础知识回顾篇】之打怪升级Day001

    Java基础知识回顾篇之打怪升级Day001 目录 Java基础知识回顾篇之打怪升级Day001 简介 一.为什么现在主流的是Java8和Java11? 二.简单尝试编写java程序 1.编写一个He ...

  9. php基础知识总结大全,php基础知识回顾 —— 常量

    您现在的位置是:网站首页>>PHP>>php php基础知识回顾 -- 常量 发布时间:2019-01-23 17:23:08作者:wangjian浏览量:489点赞量:0 在 ...

最新文章

  1. String、toString、String.valueOf()三个有啥区别?
  2. 大头贴计算机教程,美颜相机大头贴在哪里 教你怎么弄动漫大头贴
  3. 其他的AdapterView——Gallery
  4. Python基础概念_8_字符串处理
  5. html5tab页高德地图,高德地图系列web篇——目的地公交导航
  6. ie运行不了java脚本界面_IE浏览器不能运行js JS代码失效不能运行了如何解决
  7. (14)Python_SimpleImputer缺失值处理
  8. 黑客帝国之酷炫屏保数字雨
  9. 视频监控安防平台-GB35114和GB28181的注册信令
  10. PS换证件照底色,完美扣除头发丝并调整优化边缘
  11. 浅析贴片电感的作用及使用原理
  12. [转]使用CSS和JQuery,模拟超链接点击 原文:http://www.cnblogs.com/return8023/archive/2012/05/19/2509177.html...
  13. 用python创建topo常见问题
  14. jQuery Mobile 列表视图
  15. Java关键字详解this、private、static、super、extends继承、instanceof、final、abstract、interface、implements、enum...
  16. 计算机excel操作教程,Excel操作教程 -电脑资料
  17. 什么叫做展望_展望未来的含义是什么?
  18. 如何才能做好一个软件系统?
  19. 计算机网络知识点总结之物理层(二)
  20. 数学在c语言编程中的历史,用计算机C语言编程解古代数学题

热门文章

  1. intellij IDEA配置php环境
  2. Cmake的安装与使用
  3. SocialBook帮你扫清网红KOL营销的“雷区”
  4. mqtt paho java_Java MQTT 客户端之 Paho
  5. 解决C#提示导入密钥文件失败的问题
  6. linux安装vnc服务
  7. Golang多重指针
  8. Next.js读取本地文件
  9. SQL Server安装与使用(破解版)
  10. 算法系列——颜色分类(Sort Colors)