当前位置: 首页 > article >正文

集合框架、Collection、list、ArrayList、Set、HashSet和LinkedHashSet、判断两个对象是否相等

DAY7.1 Java核心基础

集合框架

Java 中很重要的一个知识点,实际开发中使用的频录较高,Java 程序中必备的模块

集合就是长度可以改变,可以保存任意数据类型的动态数组

最上层是一组接口,接下来是接口的实现类,第三层是对集合进行各种操作的工具类。

接口描述
Collection集合框架最基本的接口,一个 Collection 可以存储一组无序、不唯一的对象
ListCollection 的子接口,存储一组有序、不唯一的对象
SetCollection 的子接口,存储一组无序、唯一的对象
Map独立于 Collection 的另外一个接口,存储一组键值对象、提供键到值的映射
Iterator输出集合元素的接口,一般适用于无序集合,从前到后单向输出
ListIteratorIterator 的子接口,可以双向输出集合中的元素
Enumeration传统的输出接口,已被 Iterator 所取代
SortedSetSet 的子接口,可以对集合中的元素进行排序
SortedMapMap 的子接口,可以对集合中的键值元素进行排序
Queue队列接口,实现队列操作
Map.EntryMap 的内部接口,描述 Map 中的一个键值对元素

Collection接口

集合中最基础的父接口,存放无序、不唯一的对象,一般不用,不能被实例化,只能来规范定义

Collection常用的方法:

方法描述
int size()获取集合长度
boolean isEmpty()判断集合是否为空
boolean contains(Object o)判断集合中是否存在某个对象
Iterator iterator()实例化 Iterator 接口,遍历集合
Object[] toArray()将集合转换为一个 Object 类型的对象数组
boolean add(E e)向集合中添加元素
boolean remove(Object o)从集合中移除元素
boolean containsAll(Collection c)判断集合中是否存在某个集合的所有元素
boolean addAll(Collection c)向集合中添加某个集合的所有元素
boolean removeAll(Collection c)从集合中移除某个集合中的所有元素
void clear()清除集合中的所有元素
boolean equals(Object o)判断两个集合是否相等
int hashCode()获取集合的散列值

Collection 子接口

list:存放有序 、不唯一的元素

set:存放无序、唯一的元素

Queue:队列接口

list

在Collection接口上进行扩展

方法描述
E get(int index)通过下标获取指定位置的元素
E set(int index,E element)替换集合中指定位置的元素
void add(int index,E element)向集合中指定位置添加元素
E remove(int index)通过下标删除集合中指定位置的元素
int indexOf(Object o)查找某个对象在集合中的位置
int lastIndexOf(Objec o)从后向前查找某个对象在集合中的位置
ListIterator listIterator()实例化 ListIterator 接口
List subList(int index1,int index2)获取集合中的子集合(左闭右开)
List 接口的实现类

ArrayList 是最常用的 List 接口实现类

示例代码:

public static void main(String[] args) {ArrayList<Object> list = new ArrayList<>();list.add("java");list.add("javaSE");list.add("javaEE");list.add("spring");System.out.println("测试get获取方法");System.out.println(list.get(0));System.out.println("\n测试set替换方法");list.set(0, "shuwu");System.out.println("替换后的值为");System.out.println(list.get(0));System.out.println("\n测试remove移除方法");list.remove(0);System.out.println("当前数组元素:");System.out.println(list);System.out.println("\n测试indexOf移除方法");System.out.println("javaEE的位置index:"+list.indexOf("javaEE"));System.out.println("\n测试lastIndexOf方法");System.out.println("spring的位置index:"+list.lastIndexOf("spring"));System.out.println("\n测试迭代器输出数组..");System.out.println("数组长度为:"+list.size());ListIterator<Object> iterator = list.listIterator();while (iterator.hasNext()){System.out.println(iterator.next());}System.out.println("\n测试subList方法");List<Object> objects = list.subList(0, 2);System.out.println("新数组:"+objects.toString());}

输出:

image-20250306175809601

Set 接口

Set 是 Collection 的子接口,Set 接口以散列的形式存储数据,所以元素没有顺序,可以存储一组无序且唯一的对象

Set 接口的实现类

HashSet 是开发中经常使用的实现类,存储一组无序且唯一的对象,无序是指元素的存储顺序和遍历顺序不一致

public static void main(String[] args) {HashSet set = new HashSet();set.add("Hello");set.add("World");set.add("Java");set.add("Hello");System.out.println(set.size());Iterator iterator = set.iterator();while (iterator.hasNext()) {System.out.println(iterator.next());}set.remove("World");System.out.println("删除之后的遍历");iterator = set.iterator();while (iterator.hasNext()) {System.out.println(iterator.next());}
}

