浅谈list.removeAll()删除失败的原因及解决

 更新时间:2020年12月03日 08:38:54   作者:xiangwang2016  
这篇文章主要介绍了浅谈list.removeAll()删除失败的原因及解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

未重写hashCode() 和 equals() 方法 ! 在实体类中重写这两个方法即可

ATTENTION:若实体类中还有实体类的属性,则该实体类也要重写这两个方法

(实际开发中存在删除失败的问题,待研究。暂采用Map删除方式)

实体类:

public class User {
 private String name;
 private int age;
 private String sex;
  //private Company company; // Company 类也要重写 hashCode() 和 equals() 方法
 
  //省略getter setter方法
 
 public User(String name, int age, String sex) {
 super();
 this.name = name;
 this.age = age;
 this.sex = sex;
 }
 
 public User() {
 super();
 } 
 
 @Override
 public String toString() {
 return "User [name=" + name + ", age=" + age + ", sex=" + sex + "]";
 }
}

测试类:

import java.util.ArrayList;
import java.util.List;
 
public class TestRemoveAll { 
 public static void main(String[] args) {
 //
 List<User> allList = new ArrayList<User>();
 allList.add(new User("张三",18,"男"));
 allList.add(new User("李四",20,"女"));
 //
 List<User> list = new ArrayList<User>();
 list.add(new User("张三",18,"男"));
 // 测试 
 if(allList.removeAll(list)){
 System.out.println("删除成功!");
 System.out.println(allList);
 }else{
 System.out.println("删除失败!");
 System.out.println(allList);
 }
 }
}

打印结果:

删除失败!

[User [name=张三, age=18, sex=男], User [name=李四, age=20, sex=女]]

删除失败原因:

未重写hashCode() 和 equals() 方法 ! 在User类中重写这两个方法即可

则打印结果:

删除成功!

[User [name=李四, age=20, sex=女]]

======================================================= 于此相似的问题:

list.contains()方法判断是否包含自定义对象,实体类也要重写这两个方法

import java.util.ArrayList;
import java.util.List;
 
public class TestRemoveAll {
 
 public static void main(String[] args) {
 //
 List<User> allList = new ArrayList<User>();
 allList.add(new User("张三",18,"男"));
 allList.add(new User("李四",20,"女"));
 //
 User user = new User("张三",18,"男");
 // 测试 
 if(allList.contains(user)){
 System.out.println("我重写了hashCode() equals() 方法 ,所以打印此条!");
 }else{
 System.out.println("若未重写hashCode() equals() 方法 ,则打印此条!");
 }
 } 
}

则打印结果:

我重写了hashCode() equals() 方法 ,所以打印此条!

补充知识:list.removeAll()方法异常

list的removeAll方法,可以从集合中移除集合,得到对应的补集。

但是,两种情况下会遇到异常

1.在遍历集合时执行移除操作。

2.集合是只读的,不支持remove方法。

例如。Arrays.asList(new Array({})产生的集合。

但是可以采用如下方法结局异常:

new ArrayList().addAll();

以上这篇浅谈list.removeAll()删除失败的原因及解决就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java多线程下载的实现方法

    Java多线程下载的实现方法

    复习多线程的时候,练习了下,顺便记录一下:
    2013-03-03
  • 使用MyBatis拦截器实现SQL的完整打印

    使用MyBatis拦截器实现SQL的完整打印

    当我们使用Mybatis结合Mybatis-plus进行开发时,为了查看执行sql的信息通常我们可以通过属性配置的方式打印出执行的sql语句,但这样的打印出了sql语句常带有占位符信息,不利于排错,所以本文介绍了构建MyBatis拦截器,实现SQL的完整打印,需要的朋友可以参考下
    2024-07-07
  • Java实现Redis的集合(set)命令操作

    Java实现Redis的集合(set)命令操作

    这篇文章主要介绍了Java实现Redis的集合(set)命令操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • 如何获得spring代理对象的原对象

    如何获得spring代理对象的原对象

    这篇文章主要介绍了如何获得spring代理对象的原对象的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • java中计算字符串长度的方法及u4E00与u9FBB的认识

    java中计算字符串长度的方法及u4E00与u9FBB的认识

    字符串采用unicode编码的方式时,计算字符串长度的方法找出UNICODE编码中的汉字的代表的范围“\u4E00” 到“\u9FBB”之间感兴趣的朋友可以参考本文,或许对你有所帮助
    2013-01-01
  • Java Predicate及Consumer接口函数代码实现解析

    Java Predicate及Consumer接口函数代码实现解析

    这篇文章主要介绍了Java Predicate及Consumer接口函数代码实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • java适配器模式如何让不兼容的接口变得兼容

    java适配器模式如何让不兼容的接口变得兼容

    这篇文章主要为大家介绍了java适配器模式如何让不兼容的接口变得兼容示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • SpringBoot整合Swagger2代码实例

    SpringBoot整合Swagger2代码实例

    这篇文章主要介绍了SpringBoot整合Swagger2代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • SpringBoot顶层接口实现类注入项目的方法示例

    SpringBoot顶层接口实现类注入项目的方法示例

    本文主要介绍了SpringBoot顶层接口实现类注入项目的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • @Value设置默认值后,获取不到配置值的原因分析

    @Value设置默认值后,获取不到配置值的原因分析

    这篇文章主要介绍了@Value设置默认值后,获取不到配置值的原因,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07

最新评论