集合remove()方法相关问题

学习集合的过程中,了解到一个有关于remove()方法的有关特性,特此记录

首先remove方法的格式:

collection.remove(Object o);

这是指对集合collection内的某对应的元素o进行移除操作。

学习过程中,经过老师的提问,当我们将o换成一个匿名对象,是否也可以经过比较进行删除该元素?示例如下(创建一个Student类,类中只有age和name变量):

Collection collection = new ArrayList();
Student s1 = new Student(10,"a");
Student s2 = new Student(12,"b");
Student s3 = new Student(13,"c");

//添加三个元素
collection.add(s1);
collection.add(s2);
collection.add(s3);

//删除前
System.out.println(collection.size());
for (Object o: collection) {
     Student s = (Student) o;
     System.out.println(s.getAge() + s.getName());
}
collection.remove(new Student(10,"a"));
//删除后
System.out.println(collection.size());
for (Object o: collection) {
    Student s = (Student) o;
    System.out.println(s.getAge() + s.getName());
}

当运行这段代码后,结果为:

image-20220208221535151

也就是说,这个没法这样删除掉,那非要这么用可以做到吗

答案是可以的,这个涉及到remove方法中的源码(但是我很菜所以直接写上老师的回答,在此记录一下QWQ):

remove方法内的大致逻辑是,比较形参和集合内元素是否相等,这种相等不仅要元素内容相等,并且地址也要相同,其使用的方法为equals()方法进行的判断。

那么使用equals()判断就很简单了,在Student类中重写equals方法,让他不需要判断地址就可以了

@Override
public boolean equals(Object o) {
    if (this == o) 
        return true;
    if (o == null || getClass() != o.getClass()) 
        return false;
    Student student = (Student) o;
    return age == student.age && Objects.equals(name, student.name);
    }

当重写之后,针对remove方法中使用的equals方法也就重写了,这样就可以不必比较地址,以同样的代码运行,结果为:

image-20220208222033112

10 a的结果少了,说明删除成功。


这个解释不够完美,没有涉及很底层,因为在我现在的认知里,接口的方法是没有方法体的,我不理解没有方法体如何实现方法,所以这里只是先做个笔记,如果有懂的大佬,可以指导我一下吗谢谢QWQ

再者,就是赞赏一下idea真是方便鸭,重写equals方法直接快捷点几个按键就直接帮我生成了!好感+1

推荐这些文章:

字符串的比较相关方法

==是进行对象的地址值比较,如果需要字符串的内容比较,可以使用两个方法:public boolean equals(Object obj):参数可以是任何对象,只有参数是一个字符串并且内容相同的才会给出true;否则返回false。

1 String str1 = "Hello";
2 String str2 = "Hello";
3 char[] charArray = {'H','e','l','l','o'};
4 String str3 = new String(charArray);
5
6 ...

集合-collection

 

 
 

1. List接口框架
*
* |----Collection接口:单列集合,用来存储一个一个的对象
* |----List接口:存储有序的、可重复的数据。 -->“动态”数组,替换原有的数组
* |----ArrayList:作为List接口的主要实现类;线程不安全的,效率高;底层使用Object[] elementData存储
* |----LinkedList:对于频繁的插入、删除操作,使用此类效率比ArrayList高;底层使用双向链表存储
...

03字符串的比较相关方法

1 package com.Commonly;
2 /*
3 ==是进行对象的地址值比较,如果确实需要字符串的内容比较,可以使用两个方法:
4
5 public boolean equals(Object obj):参数可以是任何对象,只有参数是一个字符串并且内容相同的才会给true;否则返回false。
6 注意事项:
7 1.任何对象都能用Object进行接收。
8 2.equals方法具有对称性,也就是 a.equals(b)和b.equals(a)效果一样。
9 3.如果比较双方一个常量一个变量,推荐把常量字符串写在前面。
10 推荐:"abc".equals(...

【Object类equals方法联系】 看下列程序,不运行说结果,写出答案后,并在IntelliJ IDEA中运行看看自己给的答案与运行结果是否正确,并分析原因。

public class Test03 {
public static void main(String[] args) {
/* String s1 = new String("ABC");
String s2 = "ABC";
System.out.println(s1==s2);//false
System.out.println(s1.equals(s2));//true

System.out.println("2==============");
String s3 = "abc...

【Java】Collection集合存储学生对象并遍历

Student.java
package learnjava3;

public class Student {
private String name;
private int age;

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

public String getName() {
return name;
}

public voi...

java重写equals方法

在使用集合操作的remove时,会出现以下情况:
按照正常的方法是不能删除的,但是查看remove源码发现底层是用equal来判断到底remove中的参数是否存在于arrayList中的,在new Student("aaa",20)时,一般情况下显然与arraylist中的不是equal的,但我们如果重写用来比较两个Student对象的方法equal方法,令只要名字和年龄相同就认为是同一个对象就可以用remove删除
package collection;

import java.util.ArrayList;

/**
* ArrayList的使用
*/
public class D...

java toString()方法的使用

1.未重写toString()方法时
如使用下System.out.println()方法打印一个集合中的Student(自定义类型)类型的元素
Student类
package collection;

public class Student {
private String name;
private int age;
public Student(){}

public Student(String name, int age) {
this.name = name;
this.age = age;
}
//先将重写的toString()注...

java操作集合的工具类

Collections
操作Set、List和Map等集合的工具类
排序操作:
reverse(List):反转List集合中元素的顺序shuffle(List):对List集合元素进行随机排序sort:根据List元素的自然排序对集合元素进行升序排序sort(List,Comparator):根据指定的Comparator产生的顺序对List进行排序swap(List,int.int):将指定list集合中的元...

Java基础-集合Collection遍历的方式

package com.hspedu.collection_;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

@SuppressWarnings({"all"})
public class Course501 {
public static void main(String[] args) {
// 遍历集合Collection元素对象的方法

Collection collection = new ArrayList()...

集合(1)Collection接口的使用

集合的概念:对象的容器,定义了对多个对象进行操作的常用方法,可实现数组的功能。
和数组的区别:①数组长度固定,集合长度不固定
         ②数组可以存储基本类型和引用类型,而集合只能存储引用类型。
Collection体系:

 
Collection接口的使用:①添加元素--add();②删除元素--remove();③遍历元素--可用增强的for循环,也可使用迭代器Iterator。

/**
* Collection接口的使用
* 1.添加元素
* 2.删除元素
* 3.遍历元素
* 4.判断
* @author 长空扯淡
*/
pub...

文章标题:集合remove()方法相关问题
文章链接:https://www.dianjilingqu.com/50889.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
< <上一篇
下一篇>>