java的Map和Set集合

news2024/11/22 17:56:55

Set集合

一.HashSet

HashSet
元素是无序的
向Hashset中添加元素时,是如何判断元素是否重复的:
添加元素时,如果用equals判断效率太低,因为equals是一个一个字符比较
HashSet底层用到hashCode和equals
一个内容:"sahdihwo"计算hash值,值相同则内容相同
但是有可能出现值相同内容不同的情况,因此值相同时再用equals判断这样子节省了很多时间

HashSet<String> set=new HashSet<>();
//只输出一个
set.add("dsadw");
set.add("dsadw");
set.add("dwdq");
//通话和重地hash值一样但可以放进数组说明上述底层实现的方式
set.add("通话");
set.add("重地");
System.out.println(set);

HashSet<Teachers> set1=new HashSet<>();
Teachers teachers1=new Teachers(1,"hh");
Teachers teachers2=new Teachers(2,"hhh");
Teachers teachers3=new Teachers(1,"hh");
Teachers teachers4=new Teachers(4,"hhhh");

添加时,判断会调用hashCode计算hash值,如果这个类没有hashCode比如Teachers就没有就会调用父类Object中的hashCode:public native int hashCode();native是本地方法(操作系统提供的)所以只要是new出来的都调用Object类中hash值,时内存地址,所以不相同

		set1.add(teachers1);
        set1.add(teachers2);
        set1.add(teachers3);
        set1.add(teachers4);
        System.out.println(set1);

因为teahcer1和teacher3是两个对象,在内存地址中是两个东西,所以Object的hashCode算出来的不一样,两个类都会输出,如果想要算内容的hash值就得自己在这个新类中重写hashCode和equals方法

二.TreeSet

Set 不能存储重复元素
TreeSet底层时树形结构 左边小右边大
添加进来的元素可以排序(按元素的自然顺序)

		TreeSet<Teachers> set1=new TreeSet<>();
        Teachers teachers1=new Teachers(1,"hh");
        Teachers teachers2=new Teachers(2,"hhh");
        Teachers teachers3=new Teachers(1,"hh");
        Teachers teachers4=new Teachers(4,"hhhh");

        set1.add(teachers1);
        set1.add(teachers2);
        set1.add(teachers3);
        set1.add(teachers4);
        System.out.println(set1.toString());

TreeSet底层用的是comparable接口中的compareTo进行比较

新创建的类没有compareTo需要方法重写

public class Teachers extends Object implements Comparable<Teachers>

@Override
    public int compareTo(Teachers o) {
            return this.num - o.num;
    }

重写toString:

public String toString(){
        return num+name;
    }
用迭代器遍历TreeSet数组:
Iterator<Teachers> it= set1.iterator();
while(it.hasNext()){
    Teachers t= it.next();
    System.out.println(t.toString());
}

Map类

Map接口:

将键映射到值的对象
一个映射不能包含重复的键
每个键最多只能映射到一个值

Hashmap:

		HashMap<String,String> map=new HashMap<>();
        map.put("A","aaa");
        map.put("B","bbb");
        map.put("C","ccc");
        map.put("D","ddd");
        map.put("E","eee");
        map.put("A","qqq");
        //键值不能重复,后面的会覆盖前面的
        System.out.println(map.get("A"));//qqq
        //map.clear();//清空所有键值映射
        //System.out.println(map.remove("B"));//删除键值映射,并返回改键对应的值
        System.out.println(map.containsKey("C"));//true,是否包含keyC
        System.out.println(map.containsValue("dsa"));//flase,是否包含值dsa
        System.out.println(map.size());
        Collection<String> values=map.values();//保存map的所有值
        System.out.println(values);//[qqq, bbb, ccc, ddd, eee]
        Set<String> keys=map.keySet();//保存map的所有key
        System.out.println(keys);//[A, B, C, D, E]
        System.out.println(map);//{A=qqq, B=bbb, C=ccc, D=ddd, E=eee}
put底层原理:

在这里插入图片描述

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

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

相关文章

FPGA 安装Quartus 13.1无法生成.sof文件

