JavaMap集合--双列集合

2024-04-08 14:36
文章标签 java map 集合 双列

本文主要是介绍JavaMap集合--双列集合,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

Java集合API 

双列集合(键:值)

Map接口

HashMap

概念

代码

运行

HashMap   结构 - - 源码

HashMap结构图

HashMap添加元素源码

链表转红黑树机制

​编辑

代码

运行

TreeMap

概念

代码 

运行

Hashtable

概念

Hashtable键值不能为空

代码

运行

Map集合遍历

方式一

代码

运行

方式二

代码

运行


Java集合API 

集合体系概述 Java的集合框架是由很多接口、抽象类、具体类组成的,都位于java.util包中。

双列集合(键:值)

Map接口

将键映射到值的对象

一个映射不能包含重复的键

每个键最多只能映射到一个值

HashMap

概念

HashMap<String,String> map = new HashMap<>();

底层是哈希表+链表+红黑树

键值可以为null

键无序

多线程情况下不安全

代码

Map 
  键:值对
  键不能重复,值可以重复
  一个键映射到一个值
  HashMap
    键是无序的 

package com.ffyc.javacollection.map;import java.util.Collection;
import java.util.HashMap;
import java.util.Set;public class HashMapDemo1 { public static void main(String[] args) {HashMap<String,String> map = new HashMap<>();map.put("c", "gg");map.put("x", "ax");map.put("a", "cm");map.put("h", "CC");map.put("c", "hh");map.put(null, null);map.put("gg", null);System.out.println(map);//通过key获取到key所对应的value值System.out.println(map.get("x"));//删除键值映射,并返回该键对应的值System.out.println(map.remove("x"));//确认是否有指定键值映射 有--true 没有--falseSystem.out.println(map.containsKey("x"));//确认是否有指定值 有--true 没有--falseSystem.out.println(map.containsValue("hh"));//判断是否为空System.out.println(map.isEmpty());//键值段(长度)System.out.println(map.size());//把值拿出来存储在一个Collection类型数组Collection<String> values = map.values();System.out.println(values);//把键拿出来存储在一个Set类型数组Set<String> keys = map.keySet();System.out.println(keys);System.out.println(map);//删除所有的键值映射map.clear();System.out.println(map);}
}
运行

HashMap   结构 - - 源码

HashMap结构图

HashMap添加元素源码

链表转红黑树机制

代码
public V put(K key, V value) {return putVal(hash(key), key, value, false, true);
}
package com.ffyc.javacollection.map;import java.util.Collection;
import java.util.HashMap;
import java.util.Set;public class HashMapDemo2 { public static void main(String[] args) {HashMap<String,String> map = new HashMap<>();map.put("c", "gg");map.put("x", "ax");map.put("a", "cm");map.put("h", "CC");map.put("c", "hh");System.out.println(map);}
}
运行

TreeMap

概念

TreeMap<String, String> tmap = new TreeMap<>();

底层是红黑树结构

键是有序的 可以排序

代码 

Map
  键值对
  键不能重复 值可以重复

TreeMap
  底层使用的是树型结构
   键可以排序(有序),键的类型必须实现Comparable接口 

package com.ffyc.javacollection.map;import java.util.TreeMap;public class TreeMapDemo { public static void main(String[] args) {TreeMap<String, String> tmap = new TreeMap<>();tmap.put("c", "c");tmap.put("b", "b");tmap.put("d", "d");tmap.put("a", "a");tmap.put("b", "bb");System.out.println(tmap);}
}
运行

Hashtable

概念

Hashtable<String, String> hmap = new Hashtable<>();

底层与HashMap一致

不可以存储为null的键值

键也是无序的

多线程情况下是安全的

Hashtable键值不能为空

代码

Map 
  键值对
  键不能重复 值可以重复

Hashtable
  底层结构与HashMap相同,但是是线程安全  方法添加synchronized关键字
  Hashtable不可以存储为null的键和值

  HashMap可以存储一个为null的键,值也可以为null 

package com.ffyc.javacollection.map;import java.util.Hashtable;public class HashtableDemo { public static void main(String[] args) {Hashtable<String, String> hmap = new Hashtable<>();hmap.put("x","x");hmap.put("a","a");hmap.put("g","g");hmap.put("i","i");hmap.put("x","x");/*hmap.put(null, null);//NullPointerExceptionhmap.put("gg", null);*/System.out.println(hmap);}
}
运行

Map集合遍历

方式一

方式1:根据键找值

• 获取所有键的集合

• 遍历键的集合,获取到每一个键

 • 根据键找值

代码
package com.ffyc.javacollection.map;import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class HashMapDemo3 {public static void main(String[] args) {HashMap<String,String> map = new HashMap<>();map.put("c", "gg");map.put("x", "ax");map.put("a", "cm");map.put("h", "CC");map.put("c", "hh");//方式一:keySet()获取到所有的键  遍历键的集合Set<String> keySet = map.keySet();for (String key:keySet) {System.out.println(key+":" + map.get(key));}}
}
运行

方式二

方式2:根据键值对对象找键和值

• 获取所有键值对对象的集合

• 遍历键值对对象的集合,获取到每一个键值对对象

• 根据键值对对象找键和值

代码
package com.ffyc.javacollection.map;import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class HashMapDemo3 {public static void main(String[] args) {HashMap<String,String> map = new HashMap<>();map.put("c", "gg");map.put("x", "ax");map.put("a", "cm");map.put("h", "CC");map.put("c", "hh"); //方式二:通过entrySet()获取到一个Entry类型的集合,Entry中放有键值对Set<Map.Entry<String, String>> entries = map.entrySet();for(Map.Entry entry : entries){System.out.println(entry.getKey()+":"+entry.getValue());}}
}
运行

这篇关于JavaMap集合--双列集合的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/885858

相关文章

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

Java Response返回值的最佳处理方案

《JavaResponse返回值的最佳处理方案》在开发Web应用程序时,我们经常需要通过HTTP请求从服务器获取响应数据,这些数据可以是JSON、XML、甚至是文件,本篇文章将详细解析Java中处理... 目录摘要概述核心问题:关键技术点:源码解析示例 1:使用HttpURLConnection获取Resp

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用

Java中的Lambda表达式及其应用小结

《Java中的Lambda表达式及其应用小结》Java中的Lambda表达式是一项极具创新性的特性,它使得Java代码更加简洁和高效,尤其是在集合操作和并行处理方面,:本文主要介绍Java中的La... 目录前言1. 什么是Lambda表达式?2. Lambda表达式的基本语法例子1:最简单的Lambda表

Java中Scanner的用法示例小结

《Java中Scanner的用法示例小结》有时候我们在编写代码的时候可能会使用输入和输出,那Java也有自己的输入和输出,今天我们来探究一下,对JavaScanner用法相关知识感兴趣的朋友一起看看吧... 目录前言一 输出二 输入Scanner的使用多组输入三 综合练习:猜数字游戏猜数字前言有时候我们在

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构

java解析jwt中的payload的用法

《java解析jwt中的payload的用法》:本文主要介绍java解析jwt中的payload的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java解析jwt中的payload1. 使用 jjwt 库步骤 1:添加依赖步骤 2:解析 JWT2. 使用 N

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将