【JavaSE】集合(Map)

news2025/1/12 1:05:10

文章目录

  • 1.Map接口
    • 1.1常用方法
    • 1.2 遍历
  • 2.HashMap
    • 2.1Hash表数据结构
    • 2.2 Map.put实现原理
    • 2.3 Map.get实现原理
    • 2.4扩容
    • 2.5 同时重写hashCode和equals
    • 2.6 JAVA8对HashMap改进
  • 3.Hashtable
  • 4.Properties
  • 5.TreeMap
    • 5.1 概述
    • 5.2 自定义类实现Comparable
  • 6.集合工具类Collections

1.Map接口

1.1常用方法

方法:查文档

  • entrySet()
    将Map转成Set集合
key               value
1                   张三
2                   李四
3                   王五

转成:

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

元素类型为Map.Entry

1.2 遍历

方法一:

package com.sdnu.test;

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

/**
 * 测试遍历Map集合
 *
 * @author Beyong
 * @date 2023/03/01 08:59
 **/
public class TestMap {
    public static void main(String[] args) {
        Map<Integer, String> myMap = new HashMap<>();
        myMap.put(1, "zhangsna");
        myMap.put(2, "lisi");
        myMap.put(3, "wangwu");
        myMap.put(4, "jack");
        Set<Integer> keySet = myMap.keySet();
        Iterator<Integer> it = keySet.iterator();
        //方式一
        while (it.hasNext()){
            Integer key = it.next();
            String value = myMap.get(key);
            System.out.println(key + "=" + value);
        }
        //方式二
        for (Integer key : keySet) {
            String value = myMap.get(key);
            System.out.println(key + "=" + value);
        }
    }
}

方法二:

package com.sdnu.test;

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

/**
 * 测试遍历Map集合
 *
 * @author Beyong
 * @date 2023/03/01 08:59
 **/
public class TestMap {
    public static void main(String[] args) {
        Map<Integer, String> myMap = new HashMap<>();
        myMap.put(1, "zhangsna");
        myMap.put(2, "lisi");
        myMap.put(3, "wangwu");
        myMap.put(4, "jack");
       
        Set<Map.Entry<Integer,String>> set = myMap.entrySet();
        Iterator<Map.Entry<Integer, String>> it2 = set.iterator();
        //方式一
        while (it2.hasNext()) {
            Map.Entry<Integer, String> node = it2.next();
            Integer key = node.getKey();
            String value = node.getValue();
            System.out.println(key + "=" + value);
        }
        //方式二
        for (Map.Entry<Integer, String> obj : set){
            Integer key = obj.getKey();
            String value = obj.getValue();
            System.out.println(key + "=" + value);
        }
    }
}

2.HashMap

2.1Hash表数据结构

在这里插入图片描述

2.2 Map.put实现原理

在这里插入图片描述

2.3 Map.get实现原理

在这里插入图片描述

2.4扩容

HashMap ,默认初始容量是16,到达75%的时候,开始扩容。

可以指定初始容量,但必须是2的倍数。

2.5 同时重写hashCode和equals

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.6 JAVA8对HashMap改进

如果哈希表中链表长度超过8,则变成红黑树,如果链表长度小于6个,则变成链表。

3.Hashtable

  • 线程安全的
  • 初始容量是11,加载因子是0.75
  • 扩容:原容量*2 + 1

4.Properties

  • key和value都是String类型
  • 存:setProperty()
  • 取:getProperty()

5.TreeMap

5.1 概述

  • TreeSet底层是TreeMap,放到TreeSetp中的元素,等同于将元素放到TreeMap的key部分。
  • TreeMap底层是一个二叉树
  • 无序(存储)不可重复,但可以排序(大小)

5.2 自定义类实现Comparable

class Customer implements Comparable<Customer>{
	int age;
	public Customer(int age){
		this.age = age;
	}
	@override
	public int compareTo(Customer o) {
		//c1.compareTo(c2)
		//比较规则
	}
}

在这里插入图片描述

6.集合工具类Collections

在这里插入图片描述

作者:Beyong    
出处:Beyong博客
github地址 https://github.com/beyong2023

