Map 双列集合根接口 HashMap TreeMap

news2024/10/17 7:21:12

Map接口是一种双列集合,它的每一个元素都包含一个键对象Key和值Value 键和值直接存在一种对应关系 称为映射 从Map集中中访问元素, 只要指定了Key 就是找到对应的Value

常用方法

HashMap实现类无重复键无序

它是Map 接口的一个实现类,用于存储键值映射关系,并且HashMap 集合没有重复的键且键值无序

import java.util.HashMap;

public class h {
    public static void main(String[] args) {
        HashMap map = new HashMap(); //创建Map对象
        map.put("1","张三"); // put方法 存储键和值
        map.put("2","李四");
        map.put("3","王五");
        map.put("3","赵六"); // 测试键是否具有唯一性 显示覆盖
        System.out.println("1:"+map.get("1")); // 根据键获取值
        System.out.println("2:"+map.get("2"));
        System.out.println("3:"+map.get("3"));
    }
}

--------------------------------

输出:

1:张三
2:李四
3:赵六


**注意: **

第9行代码,键位为3重复了,但是还是输出了它
这是因为键位具有唯一性不能出现2个3但是如果存储了两个相同的值,后存储的值会覆盖原有的值 

**键相同 值覆盖**

遍历Key键获取对应的值

通过遍历Map 集合中所有的键位,也就是对应的数字Key ,不遍历值Value ,再根据key 迭代到值

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class h {
    public static void main(String[] args) {
        HashMap map = new HashMap(); //创建Map对象
        map.put("1","张三"); // put方法 存储键和值
        map.put("2","李四");
        map.put("3","王五");
        Set keySet = map.keySet();  //获取Key 123 键的方法 Set
        Iterator it = keySet.iterator(); // 遍历迭代键
        while (it.hasNext()) { // 判断是否下个元素 也就是自动++
            Object key = it.next(); // 依次拿到值
            Object value = map.get(key); // 根据key值获取到对应的Value
            System.out.println(key+":"+value); // 依次输出
        }
    }
}

首先调用Map对象的KeySet ()方法获得存储 Map 中所有键的Set 集合
然后通过 Iterator 选代Set 集合的每一个元素,即每一个键
最后通过调get(Stringkey)方法,根据键获取对应的值

-------------------------------------------

输出:

1:张三
2:李四
3:王五

遍历集合映射关系

这是另一种遍历方式是先获取集合中的所有的映射关系,然后从映射关系中分别取出对应的键和值,然后分别输出即可

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class h {
    public static void main(String[] args) {
        HashMap map = new HashMap(); //创建Map对象
        map.put("1","张三"); // put方法 存储键和值
        map.put("2","李四");
        map.put("3","王五");
        Set entrySet = map.entrySet(); // 获得映射集合
        Iterator it = entrySet.iterator(); // 获得遍历迭代器
        while (it.hasNext()){
            // 获得集合中键值对应的映射关系
            Map.Entry entry =  (Map.Entry)  (it.next());
            Object key = entry.getKey(); // 获得Entry 的键 123
            Object value = entry.getValue(); // 获得Enrty的值
            System.out.println("分别输出是"+key+":"+value);
        }
    }
}


-------------------------------------------

输出:

分别输出是1:张三
分别输出是2:李四
分别输出是3:王五


**注意:**

Map.entrySet()获取到了存储在map集合里面的所有映射的值, 这个集合存放了Map.Entry类型的
映射数据,(Entry是内部接口) 每个Map.Entry对象代表了一个键值在16行中. 然后通过遍历迭代
依次取出键和值输出 key  value

区别:

上面两个迭代器的区别显而易见,一个是通过Key 值来拿到值,这是需要一个key 就可以获取到,后者集合映射关系则是需要两个都获取到keyvalue 缺一不可

Map操作集合常用方法

方法

描述

value()

获得Map实例中的所有Value

返回类型为Collection(单列集合)

size()

得到Map

集合类的大小

containsKey()

判断是否包含传入的键 返回真或假

containsValue()

判断是否包含传入的值 返沪真或假

remove()

根据对应的Key

键删除对应的值

import java.util.*;

