Java_自定义实体类的列表List<T>调用remove()失败讲解

示例1

  • 前提:

    新建一个主类Demo1

  • 需求:

    在一个列表中有三条String的数据,想要使用remove(Object o)删掉其中一条。

  • 结果:

    remove(Object o)成功把数据删掉。

示例2

  • 前提:

    新建一个自定义实体类DataExample和一个主类Demo

  • 需求:

    在一个列表中有三条实体类的数据,想要使用remove(Object o)删掉其中一条。

  • 结果:

    得到失败数据,remove(Object o)根本没有起作用把数据删掉。

java 复制代码
public class DataExample {

	private final String name;
	private int age;

	public DataExample(String name,int age) {
    	this.name=name;
    	this.age=age;
	}

	public DataExample(String name) {
		this.name = name;
	}

	public String getName() {
		return this.name;
	}

	void setAge(int age) {
		this.age = age;
	}

	public int getAge() {
		return this.age;
	}

}
java 复制代码
import java.util.ArrayList;
import java.util.List;

public class Demo {

	public static void main(String[] args) {

		List<DataExample> test1 = new ArrayList<>();
		
		test1.add(new DataExample("1",1));
		test1.add(new DataExample("2",2));
		test1.add(new DataExample("3",3));

		test1.remove(new DataExample("3",3));
		
		for(int i=0;i<test1.size();i++) {
			System.out.println(test1.get(i).getName()+":"+test1.get(i).getAge());
		}
	}

}

通俗易懂知识讲解

以上两个示例都是List删除数据,唯一不同的是列表类型。一个是String,一个是自定义的实体类DataExample。

首先,remove(Object o)删除是需要作比较,也就是equals方法。

因为String已经实现了 equals 方法来比较字符串内容,因此可以直接使用 remove 方法来删除指定的字符串。

但是自定义的实体类DataExample并没有实现自己的 equals 方法,所以 remove 方法也就没有用。

所以一般来说,在新建自定义的实体类之后,会要重写一个属于自己的 equals 方法。

java 复制代码
	@Override
	public boolean equals(Object o) {
		if (o == this)
			return true;
		if (!(o instanceof DataExample))
			return false;
		DataExample other = (DataExample) o;
		if (this.getName() == null ? other.getName() != null : !this.getName().equals(other.getName()))
			return false;
		if (this.getAge() != other.getAge())
			return false;
		return true;
	}

成功删除

拓展

自定义的实体类需要读的源码:Lombok的@Data注解

官网:https://projectlombok.org/features/Data

在进入项目后这种问题其实不用担心,但是你可以多掌握一点原理。

因为工作中的项目一般会引入Lombok,然后使用注解解决这些繁琐的小问题。

相关推荐
cur1es6 分钟前
【JVM类加载&双亲委派模型&垃圾回收机制】
java·jvm·gc·垃圾回收·类加载·双亲委派模型
Mr.朱鹏12 分钟前
JVM-GC垃圾回收案例
java·jvm·spring boot·算法·spring·spring cloud·java-ee
焦糖玛奇朵婷35 分钟前
实测扭蛋机小程序:开发简单,互动有趣
java·大数据·程序人生·小程序·软件需求
Nan_Shu_61435 分钟前
学习: 尚硅谷Java项目之小谷充电宝(3)
java·后端·学习
wzqllwy39 分钟前
8 大经典排序算法(Java 实现):原理 + Demo + 核心分析
java·算法·排序算法
智能工业品检测-奇妙智能39 分钟前
AIFlowy如何实现与现有Spring Boot项目的无缝集成?
java·spring boot·后端
We་ct40 分钟前
LeetCode 77. 组合:DFS回溯+剪枝,高效求解组合问题
开发语言·前端·算法·leetcode·typescript·深度优先·剪枝
從南走到北42 分钟前
JAVA无人共享无人健身房物联网结合系统源码支持小程序+公众号+APP+H5
java·物联网·小程序
格林威42 分钟前
工业相机图像高速存储(C#版):内存映射文件方法,附Basler相机C#实战代码!
开发语言·人工智能·数码相机·c#·机器视觉·工业相机·堡盟相机
Nuopiane43 分钟前
MyPal3(3)
java·开发语言