本博客中未标明转载的文章归作者Beyong有,欢迎转载,但未经作者同意必须保留此段声明,且在文章明显位置给出原文连接,否则保留追究法律责任的权利。

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

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

相关文章

Linux | 1. 挂载新硬盘与磁盘管理

如有错误&#xff0c;恳请指出。 1. Ubuntu挂载新硬盘 查看磁盘状态&#xff1a;sudo fdisk -l 1&#xff09;为新硬盘分区 使用 fdisk 指令对 /dev/sdb 进行分区操作&#xff1a;sudo fdisk /dev/sdb。进入分区工具后&#xff0c;我们可以输入 m 看指令说明&#xff0c;注意…

(四十八)大白话线上数据库不确定性的性能抖动优化实践(上)

之前我们花费了很大篇幅来给大家深入和细致的讲解数据库在执行增删改这类更新语句时候的底层原理&#xff0c;这里涉及到了很多数据库内核级的概念&#xff0c;比如buffer pool、redo log buffer、lru/flush链表&#xff0c;等等&#xff0c;大家对数据库执行更新语句的原理都有…

黑客入门破解网络密码常用的九个方法!

个人网络密码安全是整个网络安全的一个重要环节&#xff0c;如果个人密码遭到黑客破解&#xff0c;将引起非常严重的后果。比如&#xff0c;银行卡账户密码被盗&#xff0c;你就给别人打工了。所以&#xff0c;增强网民的网络安全意识是网络普及进程的一个重要环节。 常言道&am…

ThreadPoolExecutor执行流程和拒绝策略

【面试常考】 之前我们讲到的多线程案例里面的Executors 本质上是 ThreadPoolExecutor 类的封装. ThreadPoolExecutor 提供了更多的可选参数, 可以进一步细化线程池行为的设定. 什么是ThreadPoolExcutor类&#xff1f; 首先通过文档我们看看ThreadPoolExcutor提供给我们的构造…

超详细彻底卸载Anaconda详细教程

一、在开始出打开Anaconda Prompt 二、打开后&#xff0c;输入conda install tqdm -f命令并按回车键 conda install tqdm -f三、之后页面会出现一个WANNING&#xff0c;这个我们不用在意&#xff0c;之后会出现一个y/n提示框&#xff0c;在这里我们输入y或者Y y四、输入con…

小程序容器与微服务架构的关系

随着移动互联网的发展&#xff0c;小程序已经成为了一种非常流行的应用方式&#xff0c;它可以在不安装任何应用的情况下&#xff0c;直接在移动终端设备&#xff08;如&#xff1a;App&#xff0c;iPad等&#xff09;中运行。微服务架构则是一种的分布式系统架构&#xff0c;可…

SpringBoot整合MybatisPlus多数据源

相信在很多使用MybatisPlus框架的小伙伴都会遇到多数据源的配置问题&#xff0c;并且官网也给出了推荐使用多数据源 (dynamic-datasource-spring-boot-starter) 组件来实现。由于最近项目也在使用这个组件来实现多数据源切换&#xff0c;因此想了解一下该组件是如何运行的&…

以太网协议和DNS

目录 &#x1f415;今日良言:跨过困难,去迎接更好的自己. &#x1f433;一、以太网桢格式 &#x1f433;二、DNS &#x1f415;今日良言:跨过困难,去迎接更好的自己. &#x1f433;一、以太网桢格式 数据链路层考虑的是相邻两个节点(通过网线/光纤/无线直接相连的两个设备…

有趣的表盘布局环绕动画

前言 C端的介绍页中&#xff0c;设计师设计动画特效都非常有意思。这次遇到了“表盘内容元素环绕效果”&#xff0c;类似于表盘中的分针在一格一格运动一样&#xff0c;只是这次动画运动的元素不一样。 效果如下&#xff1a; 实现表盘布局 合理的运用JavaScrip的三角函数&am…

Malware Dev 01 - 免杀之 PPID Spoofing 原理解析

写在最前 如果你是信息安全爱好者&#xff0c;如果你想考一些证书来提升自己的能力&#xff0c;那么欢迎大家来我的 Discord 频道 Northern Bay。邀请链接在这里&#xff1a; https://discord.gg/9XvvuFq9Wb我会提供备考过程中尽可能多的帮助&#xff0c;并分享学习和实践过程…

