集合框架、Collection、list、ArrayList、Set、HashSet和LinkedHashSet、判断两个对象是否相等
DAY7.1 Java核心基础
集合框架
Java 中很重要的一个知识点,实际开发中使用的频录较高,Java 程序中必备的模块
集合就是长度可以改变,可以保存任意数据类型的动态数组
最上层是一组接口,接下来是接口的实现类,第三层是对集合进行各种操作的工具类。
| 接口 | 描述 |
|---|---|
| Collection | 集合框架最基本的接口,一个 Collection 可以存储一组无序、不唯一的对象 |
| List | Collection 的子接口,存储一组有序、不唯一的对象 |
| Set | Collection 的子接口,存储一组无序、唯一的对象 |
| Map | 独立于 Collection 的另外一个接口,存储一组键值对象、提供键到值的映射 |
| Iterator | 输出集合元素的接口,一般适用于无序集合,从前到后单向输出 |
| ListIterator | Iterator 的子接口,可以双向输出集合中的元素 |
| Enumeration | 传统的输出接口,已被 Iterator 所取代 |
| SortedSet | Set 的子接口,可以对集合中的元素进行排序 |
| SortedMap | Map 的子接口,可以对集合中的键值元素进行排序 |
| Queue | 队列接口,实现队列操作 |
| Map.Entry | Map 的内部接口,描述 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());}
输出:

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());}
}

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());}
}
输出:

如果我们要让在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集合里面只有一个对象啦