public class h {
    public static void main(String[] args) {
        HashMap map = new HashMap(); //创建Map对象
        map.put("1","张三"); // put方法 存储键和值
        map.put("2","李四");
        map.put("3","王五");
        map.put("4","赵六");
        System.out.println("集合的大小是"+map.size());
        // 判断集合有没有键值 2 还要值王五
        System.out.println("判断是否包含传入的键"+map.containsKey("2"));
        System.out.println("判断是否有传入的值"+map.containsValue("赵六"));
        System.out.println("删除键为1的值"+map.remove("1")); //删除键为1
   //通过map.values()方法单独获取到Map集合的Collection集合,然后迭代器输出每一个单独的value
   // 所以返回类型为Collection
        Collection values = map.values();
        Iterator it = values.iterator();
        while (it.hasNext()){
            Object value = it.next();
            System.out.println(value);
        }
    }
}


----------------------------------------------------

输出:

集合的大小是4
判断是否包含传入的键true
判断是否有传入的值true
删除键为1的值张三
李四
王五
赵六

LinkedHashMap无重复键存取顺序一致

HashMap 集合迭代出来的元素是无序的,存入和取出不一致,如果需要一致那么需要使用这个方法 ,它是HashMap的子类,和单列集合的LinkedList一样 它也使用双向链表来维护内部元素的关系,使Map元素迭代的顺序和存入的顺序一致

import java.util.*;

public class h {
    public static void main(String[] args) {
        LinkedHashMap map = new LinkedHashMap(); //创建Map对象
        map.put("2","张三"); // put方法 存储键和值
        map.put("1","李四");
        map.put("3","王五");
        map.put("4","赵六");
         map.put("4","ss");
        Set keySet = map.keySet();
        Iterator it  = keySet.iterator(); //
        while (it.hasNext()){
            Object key = it.next();
            Object value = map.get(key); // 获得每个键Key对应的值
            System.out.println(key+":"+value);
        }
    }
}


----------------------------------------------

存取顺序一致

输出:

2:张三
1:李四
3:王五
4:ss

TreeMap实现类无重复键有序

Treemap是可以对集合中元素键值进行排序的类, 添加的元素自动排序 1 2 3 4 并且没有重复的键,只是后面添加的 ss 覆盖了键值4 ,证实了TreeMap 中的键必须是唯一的,不能重复且有序,如果存储了相同的,后存储的值会覆盖原有的值

import java.util.*;

public class h {
    public static void main(String[] args) {
        TreeMap map = new TreeMap(); //创建Map对象
        map.put("2","张三"); // put方法 存储键和值
        map.put("1","李四");
        map.put("3","王五");
        map.put("4","赵六");
        map.put("4","ss");
        Set keySet = map.keySet(); // 获取集合中所有的键集合
        Iterator it  = keySet.iterator(); //
        while (it.hasNext()){
            Object key = it.next();
            Object value = map.get(key); // 获得每个键Key对应的值
            System.out.println(key+":"+value);
        }};
}


-------------------------------------------------------

输出:

1:李四
2:张三
3:王五
4:ss

比较排序法

TreeMap 集合之所以对添加的元素的键值进行排序,其实通TreeSet 一样,它的排序也分自然排序和比较排序下面就来演示 . 其中 String 类是自定义的键

import java.util.*;
class Student{
    private  String name;
    private  int age;

