学习集合的过程中,了解到一个有关于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());
}

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

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

答案是可以的,这个涉及到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方法也就重写了,这样就可以不必比较地址,以同样的代码运行,结果为:

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


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

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

集合remove()方法相关问题的更多相关文章

  1. Iterator的remove方法可保证从源集合中安全地删除对象(转)

    如果对正在被迭代的集合进行结构上的改变(即对该集合使用add.remove或clear方法),那么迭代器就不再合法(并且在其后使用该迭代器将会有ConcurrentModificationExcept ...

  2. 【转载】C#中List集合使用Remove方法移除指定的对象

    在C#的List集合操作中,有时候需要将特定的对象或者元素移除出List集合序列中,此时可使用到List集合的Remove方法,Remove方法的方法签名为bool Remove(T item),it ...

  3. Java集合使用之next方法与remove方法 | Java集合使用之remove方法使用易错

    Iterator接口的remove方法将会删除上次调用next方法时返回的元素. next方法和remove方法的调用具有相互依赖性,如果调用remove方法前没有调用next方法是不合法的. 错误使 ...

  4. Lambda 表达式遍历集合时用remove方法删除list集合中满足条件的元素问题

    一:循环遍历list集合的四种方式 简单for循环 iterator循环 增加for循环 Lanbda表达式 二:四种遍历方式的用法示例 //简单for循环 List<SalaryAdjustm ...

  5. Day07_39_集合中的remove()方法 与 迭代器中的remove()方法

    集合中的remove()方法 与 迭代器中的remove()方法 深入remove()方法 iterator 中的remove()方法 collection 中的remove(Object)方法 注意 ...

  6. Day07_38_集合中的remove()方法

    集合中的remove()方法 remove() 移除集合中的一个指定对象 代码实例 package com.shige.Collection; import java.util.ArrayList; ...

  7. EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解

    前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...

  8. Java集合-Map接口相关操作方法

    Map接口不是Collection接口的继承.Map接口用于维护键/值对(key/value pairs). 该接口描述了从不重复的键到值的映射. (1) 添加.删除操作: Object put(Ob ...

  9. List<T>的IndexOf方法和Remove方法

    Microsoft地址 List<T>的IndexOf()方法 如果T是值类型的,就按照比较值的方法从列表的第一个元素开始逐个匹配,如果T是引用类型,就比较引用是否相同 举例如下: cla ...

随机推荐

  1. 基于内存的关系数据库memsql初探

    背景 广告系统中,算法模型预估需要根据广告的实时转化统计结果,才能做出更精准的预估:同时,支持多维度聚合查询(例如按照广告各个不同层级维度,按照时间不同粒度的维度),并跨大区合并.一开始的版本是基于m ...

  2. Chapter 21 G-Methods for Time-Varying Treatments

    目录 21.1 The g-formula for time-varying treatments 21.2 IP weighting for time-varying treatments 21.3 ...

  3. CS5268 Typec转HDMI+VGA+PD3.0四合一扩展坞转换器方案芯片

    Capstone CS5268AN是一款高性能Type-C/DP1.4至HDMI2.0b和VGA转换器,设计用于将USB Type-C源或DP1.4源连接至HDMI2.0b接收器.CS5268AN集成 ...

  4. RTD2172替代方案|TYPEC转HDMI4K@60HZ拓展坞|CS5265替代RTD2172

    瑞昱RTD2172是TYPEC转HDMI4K60HZ音视频数据转换器芯片.CS5265可以替代兼容RTD2172,除了实现同等的转换功能外且整体方案成本和性价比方面比RTD2172要高,且外围器件较少 ...

  5. Spring企业级程序设计 • 【第7章 Spring框架整合】

    全部章节   >>>> 本章目录 7.1 模型数据解析及控制器返回值 7.1.1 SSM框架环境搭建 7.1.1 ModelAndView多种用法 7.1.2 整合MyBati ...

  6. 编写Java程序,通过接口摸拟麦当劳食物生产过程,接口设计

    返回本章节 返回作业目录 需求说明: 通过接口摸拟麦当劳食物生产过程 实现思路: 通过接口摸拟麦当劳食物生产过程的实现思路: 创建接口食物(Food),该接口需要被所有的食物类所实现.在该接口中定义g ...

  7. html基础 有语义的布局标签

  8. JMeter_jmeter-plugins插件的安装使用

    一.安装JMter Plugins 1.官网下载 JMeter Plugins 的jar包 2. 将下载的jar包复制到 %JMETER_HOME%\lib\ext 目录下 3. 启动 JMeter ...

  9. Nginx日志通过Flume导入到HDFS中

    关注公众号:分享电脑学习回复"百度云盘" 可以免费获取所有学习文档的代码(不定期更新) flume上传到hdfs: 当我们的数据量比较大时,比如每天的日志文件达到5G以上 使用ha ...

  10. Go 中实现用户的每日限额(比如一天只能领三次福利)

    如果你写一个 bug 管理系统,用了这个 PeriodLimit 你就可以限制每个测试人员每天只能给你提一个 bug.工作是不是就轻松很多了? 如今微服务架构大行其道本质原因是因为要降低系统的整体复杂 ...