image-20250306180036987

LinkedHashSet 是 Set 的另外一个子接口,可以存储一组有序且唯一的元素,有序是指元素的存储顺序和遍历顺序一致

public static void main(String[] args) {LinkedHashSet set = new LinkedHashSet();set.add("Hello");set.add("World");set.add("Java");set.add("Hello");System.out.println(set.size());Iterator iterator = set.iterator();while (iterator.hasNext()) {System.out.println(iterator.next());}set.remove("World");System.out.println("删除之后遍历集合");iterator = set.iterator();while (iterator.hasNext()){System.out.println(iterator.next());}
}

输出:

image-20250306214549548

如果我们要让在set存入对象的时候会判断set集合里面是否有这个元素(对象)

public static void main(String[] args) {HashSet set = new HashSet();set.add(new A(1));set.add(new A(1));System.out.println(set);
}

怎么实现set集合里面只保存一个呢?

那如何判断两个对象是否相等呢,首先调用 hashCode 方法,如果 hashCode 的值不一样,则直接可以判定两个对象不相等,如果 hashCode 的值相等,再通过 equals 方法来判断两个对象是否相等。

所以我们要重写hashCode 方法和equals 方法

@Override
public int hashCode() {return num;
}@Override
public boolean equals(Object obj) {A a = (A) obj;return a.num == this.num;
}

重写后set集合里面只有一个对象啦

image-20250306214844744

相关文章:

集合框架、Collection、list、ArrayList、Set、HashSet和LinkedHashSet、判断两个对象是否相等

DAY7.1 Java核心基础 集合框架 Java 中很重要的一个知识点&#xff0c;实际开发中使用的频录较高&#xff0c;Java 程序中必备的模块 集合就是长度可以改变&#xff0c;可以保存任意数据类型的动态数组 最上层是一组接口&#xff0c;接下来是接口的实现类&#xff0c;第三层…...

宝塔 Linux 计划任务中添加运行项目网站PHP任务-定时任务

一、指定php版运行&#xff0c; cd /www/wwwroot/www.xxx.com/ && /www/server/php/56/bin/php think timedtasks start >> /tmp/timedtasks.log 2>&1 二、不指定php版 cd /www/wwwroot/www.xxx.com/ && php think timedtasks start >> …...

JDK ZOOKEEPER KAFKA安装

JDK17下载安装 mkdir -p /usr/local/develop cd /usr/local/develop 将下载的包上传服务器指定路径 解压文件 tar -zxvf jdk-17.0.14_linux-x64_bin.tar.gz -C /usr/local/develop/ 修改文件夹名 mv /usr/local/develop/jdk-17.0.14 /usr/local/develop/java17 配置环境变量…...