FPGA 安装Quartus 13.1无法生成.sof文件 安装环境编译无法生成 .sof文件分析原因 找资料1.第1篇文章2.第2篇文章 安装环境 Quarter II 13.0下载、安装、破解包括可能出现的几乎所有的问题详解野火FPGA安装视频 编译无法生成 .sof文件 分析原因 1.推测可能是破解失败。2.安装…

洛谷bfs题2---P1825 [USACO11OPEN] Corn Maze S

P1825 [USACO11OPEN] Corn Maze S import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class Main {public static int N;//行public static int M;//列public static Queue<Integer> q new LinkedList<>();public static in…

变量、因子、缺失值、类型转换、剔除多余变量、随机抽样、用R使用SQL、trim、na.rm=TRUE、数据标准化应用

变量&#xff1a;名义型、有序型、连续型变量 名义型&#xff1a;普通事件类型&#xff0c;如糖尿病I型和糖尿病II型。 有序型&#xff1a;有顺序的事件类型&#xff0c;如一年级、二年级和三年级。 连续型&#xff1a;表示有顺序的数量&#xff0c;如年龄。 因子&#xff1a;…

现代架构设计:构建可伸缩、高性能的系统

文章目录 架构设计的基本原则1. 可伸缩性2. 可用性和容错性3. 性能4. 安全性5. 简单性 现代架构设计的关键概念1. 微服务架构2. 容器化3. 云原生4. 自动化和持续集成/持续交付&#xff08;CI/CD&#xff09; 构建可伸缩、高性能的系统的最佳实践1. 合理使用缓存2. 负载均衡3. 弹…

在Python中处理CSV文件的常见问题

当谈到数据处理和分析时&#xff0c;CSV&#xff08;Comma-Separated Values&#xff09;文件是一种非常常见的数据格式。它简单易懂&#xff0c;可以被绝大多数编程语言和工具轻松处理。在Python中&#xff0c;我们可以使用各种库和技巧来处理CSV文件&#xff0c;让我们一起来…

Server2101

B-1:数据库服务渗透测试 任务环境说明: 服务器场景:Server2101 服务器场景操作系统:未知(关闭连接) 1.通过分析靶机Server2101页面信息,寻找漏洞页面,将WEB服务存在SQL注入漏洞的页面名称作为Flag提交; nmap -p- 扫描发现靶机80和443端口有http、https服务 访问网站…

Nginx访问认证

访问认证 有时候&#xff0c;我们⼀些站点内容想要进⾏授权查看&#xff0c;只能输⼊账号密码之后才能访问&#xff0c;例如⼀些重要的内⽹平台&#xff0c;CRM &#xff0c; CMDB &#xff0c;企业内部 WIKI 等等。 htpasswd是Apache密码⽣成⼯具&#xff0c;Nginx⽀持auth_ba…

多卫星定位算法

多卫星定位算法 现已知有N(N>4)个卫星&#xff0c;每个卫星的坐标用 X s {X_s} Xs​表示&#xff0c;其对应的伪距用 r r r表示。 由于伪距不是准确的、真实的距离&#xff0c;它有所干扰。所以我们可以再根据三维空间中的距离公式&#xff0c;另外估计卫星和用户的距离为 …

Visual Studio Cpp CLR C# 替换

1、首先将文件中所有都替换 你需要的名字 替换为整个解决方案 2、新建工程取名 Laserbeam_upper 3、把原工程下的cpp放进来&#xff0c;并改名Laserbeam_upper 4、在这里逐步添加 属性表配置opencv 5、cpp需要修改的两个地方 6、CLR新建和添加 选类库新建、然后直接粘贴进来…

Learn Prompt-Prompt 高级技巧:API-Bank AgentBench

模型评估是Agent学习过程中至关重要的一环。通过分析数据来评估Agent的能力&#xff0c;可以客观地衡量它在特定任务或领域中的表现。数据评估是不断迭代和改进的基础。通过反复评估和分析数据&#xff0c;Agent可以逐步改进自身&#xff0c;并不断优化其能力。数据评估还可以将…

浅谈为什么多态只能是指针或引用

其实在很早之前&#xff0c;我一直没有注意到这个问题&#xff0c;直到今天碰见了一道题&#xff0c;顺便前面的博客中&#xff0c;继承写到&#xff0c;子类中不包含父类&#xff0c;子类只是继承了父类的成员变量和函数&#xff0c;由这一点&#xff0c;引发了我对切片以及赋…

I/O设备管理

目录 I/O设备管理&#xff08;1&#xff09; 第一节 I/O设备管理的基本概念 一、I/O设备管理的任务 二、I/O设备分类 三、I/O设备管理与文件管理的关系 第二节 I/O硬件和I/O软件的组成 一、I/O硬件组成 二、I/O软件组成 三、设备独立性 第三节 I/O设备控制方式 一…

虚拟机安装 centos

title: 虚拟机安装 centos createTime: 2020-12-13 12:00:27 updateTime: 2020-12-13 12:00:27 categories: linux tags: 虚拟机安装 centos 路线图 主机(宿主机) —> centos --> docker --> docker 镜像 --> docker 容器 — docker 服务 1.前期准备 一台 主机 或…

图像相关名词概述

颜色模式 通过赋予C的不同维度不同的含义&#xff0c;可以用来描述不同的颜色空间。颜色模式&#xff0c;是将某种颜色表现为数字形式的模型&#xff0c;或者说是一种记录图像颜色的方式。本单元主要讲述两个常用的颜色模式&#xff1a;RGB&#xff0c;HSV。 RGB模式是工业界的…

数字IC笔试千题解--多选题篇(三)

前言 出笔试题汇总&#xff0c;是为了总结秋招可能遇到的问题&#xff0c;做题不是目的&#xff0c;在做题的过程中发现自己的漏洞&#xff0c;巩固基础才是目的。 所有题目结果和解释由笔者给出&#xff0c;答案主观性较强&#xff0c;若有错误欢迎评论区指出&#xff0c;资料…

机器学习(19)---XGBoost入门

XGBoost 一、概述1.1 使用XGBoost库1.2 XGBoost的三大板块 二、集成算法及重要参数2.1 概述2.2 XGBoost的简单建模2.3 n_estimators学习曲线2.4 方差与泛化误差2.5 重要参数subsample2.6 迭代决策树&#xff1a;重要参数eta 三、XGBoost的智慧3.1 概述3.2 XGB的目标函数&#x…

26. 图论 - 树

文章目录 树生成树最小生成树图与人工智能人工智能数学基础Hi,你好。我是茶桁。 这一节课是我们AI秘籍整个数学篇的最后一节课。同样的,这节课的概念还是比较重要的。我们要来了解一下「树」。 树 树其实是图的一种,首先呢它是一个连通图,是一个不含圈的连通图。 什么叫…

开机自启动Linux and windows

1、背景 服务器由于更新等原因重启&#xff0c;部署到该服务上的响应的应用需要自启动 2、Linux 2.1 方式一 编写启动应用的sh脚本授权该脚本权限 chmod 777 xxx.sh 修改rc.loacl 位置&#xff1a;/etc/rc.local 脚本&#xff1a;sh /home/xxxx.sh & 授权rc.local …

项目管理和问题跟踪工具Redmine

【勘误】&#xff1a;网友 Bnake 指出&#xff0c;用青龙面板实现阿里云盘每日签到 一文中&#xff0c;新建变量值时&#xff0c;变量名应该为 refreshToken&#xff0c;而不是截图中的 refresh_Token&#xff0c;非常感谢他的仔细和认真~ 什么是 Redmine &#xff1f; Redmine…

云计算与大数据——Spark的安装和配置

云计算与大数据——Spark的安装和配置 Spark的简单介绍&#xff1a; Apache Spark是一个基于内存的分布式计算框架&#xff0c;它提供了高效、强大的数据处理和分析能力。与传统的Hadoop MapReduce相比&#xff0c;Spark的主要优势在于其能够将数据集缓存在内存中&#xff0c…