/*
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. png图片隐写

  2. Smartbi报表工具的学习笔记,如何学好报表分析?

    近期,因为工作需要,学习了一个报表工具Smartbi,这是国产BI软件,其功能还是挺强大的,并且学习成本很低,容易上手. 其实在学习Smartbi之前,我还学习了一段时间的微软BI工具sqlserve ...

  3. 小谈C#泛型

    (一)泛型的由来 泛型是CLR2.0新增的,泛型兼具可重用性,类型安全和效率.泛型的本质就是在程序第一次编译的为IL代码的时候,就会帮我们生成一个占位符,在git即时编译的时候,就会把占位符替换为真实 ...

  4. 安卓Java主页面的编写

    1 package com.example.first; 2 3 import androidx.appcompat.app.AppCompatActivity; 4 5 import android ...

  5. WPS二级标题链接到一级标题

    WPS二级标题链接到一级标题,即2后出现2.1 2.2而不是1.3 1.4什么的 样式中的编号什么的都不用动,默认即可,关键在于这些多级标题是否选择了同一个编号方式 WPS中,只需要将它们的编号选择为 ...

  6. Python3中__repr__和__str__区别

    示例: class Test(object): def __init__(self, value='hello, world!'): self.data = value >>> t ...

  7. php 修改后端代码参考

    后端代码参考:

  8. L2Dwidget二次元前端添加人物插件

    如果想要在博客园上添加这个插件,只需要在设置的"页首html代码"中添加下面的js就行 <!-- 右下角live2d效果 --> <script src=&quo ...

  9. quartz框架(十)-QuartzShedulerThread

    QuartzSchedulerThread 本篇博文,博主将介绍QuartzSchedulerThread的相关内容.话不多说,直接进入正题. 什么是QuartzSchedulerThread? 从源 ...

  10. 深度学习(一)之MNIST数据集分类

    任务目标 对MNIST手写数字数据集进行训练和评估,最终使得模型能够在测试集上达到\(98\%\)的正确率.(最终本文达到了\(99.36\%\)) 使用的库的版本: python:3.8.12 py ...