/*
Map集合的特点:
Map集合市一个双列集合,一个元素包含两个值:一个key,一个value
Map集合中的元素,key和value的数据类型可以相同,也可以不同
Map集合中的元素,key不允许重复的,value是可以重复的
Map集合中的元素,key和value是一一对应的
*/
/*
HashMap集合特点;
底层是哈希表:查询速度非常块
1.8之前是:数组+单向链表
1.8之后是:数组+单向链表/红黑树(当链表长度超过8):提高查询的速度
hashmap集合是一个无序的集合,存储元素和取出元素的顺序可能不一样
LinkedHashMap集合特点:
底层是哈希表+链表(保证迭代的顺序)
是一个有序的集合,存储元素和取出元素的顺序是一致的
*/

Map接口常用的方法:

/*
V put(K key, V value) 将指定的值与该映射中的指定键相关联(可选操作)。
返回值是 V
存储键值对的时候,key如果不重复,返回v是null
如果重复,会使用新的value替换map中重复的value,并返回被替换的value值 */ public static void show1(){
Map<String,String> map = new HashMap<>(); String v1 = map.put("AAAA","1111");
System.out.println(v1); String v2 = map.put("AAAA","aaaa");
System.out.println(v2);//返回被替换的值 map.put("BBBB","2222");
map.put("CCCC","3333");
map.put("DDDD","3333");
System.out.println(map);
}
    /*
V remove(Object key) 如果存在(从可选的操作),从该地图中删除一个键的映射。
返回值:V
Key存在,返回被删除的值
key不存在,返回null
*/
public static void show2(){
Map<String,Integer> map = new HashMap<>();
map.put("AAA",11);
map.put("BBB",33);
map.put("CCC",22);
map.put("DDD",41);
System.out.println(map);//{AAA=11, CCC=22, BBB=33, DDD=41}
//删除存在的key值
Integer v = map.remove("DDD");
System.out.println(v);//42
System.out.println(map);//{AAA=11, CCC=22, BBB=33}
//删除不存在的key值
Integer v2 = map.remove("EEE");
System.out.println(v2);//null
}
    public static void show3(){
/*
V get(Object key) 根据指定的键,再map集合中获取对应的值
返回值:
key存在,返回对应的value值
不存在,返回null
*/
Map<String,Integer> map = new HashMap<>();
map.put("AAA",11);
map.put("BBB",33);
map.put("CCC",22);
map.put("DDD",41); Integer v1 = map.get("CCC");
System.out.println(v1);//22 Integer v2 = map.get("OOO");
System.out.println(v2);//null
}
    public static void show4(){
/*
boolean containsKey 判断集合是否包含指定的键
包含返回true,不包含返回false
*/
Map<String,Integer> map = new HashMap<>();
map.put("AAA",11);
map.put("BBB",33);
map.put("CCC",22);
map.put("DDD",41); boolean b1 = map.containsKey("AAA");
System.out.println(b1); //true boolean b2 = map.containsKey("OOOO");
System.out.println(b2);//false
}

遍历map集合

/*
map集合的第一中遍历方式,通过键找值得方式
map集合中得方法:
Set<K> keySet() 返回此映射中包含得键得Set视图
实现步骤:
使用Map集合中得方法keySet(),把Map集合所有得key取出,存储到一个Set集合里面
通过遍历Set集合,获取Map集合中得每一个key
通过Map集合中得方法get(key),通过key找到value
*/
public class Demo2 {
public static void main(String[] args) {
Map<String,Integer> map = new HashMap<>();
map.put("AAA",11);
map.put("BBB",33);
map.put("CCC",22);
map.put("DDD",41); Set<String> set = map.keySet();
Iterator<String> it =set.iterator();
while(it.hasNext()){
String key = it.next();
Integer value = map.get(key);
System.out.println(key + "=" + value);
}
System.out.println("###################");
// for (String key:map.keySet())更简洁得做法
for (String key:set){
System.out.println(key + "=" + map.get(key));
}
} }
/*
AAA=11
CCC=22
BBB=33
DDD=41
###################
AAA=11
CCC=22
BBB=33
DDD=41
*/

Entry对象