第十五天笔记

1. 编程实现计算2023-2-1到2023-3-1相隔多少天&#xff1f; from datetime import datetimestart_date_str "2023-2-1"end_date_str "2023-3-1"start_date datetime.strptime(start_date_str, "%Y-%m-%d")end_date datetime.strptime(end_d…

pmp项目管理考完有什么好处?

作为曾经5A&#xff08;现在改3A了&#xff09;通过考试的老学姐说下经验 做好规划 一定要合理安排自己预习、复习和做题的时间&#xff0c;提前规划。其中不要小看课前预习这件事&#xff0c;带着问题去上课&#xff0c;绝对能事半功倍。同时也能及时知道老师到底在讲解哪个知…

网络安全入门:不可不知的8款免费Web安全测试工具

随着 Web 应用越来越广泛&#xff0c;Web 安全威胁日益凸显。黑客利用网站操作系统的漏洞和 Web服务程序的 SQL 注入漏洞等得到Web服务器的控制权限&#xff0c;轻则篡改网页内容&#xff0c;重则窃取重要内部数据&#xff0c;更为严重的则是在网页中植入恶意代码&#xff0c;使…

互联网时代,学什么专业就业好?

互联网时代的手机、智能电视、家具、机械设备等各种有形产品都将会嵌入智能芯片&#xff0c;都会有嵌入式软件或App与之相连&#xff0c;从而形成智能产品。这是我们开启智能化硬件的开始&#xff0c;在这样的环境下&#xff0c;如果要问学什么就业最好&#xff1f;当然首选Jav…

串口、终端应用程序 API termios

UART简介 串口全称为串行接口&#xff0c;也称为COM接口&#xff0c;串行接口指的是比特一位位顺序传输&#xff0c;通信线路简单。使用两根线就可以实现双向通信&#xff0c;一条为TX&#xff0c;一个为RX。串口通信距离远&#xff0c;但速度相对慢&#xff0c;是一种常用的工…

软测入门(二)测试用例、自动化测试理念

测试用例&#xff08;test case&#xff09; 特性 有效性&#xff1a;测试用例能够被使用&#xff0c;且被不同的人员使用测试结果一致可复用性&#xff1a;如回归测试的使用可评估性可管理性 八大要素 测试编码&#xff1a;方便归档和查询测试模块/功能预置条件&#xff1a…

2023年功能测试还值得入行吗?

前言 鉴于笔者从13年入行IT行业&#xff0c;经历了只有开发没有测试的阶段&#xff0c;经历了14年只要会基本的功能测试在一线就能薪资过万的阶段&#xff0c;经历了17年只要会一点自动化&#xff0c;会一点性能就能蒙骗过面试官的阶段&#xff0c;更经历了19年所有面试官对于…

操作系统发展历程

手工操作阶段(此阶段无操作系统) 用户在计算机上算题的所有工作都要人工干预。该阶段有两个突出缺点&#xff1a; 用户独占全机&#xff0c;虽然不会出现因资源已被其他用户占用而等待的现象&#xff0c;但资源利用率低。 CPU等待手工操作&#xff0c;CPU的利用不充分 唯一的…

【虚拟机搭建】win11搭建虚拟机两种方式:【virtualbox+vagrant】【VMware】(附centos系统、附安装包)

描述 本教程windows系统搭建虚拟机方式&#xff0c;主要包含两种方式&#xff0c;分别是&#xff1a;【vagrantvirtualbox】和【VMware】推荐大家使用【vagrantvirtualbox】方式进行安装&#xff0c;也可根据自己喜好进行选择本教程安装包 包含三种下载方式&#xff0c;分别是…

关于Could not build wheels for opencv-python-headless, which is...报错的解决方案

在通过最新版pip在线安装package&#xff1a;opencv-python-headless的时候&#xff0c;会产生报错信息&#xff0c;主要为 ERROR: Failed building wheel for opencv-python-headless ERROR: Could not build wheels for opencv-python-headless, which is required to insta…