    public String getName() {  // 封装构造存取值get() set()
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
   // 构造函数
    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    @Override  //表示为覆盖,重写的方法 下面也是重写了toString
    //  此toString会自动输出 这个方法
    public String toString(){
       return  "Sttudent[name="+name+",age="+age+"]";
    }
}
public class h {
    public static void main(String[] args) {
        TreeMap map = new TreeMap(); //创建Map对象
        map.put("2","张三"); // put方法 存储键和值
        map.put("1","李四");
        map.put("3","王五");
        map.put("4","赵六");
        map.put("4","ss");
        Set keySet = map.keySet(); // 获取集合中所有的键集合
        Iterator it  = keySet.iterator(); //
        while (it.hasNext()){
            Object key = it.next();
            Object value = map.get(key); // 获得每个键Key对应的值
            System.out.println(key+":"+value);
        }
    }
}


----------------------------------

输出:

1:李四
2:张三
3:王五
4:ss

Properties集合配置

Hashtable的子类

它主要用来存储字符串类型的键和值,在实际开发中经常使用Properties 集合来存取应用的配置项,也就是模板,价格有这样的代码,背景颜色为red 字体大小为 14px 语言问china 其配置项应该这样存储

Backrgroup-color = red
Font-szie = 14px
Language = chinese

使用Properties 集合来配置应为

针对Properties 类针对字符串有两个存取的方法,

setProperty 将键和值添加到集合中

getProperty 获取对应的值

propertyNames 得到一个包含所有键的Enumeration ,然后利用迭代器遍历所有键的时候,再根据

getProperty 方法获得键所对应的值

import java.util.Enumeration;
import java.util.Locale;
import java.util.Properties;

public class d {
    public static void main(String[] args) {
        Properties p = new Properties();
        p.setProperty("back","red");  // 使用set在集合中存入对应的键和值
        p.setProperty("size","14px");
        p.setProperty("语言","china");
        // 获取Enumeration对象所有键的枚举也就是所有的数据
        Enumeration names = p.propertyNames(); 
        while (names.hasMoreElements()){ // 循环遍历所有的键
            String key = (String) names.nextElement(); // 拿到key
            String value = p.getProperty(key); // 根据键拿到对应的值
            System.out.println(key+":"+value);
        }
    }
}


---------------------------------------------

输出:

back:red
语言:china
size:14px

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2216887.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

51单片机快速入门之 LED点阵 结合74hc595 的应用 2024/10/16

51单片机快速入门之 LED点阵 结合74hc595 的应用 74HC595是一种常用的数字电路芯片,具有串行输入并行输出的功能。它主要由两个部分组成:一个8位的移位寄存器和一个8位的存储寄存器。数据通过串行输入管脚(DS)逐位输入&#xff0…

unity Gpu优化

不一样的视角,深度解读unity性能优化。unity性能优化,unity内存优化,cpu优化,gpu优化,资源优化,资源包、资源去重优化,ugui优化。 gpu优化静态批处理静态批处理原理规则静态合批的原理静态合批的…

Spring Boot视频网站:安全与可扩展性设计

4 系统设计 4.1系统概要设计 视频网站系统并没有使用C/S结构,而是基于网络浏览器的方式去访问服务器,进而获取需要的数据信息,这种依靠浏览器进行数据访问的模式就是现在用得比较广泛的适用于广域网并且没有网速限制要求的B/S结构&#xff0c…

Appium环境搭建、Appium连接真机

文章目录 一、安装Android SDK二、安装Appium-desktop三、安装Appium Inspector 一、安装Android SDK 首先需要安装jdk,这里就不演示安装jdk的过程了 SDK下载地址:Android SDK 下载 1、点击 Android SDK 下载 -> SKD Tools 2、选择对应的版本进行下…

mysql 慢查询日志slowlog

慢查询参数 slow log 输出示例 # Time: 2024-08-08T22:39:12.80425308:00 #查询结束时间戳 # UserHost: root[root] localhost [] Id: 83 # Query_time: 2.331306 Lock_time: 0.000003 Rows_sent: 9762500 Rows_examined: 6250 SET timestamp1723127950; select *…

云栖实录 | 智能运维年度重磅发布及大模型实践解读

本文根据2024云栖大会实录整理而成,演讲信息如下: 演讲人: 钟炯恩 | 阿里云智能集团运维专家 张颖莹 | 阿里云智能集团算法专家 活动: 2024 云栖大会 AI 可观测专场 -智能运维:云原生大规模集群GitOps实践 2024 …

【c++】c++11多线程开发

2 C多线程 本文是参考爱编程的大丙c多线程部分内容,按照自己的理解对其进行整理的一篇学习笔记,具体一些APi的详细说明请参考大丙老师教程。 代码性能的问题主要包括两部分的内容,一个是前面提到资源的获取和释放,另外一个就是多…

使用rabbitmq-operator在k8s集群上部署rabbitmq实例

文章目录 前言一、rabbitmq-operator二、进行部署1.部署cluster-operator2.创建自己需要的特定命名空间3.创建rabbitmq的instance4.创建nodeport访问 结果验证 前言 使用rabbitmq-operator在k8s集群上部署rabbitmq实例。时区设置为上海 一、rabbitmq-operator 官网地址&#…

数学建模算法与应用 第16章 优化与模拟方法

目录 16.1 线性规划 Matlab代码示例:线性规划求解 16.2 整数规划 Matlab代码示例:整数规划求解 16.3 非线性规划 Matlab代码示例:非线性规划求解 16.4 蒙特卡洛模拟 Matlab代码示例:蒙特卡洛模拟计算圆周率 习题 16 总结…

java代码生成器集成dubbo,springcloud详解以及微服务遐想

摘要 今天终于有了点空闲时间,所以更新了一下代码生成器,修复了用户反馈的bug,本次更新主要增加了dubbo和springcloud脚手架的下载功能,架子是本人亲自搭建,方便自由扩展或者小白学习使用,你也许会问为什么…

红日安全vulnstack (二)

目录 环境搭建 网卡设置 修改Kali网段 IP 分布 WEB渗透 Weblogin服务开启 漏洞扫描 CVE工具利用 MSF上线 内网渗透 域内信息收集 凭证横向移动 权限维持 黄金票据 参考文章 https://www.cnblogs.com/bktown/p/16904232.htmlhttps://blog.csdn.net/m0_75178803/ar…

leetcode54:螺旋矩阵

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]示例 2: 输入:matrix [[1,2,3,…

hackmyvm-Hundred靶机

主机发现 sudo arp-scan -l 以sudo权限执行arp-scan -l 扫描并列出本地存在的机器,发现靶机ip为192.168.91.153 nmap扫描 端口发现 21/tcp open ftp 22/tcp open ssh 80/tcp open http web信息收集 我们先尝试一下ftp端口的匿名登录 FTP:是文件传输协议的端…

个人博客系统_测试报告

1.项目背景 基于SSM框架实现的个人博客系统,由五个页面构成:用户登录页、博客发表页、博客编辑页、博客列表页以及博客详情页。登录即可查看自己与其他用户已发布的博客,也可以使用自己的账号发布博客,通过使用Selenium定位web元…

《人工智能:CSDN 平台上的璀璨之星》

一、CSDN 上的 AI 热门话题 GPT-3 作为 CSDN 上的热门话题,其应用极为广泛。GPT-3 是 OpenAI 开发的一种基于 Transformer 架构的大规模预训练语言模型,拥有惊人的 1750 亿个参数。它具有多任务处理能力,能够执行多种自然语言处理任务&#x…

保护企业终端安全,天锐DLP帮助企业智能管控终端资产

为有效预防员工非法调包公司的软硬件终端资产,企业管理员必须建立高效的企业终端安全管控机制,确保能够即时洞察并确认公司所有软硬件资产的状态变化。这要求企业要有一套能够全面管理终端资产的管理系统,确保任何未经授权的资产变动都能被迅…

Ajax处理错误信息(处理响应报文)

<!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title></head><body><form action""><div>用户名<input type"text" class"username"></div>…

【2024-10-16】某小破站w_rid参数分析

声明:该专栏涉及的所有案例均为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系本人删帖! 文章目录 一、前言二、参数分析三、代码一、前言 看一下小破站的参数加密 网址: aHR0cHM6Ly9zcGFjZS5iaWxpYmlsaS5jb20vNDA1Nz…

c++就业1.1.3海量数据去重的Hash与BloomFilter

找到具体的位置 通过映射 当前需要插入的指向 上一层最后一个 方便头插 布隆过滤器 - 查找是否有这个值 但是不能够返回value 服务器和过滤器进行网络交互 我们要知道这个key在不在mysql中 去查询并且在mysql中进行查询 所以在服务器部署布隆过滤器 为了节约内存 用位图 对str…

Linux权限理解及环境基础开发工具使用

前言 Linux中有两种用户&#xff0c;一种是root用户&#xff0c;另一种是普通用户&#xff0c;二者的权限不一样&#xff0c;即能做的事情不一样。下面我们来细讲一下这些不同。 root用户能在Linux系统下做任何事情&#xff0c;而普通用户只能做有限的事情。 root用户的命令…