/*
使用 Entry对象遍历
Set<Map.Entry<K,V>> entrySet() 返回此地图中包含的映射的Set视图。
实验不走:
使用Map集合中得方法,entrySet(),把Map集合中多个Entry对象取出来,存储到Set集合
遍历Set集合,获取每一个Entry对象
使用Entry对象里的getKey getValue获取键值对
*/
public class Demo3 {
public static void main(String[] args) {
Map<String,Integer> map = new HashMap<>();
map.put("AAA",11);
map.put("BBB",33);
map.put("CCC",22);
map.put("DDD",41); Set<Map.Entry<String,Integer>> set = map.entrySet(); Iterator<Map.Entry<String,Integer>> it = set.iterator();
while (it.hasNext()){
Map.Entry<String,Integer> entry = it.next();
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key + "=" + value);
}
}
}
/*
AAA=11
CCC=22
BBB=33
DDD=41 */

HashMap存储自定义类型

/*
Map集合保证key是唯一的:
作为key的元素,必须重写hashCode和quals方法,以保证key唯一 */
public class Demo4 {
public static void main(String[] args) {
show2();
}
//必须重写函数 private static void show2(){
HashMap<Person,String> map = new HashMap<>(); map.put(new Person("AAA",11),"aaa");
map.put(new Person("BBB",13),"bbb");
map.put(new Person("AAA",11),"ddd");
map.put(new Person("CCC",21),"ccc"); System.out.println(map);
// {Person{name='BBB', age=13}=bbb, Person{name='AAA', age=11}=ddd, Person{name='CCC',
age=21}=ccc}
} private static void show1(){
HashMap<String,Person> map = new HashMap<>(); map.put("背景",new Person("AAA",11));
map.put("关东",new Person("BBB",31));
map.put("上海",new Person("CVC",21));
map.put("背景",new Person("CC",21)); // 遍历结合
Set<String> set = map.keySet();
for (String s :set){
Person p = map.get(s);
System.out.println(s + "=" + p);
} }
}

LinkedHashMap集合

/*
map接口的哈希表和连接列表实现,具有可预知的迭代顺序
底层原理:
哈希表+链表(记录元素的顺序)
*/
public class Demo8 {
public static void main(String[] args) {
LinkedHashMap<String,String> map2 = new LinkedHashMap<>();
map2.put("AA","aa");
map2.put("cc","cc");
map2.put("BB","bb");
map2.put("AA","dd");
System.out.println(map2); } }

Hashtable集合

/*
java.util.Hashtable<k,v> 集合 implaments Map<k,v>接口
Hashtable 底层也是一个哈希表,是一个线程安全的集合,是单线程集合,速度慢
HashMap 底层也是一个哈希表,是一个线程不安全的集合,是多线程的结合,速度块 HashMap集合(之前的集合都可以) 可以存储null键值,和null值
Hashtable 不能存储null值,null键 Hashtable 的子类properties很活跃
properties 是唯一一个和I/O流有关的集合
*/
public class Demo11 {
public static void main(String[] args) {
HashMap<String,String> map = new HashMap<>();
map.put("AA",null);
map.put(null,"QQ");
map.put(null,null);
System.out.println(map);//{AA=null, null=null} Hashtable<String,String> table = new Hashtable<>();
table.put(null,"DD");//java.lang.NullPointerException
table.put("EE","ee");
System.out.println(table);
}
}