相关文章:
集合框架、Collection、list、ArrayList、Set、HashSet和LinkedHashSet、判断两个对象是否相等
DAY7.1 Java核心基础 集合框架 Java 中很重要的一个知识点,实际开发中使用的频录较高,Java 程序中必备的模块 集合就是长度可以改变,可以保存任意数据类型的动态数组 最上层是一组接口,接下来是接口的实现类,第三层…...
宝塔 Linux 计划任务中添加运行项目网站PHP任务-定时任务
一、指定php版运行, 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)介绍 雅兰亭库,名字很优雅,也很强大。它是阿里开源的一个现代C基础工具库的集合, 现在包括 struct_pack, struct_json, struct_xml, struct_yam…...
深度融合,智领未来丨zAIoT 全面集成 DeepSeek,助力企业迎接数据智能新时代
前言 Introduction 在数字化浪潮汹涌澎湃的当下,数据智能成为企业破局与创新的关键驱动力。zAIoT 作为云和恩墨面向 AIData 时代推出的数据智能平台软件,凭借其全面且强大的“采存算用”一体化功能体系,正在为航空航天、工业制造等领域和态势…...
类和对象—多态—案例2—制作饮品
案例描述: 制作饮品的大致流程为:煮水-冲泡-倒入杯中-加入辅料 利用多态技术实现本案例,提供抽象制作产品基类,提供子类制作咖啡和茶叶 思路解析: 1. 定义抽象基类 - 创建 AbstractDrinking 抽象类,该类…...
VSCode 配置优化指南:打造高效的 uni-app、Vue2/3、JS/TS 开发环境
VSCode 配置优化指南,适用于 uni-app、Vue2、Vue3、JavaScript、TypeScript 开发,包括插件推荐、设置优化、代码片段、调试配置等,确保你的开发体验更加流畅高效。 1. 安装 VSCode 如果你还未安装 VSCode,可前往 VSCode 官网 下载最新版并安装。 2. 安装推荐插件 (1) Vue…...
低代码平台的后端架构设计与核心技术解析
引言:低代码如何颠覆传统后端开发? 在传统开发模式下,一个简单用户管理系统的后端开发需要: 3天数据库设计5天REST API开发2天权限模块对接50个易出错的代码文件 而现代低代码平台通过可视化建模自动化生成,可将开发…...
Redis中多大的Key算热key,该如何解决
在 Redis 中,“热key” 是指频繁访问的 Redis 键。这些键通常会导致 Redis 服务器的性能下降,甚至可能导致 Redis 服务不可用。热key 的大小是相对的,通常来说,以下几个因素可能导致一个 Redis 键成为热key: 访问频率…...
机器学习数学基础:43.外生变量与内生变量
外生变量与内生变量:模型中的因果角色 在因果模型(像结构方程模型、回归分析这类)里,外生变量和内生变量是用来区分变量来源和相互关系的重要概念。下面从定义、实例、差异以及应用场景四个方面来详细介绍: 一、定义…...
单元测试与仿真程序之间的选择
为什么写这篇文章 现在的工作需求,让我有必要总结和整理一下。 凡事都有适用的场景。首先这里我需要提示一下,这里的信息,可能并不普适。 但是可以肯定一点的是,有些人,不论做事还是写书,上下文还没有交待…...
一周学会Flask3 Python Web开发-SQLAlchemy简介及安装
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,…...
【玩转正则表达式】正则表达式常用语法汇总
1. 基本字符 普通字符:匹配自身。例如,正则表达式hello匹配字符串中的“hello”。\d:匹配任何数字字符,相当于[0-9]。例如,\d\d\d匹配三个连续的数字。 示例:123、456 \w:匹配任何字母数字字符…...
django中序列化器serializer 的高级使用和需要注意的点
在 Django REST framework(DRF)中,序列化器(Serializer)是一个强大的工具,用于将复杂的数据类型(如 Django 模型实例)转换为 Python 原生数据类型,以便将其渲染为 JSON、XML 等格式,同时也能将接收到的外部数据反序列化为 Django 模型实例。以下将介绍序列化器的高级…...
如何下载安装 PyCharm?
李升伟 整理 一、下载 PyCharm 访问官网 打开 PyCharm 官网,点击 "Download" 按钮25。 版本选择: 社区版(Community):免费使用,适合个人学习和基础开发。 专业版(Professional&#…...
URL中的特殊字符与web安全
在现代Web应用中,URL作为客户端与服务器之间的通信桥梁,承载着大量的重要信息。URL中的特殊字符,看似只是一些常见的符号,但在Web安全领域,它们与其他安全知识密切相关,如在Base64编码、SQL注入,…...
Golang学习笔记_41——观察者模式
Golang学习笔记_38——享元模式 Golang学习笔记_39——策略模式 Golang学习笔记_40——模版方法模式 文章目录 一、核心概念1. 定义2. 解决的问题3. 核心角色4. 类图 二、特点分析三、适用场景1. 股票价格监控系统2. 物联网设备状态监控3. 电商订单状态通知 四、Go语言实现示例…...
中原银行:从“小机+传统数据库”升级为“OceanBase+通用服务器”,30 +系统成功上线|OceanBase DB大咖说(十五)
OceanBase《DB 大咖说》第 15 期,我们邀请到了中原银行金融科技部数据团队负责人,吕春雷。本文为本期大咖说的精选。 吕春雷是一位资历深厚的数据库专家,从传统制造企业、IT企业、甲骨文公司到中原银行,他在数据库技术与运维管理…...
slam学习笔记9---ubuntu2004部署interactive_slam踩坑记录
背景:interactive_slam是一款可用于离线优化点云地图算法。部署安装容易出问题,这里记录一下。 一、安装基本流程 绝大部分跟着readme走,g2o安装使用apt安装 interactive_slam depends on the following libraries:GL3W GLFW Dear ImGui p…...
MVC模式全解析
MVC 模式:概念与架构基石 在软件开发的广袤宇宙中,MVC 模式宛如一颗璀璨的恒星,照亮了无数开发者前行的道路。它是一种经典的软件架构模式,全称为 Model - View - Controller,即模型 - 视图 - 控制器 ,将应…...
游戏引擎学习第140天
回顾并为今天的内容做准备 目前代码的进展到了声音混音的部分。昨天我详细解释了声音的处理方式,声音在技术上是一个非常特别的存在,但在游戏中进行声音混音的需求其实相对简单明了,所以今天的任务应该不会太具挑战性。 今天我们会编写一个…...
LeetCode热题100JS(44/100)第八天|二叉树的直径|二叉树的层序遍历|将有序数组转换为二叉搜索树|验证二叉树搜索树|二叉搜索树中第K小的元素
543. 二叉树的直径 题目链接:543. 二叉树的直径 难度:简单 刷题状态:1刷 新知识: 解题过程 思考 示例 1: 输入:root [1,2,3,4,5] 输出:3 解释:3 ,取路径 [4,2,1,3] 或…...
【虚拟化】Hyper-V 与 WSL 2
关于 Hyper-V 与 WSL 2 的简介 Hyper-V 是微软出的 Type-I 型 Hypervisor,根据微软官方说 WSL 2 用了 Hyper-V 架构的子集,称为虚拟机平台(Virtual Machine Platform),是 Windows 中的一个可选组件,所以你…...
力扣刷题DAY6(滑动窗口/中等+栈/简单、中等)
一、滑动窗口 找到字符串中所有字母异位词 方法一:哈希表 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 中的锁可以从多个维度进行分类,其中从模式上可以分为共享锁(Shared Lock,S Lock)和 排他锁(Exclusive Lock,X Lock)。 共享锁(Shared Lock,S Lock) 共…...
HarmonyOS ArkTS声明式UI开发实战教程
引言:为何选择ArkTS? 在HarmonyOS生态快速发展的当下,ArkTS作为新一代声明式UI开发框架,正在引发移动应用开发范式的变革。笔者曾在多个跨平台框架开发中经历过"命令式编程之痛",直到接触ArkTS后才发现&…...
【AI】【Unity】关于Unity接入DeepseekAPI遇到的坑
前言 由于deepseek网页端在白天日常抽风,无法正常的使用,所以调用API就成了目前最好的选择,尤其是Deepseek的API价格低得可怕,这不是和白送的一样吗!然后使用过很多本地部署接入API的方式,例如Chatbox、Pa…...
虚拟机 | Ubuntu图形化系统: open-vm-tools安装失败以及实现文件拖放
系列文章目录 虚拟机 | Ubuntu 安装流程以及界面太小问题解决 文章目录 系列文章目录虚拟机 | Ubuntu 安装流程以及界面太小问题解决 前言一、VMware Tools 和 open-vm-tools 是什么1、VMware Tools2、open-vm-tools 二、推荐使用open-vm-tools(简单)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系统兼容性部署方式选择部署步骤(Ollama方式)1.选定适合的deepseek版本2.环境准备3.安装Ollama4.部署deepseek5.测试使用 人人都该学习的DeepSeek DeepSeek 作…...
