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

news2025/3/14 19:01:02

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

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

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

相关文章

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 配置环境变量…

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

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

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

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

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

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射&#xff08;ORM&#xff09;工具&#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;他在数据库技术与运维管理…

游戏引擎学习第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] 或…

力扣刷题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…

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

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

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

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

升级到Android Studio 2024.2.2 版本遇到的坑

一、上来就编译报错&#xff0c;大概率是因为选择了替换安装&#xff0c;本地配置文件出错 找到本地当前版本的配置文件&#xff0c;删掉&#xff0c;重启studio就好了&#xff1a; 1、打开终端 2、“cd /Users/用户名/Library/Application\ Support/Google” //到Google目录 …

【ESP-ADF】在 VSCode 安装 ESP-ADF 注意事项

1.检查网络 如果您在中国大陆安装&#xff0c;请使用魔法上网&#xff0c;避免无法 clone ESP-ADF 仓库。 2.VSCode 安装 ESP-ADF 在 VSCode 左侧活动栏选择 ESP-IDF:explorer&#xff0c;展开 advanced 并点击 Install ESP-ADF 然后会出现选择 ESP-ADF 安装目录。 如果出现…

我的两个医学数据分析技术思路

我的两个医学数据分析技术思路 从临床上获得的或者公共数据库数据这种属于观察性研究&#xff0c;是对临床诊疗过程中自然产生的数据进行分析而获得疾病发生发展的规律等研究成果。再细分&#xff0c;可以分为独立危险因素鉴定和预测模型构建两种。 独立危险因素鉴定是一直以…

FPGA-DE2115开发板实现4位全加器、3-8译码器。

文章目录 一、安装quartus二、4位全加器三、3-8译码器&#xff08;8段数码管&#xff09;四、参考文章 一、安装quartus 安装quartus参考文章&#xff1a;Quartus Prime 18.0与ModelSim的安装 Quartus II 18.0安装教程&#xff08;非常详细&#xff09;从零基础入门到精通&…

Pytorch xpu环境配置 Pytorch使用Intel集成显卡

1、硬件集显要为Intel ARC并安装正确驱动 2、安装Intel oneAPI Base Toolkit &#xff08;https://www.intel.cn/content/www/cn/zh/developer/tools/oneapi/base-toolkit-download.html&#xff09;安装后大约20G左右&#xff0c;注意安装路径 3、安装Visual Studio Build To…

uploadlabs通关思路

目录 靶场准备 复现 pass-01 代码审计 执行逻辑 文件上传 方法一&#xff1a;直接修改或删除js脚本 方法二&#xff1a;修改文件后缀 pass-02 代码审计 文件上传 1. 思路 2. 实操 pass-03 代码审计 过程&#xff1a; 文件上传 pass-04 代码审计 文件上传 p…

优选算法的智慧之光:滑动窗口专题(二)

专栏&#xff1a;算法的魔法世界​​​​​​ 个人主页&#xff1a;手握风云 目录 一、例题讲解 1.1. 最大连续1的个数 III 1.2. 找到字符串中所有字母异位词 1.3. 串联所有单词的子串 1.4. 最小覆盖子串 一、例题讲解 1.1. 最大连续1的个数 III 题目要求是二进制数组&am…

【蓝桥杯单片机】第十二届省赛

一、真题 二、模块构建 1.编写初始化函数(init.c) void Cls_Peripheral(void); 关闭led led对应的锁存器由Y4C控制关闭蜂鸣器和继电器 由Y5C控制 2.编写LED函数&#xff08;led.c&#xff09; void Led_Disp(unsigned char ucLed); 将ucLed取反的值赋给P0 开启锁存器…

剑指 Offer II 047. 二叉树剪枝

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20047.%20%E4%BA%8C%E5%8F%89%E6%A0%91%E5%89%AA%E6%9E%9D/README.md 剑指 Offer II 047. 二叉树剪枝 题目描述 给定一个二叉树 根节点 root &#xff0c;树的每…