java-Map集合hei的更多相关文章

  1. Java Map 集合实现类

    Map 用于保存具有映射关系的数据,集合里会保存两组值,一组用于保存Map里的key,一组用于保存Map里的value,key与map可以是任何引用类型数据.Map的key不允许重复.key与valu ...

  2. Java Map集合 遍历 五种方式(包含 Lambda 表达式遍历)

    示例代码如下: package com.miracle.luna.lambda; import java.util.HashMap; import java.util.Iterator; import ...

  3. Java | Map集合

    Map集合 在现实生活中,有非常多的东西,是和另外一种东西对应的,并且还是唯一的,比如:身份证号与个人,个人与手机,一夫一妻...等,这种关系就是对应关系,又叫做映射.Java为这种数据类型提供了专门 ...

  4. java Map集合对比分析

    1.Map:Map是所有map集合的顶级父接口,用于key/value形式的键值对,其中每一个key都映射到一个值,key不能重复. 2.TreeMap:该map将存储的键值对进行默认排序,并且还能够 ...

  5. Java Map集合按照key和value排序之法

    一.理论基点 Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. TreeMap:基于红黑树(Red-Black-Tre ...

  6. Java学习笔记之:Java Map集合

    一.介绍 通常来说,Map是一个由键值对组成的数据结构,且在集合中每个键是唯一的. 二.笔记 /** * Map:接口. 不是collection的子类 key -value 键值对 key唯一不能重 ...

  7. java map集合的知识

    /** * Map用于存储键值对,不允许键重复,值可以重复. * (1)HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度. * H ...

  8. java map集合 --遍历

    1.Map 遍历: Map<Integer, String> map = new HashMap<Integer, String>(); map.put(1, "a& ...

  9. java Map集合学习

    学习语法还是从例子着手: FileDao fileDao=new FileBeanDaoImpl(); FileBean fileBean=new FileBean(); listBean=fileD ...

  10. Java版本:识别Json字符串并分隔成Map集合

    前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...

随机推荐

  1. [题解]第十一届北航程序设计竞赛预赛——D.最大公约数

    题目描述 给一个长度为n(1<=n<=100000)的正整数列,分成尽量多的非空段,使得每一段的最大公约数相等.一个数的最大公约数是它本身. 解题思路 要求每一段子列的gcd相等,不妨设为 ...

  2. WPF中常用控件(TreeView, ComboBox, DataGrid, ListView)使用MVVM模式绑定的demo

    之前几篇关于TreeView的博客中只是贴了源代码,并没有把整个项目上传到github.最近就想着把我常用的几个控件做成一个demo,这样也方便自己以后查看.本人也是WPF新手,但是我并没有打算就往这 ...

  3. Oracle数据库的下载、安装与卸载

    Oracle数据库下载: 这里以Oracle 11g为例,推荐去Oracle官网下载 Oracle官网下载地址:https://www.oracle.com/database/technologies ...

  4. Oracle导出/导入数据方法--两种方法(pde格式/dmp格式)

    转至:https://www.cnblogs.com/houbxblogs/articles/13365557.html?ivk_sa=1024320u 1.导出数据方法一(pde格式) 工具→ 导出 ...

  5. 分布式 PostgreSQL - Citus 架构及概念

    节点 Citus 是一种 PostgreSQL 扩展,它允许数据库服务器(称为节点)在"无共享(shared nothing)"架构中相互协调.这些节点形成一个集群,允许 Post ...

  6. docker学习笔记(1)——ubuntu16.04安装docker(含如何彻底卸载docker,docker拉取镜像失败解决)

    参考博客: 1.官网教程:https://docs.docker.com/engine/install/   根据本机不同的信息选择不同的安装方式:  https://docs.docker.com/ ...

  7. 如何为k8s中的pod配置QoS等级?

    1.概述 本文介绍如何为pod分配特定的QoS等级. 我们知道,在k8s的环境中,通过使用QoS等级来做决定,在资源紧张的时候,将哪些的pod进行驱逐,或者说如何对pod进行调度. OK,话不多说,让 ...

  8. petite-vue源码剖析-优化手段template详解

    什么是<template>元素? <template>是2013年定稿用于提供一种更统一.功能更强大的模板本存放方式.具体表现为 通过<template>元素属性c ...

  9. 36 异常机制 自定义异常 实际应用中的经验总结 尽量添加finally语句块去释放占用的资源

    自定义异常 概念 使用Java内置的异常可以描述在编辑时出现的大部分异常情况.除此之外,用户还可以自定义异常.用户自定义异常类,只需继承Exception类即可. 在程序中使用自定义异常类,大体可分为 ...

  10. BBS项目分布搭建四(点赞点踩及评论功能准备)

    BBS项目分布搭建四(点赞点踩及评论功能) 1. 点赞点踩样式准备 # 在base.html文件中 head标签内 添加css模块: {% block css %} {% endblock %} # ...