/*
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. 金融行业BI可视化报表,直观体验数据的价值

    现在,数据已成为非常重要的资产.之前,人们只是把它当作一种附属品,由客户来办理业务,在系统中产生了这样的附属品.但如今,发现在客户办理业务这一信息中,蕴藏着一些客户的需求,积聚成千条这种信息,可以洞察 ...

  2. 【计算机基础】IL代码-CLR平台上的字节码【什么是字节码?它与虚拟机的关系?】

    字节码(英语:Bytecode)将虚拟机可以读懂的代码称之为字节码.将源码编译成虚拟机读的懂的代码,需要虚拟机转译后才能成为机器代码的中间代码 叫做字节码. 字节码主要为了实现特定软件运行和软件环境. ...

  3. 关于linux下,ls vi等命令失效的解决方法(配置下环境变量出现问题)

    转至:https://www.cnblogs.com/afeiiii/p/13824530.html 配置完环境变量source之后,linux的ls vi命令均失效,报错如下: 解决方法 1.输入  ...

  4. jq获取不包含某些属性的元素

    最近写项目,有个功能实现checkbox全选,但是被禁用的checkbox不能选中 点击全选后发现禁用checkbox的也被选中了,不符合需求. 但是想了半天,属性选择器都是判断某个属性值的,没有判断 ...

  5. 03-Eureka注册中心

    1.介绍 2.快速开始 2.1 pom文件依赖 <?xml version="1.0" encoding="UTF-8"?> <project ...

  6. LeetCode-033-搜索旋转排序数组

    搜索旋转排序数组 题目描述:整数数组 nums 按升序排列,数组中的值 互不相同 . 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行 ...

  7. SETTLE约束算法的批量化处理

    技术背景 在上一篇文章中,我们介绍了在分子动力学模拟中SETTLE约束算法的实现与应用,其中更多的是针对于单个的水分子.但由于相关代码是通过jax这一框架来实现的,因此对于多分子的体系,可以采用jax ...

  8. 云e办笔记(删减)

    1JwtTokenUtils工具 2公共返回对象 3Admin实现UserDetails 4AdminLoginParam 5AdminLoginController 6SecurityConfig ...

  9. php jsonp接口

    //jsonp回调 $callback = isset($_GET['callback']) ? trim($_GET['callback']) : ''; //jsonp回调参数,必需 $cgc_k ...

  10. Net6 Configuration & Options 源码分析 Part1

    Net6 Configuration & Options 源码分析 Part1 在Net6中配置系统一共由两个部分组成Options 模型与配置系统.它们是两个完全独立的系统. 第一部分主要记 ...