c++雅兰亭库 (yalantinglibs) 介绍及使用(序列化、json和结构体转换、协程

c雅兰亭库 (yalantinglibs) 介绍及使用(序列化、json和结构体转换、协程)-CSDN博客 雅兰亭库(yalantinglibs)介绍 雅兰亭库&#xff0c;名字很优雅&#xff0c;也很强大。它是阿里开源的一个现代C基础工具库的集合, 现在包括 struct_pack, struct_json, struct_xml, struct_yam…...

深度融合,智领未来丨zAIoT 全面集成 DeepSeek,助力企业迎接数据智能新时代

前言 Introduction 在数字化浪潮汹涌澎湃的当下&#xff0c;数据智能成为企业破局与创新的关键驱动力。zAIoT 作为云和恩墨面向 AIData 时代推出的数据智能平台软件&#xff0c;凭借其全面且强大的“采存算用”一体化功能体系&#xff0c;正在为航空航天、工业制造等领域和态势…...

类和对象—多态—案例2—制作饮品

案例描述&#xff1a; 制作饮品的大致流程为&#xff1a;煮水-冲泡-倒入杯中-加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作产品基类&#xff0c;提供子类制作咖啡和茶叶 思路解析&#xff1a; 1. 定义抽象基类 - 创建 AbstractDrinking 抽象类&#xff0c;该类…...

VSCode 配置优化指南:打造高效的 uni-app、Vue2/3、JS/TS 开发环境

VSCode 配置优化指南,适用于 uni-app、Vue2、Vue3、JavaScript、TypeScript 开发,包括插件推荐、设置优化、代码片段、调试配置等,确保你的开发体验更加流畅高效。 1. 安装 VSCode 如果你还未安装 VSCode,可前往 VSCode 官网 下载最新版并安装。 2. 安装推荐插件 (1) Vue…...

低代码平台的后端架构设计与核心技术解析

引言&#xff1a;低代码如何颠覆传统后端开发&#xff1f; 在传统开发模式下&#xff0c;一个简单用户管理系统的后端开发需要&#xff1a; 3天数据库设计5天REST API开发2天权限模块对接50个易出错的代码文件 而现代低代码平台通过可视化建模自动化生成&#xff0c;可将开发…...

Redis中多大的Key算热key,该如何解决

在 Redis 中&#xff0c;“热key” 是指频繁访问的 Redis 键。这些键通常会导致 Redis 服务器的性能下降&#xff0c;甚至可能导致 Redis 服务不可用。热key 的大小是相对的&#xff0c;通常来说&#xff0c;以下几个因素可能导致一个 Redis 键成为热key&#xff1a; 访问频率…...

机器学习数学基础:43.外生变量与内生变量

外生变量与内生变量&#xff1a;模型中的因果角色 在因果模型&#xff08;像结构方程模型、回归分析这类&#xff09;里&#xff0c;外生变量和内生变量是用来区分变量来源和相互关系的重要概念。下面从定义、实例、差异以及应用场景四个方面来详细介绍&#xff1a; 一、定义…...

单元测试与仿真程序之间的选择

为什么写这篇文章 现在的工作需求&#xff0c;让我有必要总结和整理一下。 凡事都有适用的场景。首先这里我需要提示一下&#xff0c;这里的信息&#xff0c;可能并不普适。 但是可以肯定一点的是&#xff0c;有些人&#xff0c;不论做事还是写书&#xff0c;上下文还没有交待…...

一周学会Flask3 Python Web开发-SQLAlchemy简介及安装

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射&#xff08;ORM&#xff09;工具&#xff0c;…...

【玩转正则表达式】正则表达式常用语法汇总

1. 基本字符 普通字符&#xff1a;匹配自身。例如&#xff0c;正则表达式hello匹配字符串中的“hello”。\d&#xff1a;匹配任何数字字符&#xff0c;相当于[0-9]。例如&#xff0c;\d\d\d匹配三个连续的数字。 示例&#xff1a;123、456 \w&#xff1a;匹配任何字母数字字符…...

django中序列化器serializer 的高级使用和需要注意的点

在 Django REST framework(DRF)中,序列化器(Serializer)是一个强大的工具,用于将复杂的数据类型(如 Django 模型实例)转换为 Python 原生数据类型,以便将其渲染为 JSON、XML 等格式,同时也能将接收到的外部数据反序列化为 Django 模型实例。以下将介绍序列化器的高级…...

如何下载安装 PyCharm?

李升伟 整理 一、下载 PyCharm 访问官网 打开 PyCharm 官网&#xff0c;点击 "Download" 按钮25。 版本选择&#xff1a; 社区版&#xff08;Community&#xff09;&#xff1a;免费使用&#xff0c;适合个人学习和基础开发。 专业版&#xff08;Professional&#…...

URL中的特殊字符与web安全

在现代Web应用中&#xff0c;URL作为客户端与服务器之间的通信桥梁&#xff0c;承载着大量的重要信息。URL中的特殊字符&#xff0c;看似只是一些常见的符号&#xff0c;但在Web安全领域&#xff0c;它们与其他安全知识密切相关&#xff0c;如在Base64编码、SQL注入&#xff0c…...

Golang学习笔记_41——观察者模式

Golang学习笔记_38——享元模式 Golang学习笔记_39——策略模式 Golang学习笔记_40——模版方法模式 文章目录 一、核心概念1. 定义2. 解决的问题3. 核心角色4. 类图 二、特点分析三、适用场景1. 股票价格监控系统2. 物联网设备状态监控3. 电商订单状态通知 四、Go语言实现示例…...

中原银行:从“小机+传统数据库”升级为“OceanBase+通用服务器”,30 +系统成功上线|OceanBase DB大咖说(十五)

OceanBase《DB 大咖说》第 15 期&#xff0c;我们邀请到了中原银行金融科技部数据团队负责人&#xff0c;吕春雷。本文为本期大咖说的精选。 吕春雷是一位资历深厚的数据库专家&#xff0c;从传统制造企业、IT企业、甲骨文公司到中原银行&#xff0c;他在数据库技术与运维管理…...

slam学习笔记9---ubuntu2004部署interactive_slam踩坑记录

背景&#xff1a;interactive_slam是一款可用于离线优化点云地图算法。部署安装容易出问题&#xff0c;这里记录一下。 一、安装基本流程 绝大部分跟着readme走&#xff0c;g2o安装使用apt安装 interactive_slam depends on the following libraries:GL3W GLFW Dear ImGui p…...

MVC模式全解析

MVC 模式&#xff1a;概念与架构基石 在软件开发的广袤宇宙中&#xff0c;MVC 模式宛如一颗璀璨的恒星&#xff0c;照亮了无数开发者前行的道路。它是一种经典的软件架构模式&#xff0c;全称为 Model - View - Controller&#xff0c;即模型 - 视图 - 控制器 &#xff0c;将应…...

游戏引擎学习第140天

回顾并为今天的内容做准备 目前代码的进展到了声音混音的部分。昨天我详细解释了声音的处理方式&#xff0c;声音在技术上是一个非常特别的存在&#xff0c;但在游戏中进行声音混音的需求其实相对简单明了&#xff0c;所以今天的任务应该不会太具挑战性。 今天我们会编写一个…...

LeetCode热题100JS(44/100)第八天|二叉树的直径|二叉树的层序遍历|将有序数组转换为二叉搜索树|验证二叉树搜索树|二叉搜索树中第K小的元素

543. 二叉树的直径 题目链接&#xff1a;543. 二叉树的直径 难度&#xff1a;简单 刷题状态&#xff1a;1刷 新知识&#xff1a; 解题过程 思考 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,4,5] 输出&#xff1a;3 解释&#xff1a;3 &#xff0c;取路径 [4,2,1,3] 或…...

【虚拟化】Hyper-V 与 WSL 2

关于 Hyper-V 与 WSL 2 的简介 Hyper-V 是微软出的 Type-I 型 Hypervisor&#xff0c;根据微软官方说 WSL 2 用了 Hyper-V 架构的子集&#xff0c;称为虚拟机平台&#xff08;Virtual Machine Platform&#xff09;&#xff0c;是 Windows 中的一个可选组件&#xff0c;所以你…...

力扣刷题DAY6(滑动窗口/中等+栈/简单、中等)

一、滑动窗口 找到字符串中所有字母异位词 方法一&#xff1a;哈希表 class Solution { public:vector<int> findAnagrams(string s, string p) {vector<int> ans;unordered_map<char, int> target;for (int i 0; i < p.size(); i) {target[p[i]];}in…...

MySQL中的共享锁和排他锁

MySQL 中的锁可以从多个维度进行分类&#xff0c;其中从模式上可以分为共享锁&#xff08;Shared Lock&#xff0c;S Lock&#xff09;和 排他锁&#xff08;Exclusive Lock&#xff0c;X Lock&#xff09;。 共享锁&#xff08;Shared Lock&#xff0c;S Lock&#xff09; 共…...

HarmonyOS ArkTS声明式UI开发实战教程

引言&#xff1a;为何选择ArkTS&#xff1f; 在HarmonyOS生态快速发展的当下&#xff0c;ArkTS作为新一代声明式UI开发框架&#xff0c;正在引发移动应用开发范式的变革。笔者曾在多个跨平台框架开发中经历过"命令式编程之痛"&#xff0c;直到接触ArkTS后才发现&…...

【AI】【Unity】关于Unity接入DeepseekAPI遇到的坑

前言 由于deepseek网页端在白天日常抽风&#xff0c;无法正常的使用&#xff0c;所以调用API就成了目前最好的选择&#xff0c;尤其是Deepseek的API价格低得可怕&#xff0c;这不是和白送的一样吗&#xff01;然后使用过很多本地部署接入API的方式&#xff0c;例如Chatbox、Pa…...

虚拟机 | Ubuntu图形化系统: open-vm-tools安装失败以及实现文件拖放

系列文章目录 虚拟机 | Ubuntu 安装流程以及界面太小问题解决 文章目录 系列文章目录虚拟机 | Ubuntu 安装流程以及界面太小问题解决 前言一、VMware Tools 和 open-vm-tools 是什么1、VMware Tools2、open-vm-tools 二、推荐使用open-vm-tools&#xff08;简单&#xff09;1、…...

zabbix 监控的内存溢出问题 out of memory

zabbix 由于是docker 建置 zabbix-server-server 在web端出现异常情况 经过检查发现docker status 显示Restarting (0) 4 seconds ago 频繁在重起 经过docker logs 分析查看到 __zbx_shmem_malloc(): out of memory (requested 256 bytes) 问题 191:20250306:023902.993 m…...

【DeepSeek】Ubuntu快速部署DeepSeek(Ollama方式)

文章目录 人人都该学习的DeepSeekDeepSeek不同版本功能差异DeepSeek与硬件直接的关系DeepSeek系统兼容性部署方式选择部署步骤&#xff08;Ollama方式&#xff09;1.选定适合的deepseek版本2.环境准备3.安装Ollama4.部署deepseek5.测试使用 人人都该学习的DeepSeek DeepSeek 作…...