Java连载85-集合的Contains和Remove方法
一、包含与删除两种方法解析
1.boolean contains(Object o);判断集合中是否包含某个元素。
package com.bjpowernode.java_learning;
import java.util.*;
public class D85_1_ContainsMethod {
public static void main(String[] args) {
//创建集合
Collection c = new ArrayList();
//创建两个Integer类型的对象
Integer i1 = new Integer(10);
//添加元素
c.add(i1);
//判断集合中是否包含11
System.out.println(c.contains(i1));
///创建Integer类型的对象
Integer i2 = new Integer(10);
System.out.println(c.contains(i2));
//这里包含了i2说明了,contains底层调用了equals方法。如果equals返回了true,就是包含
Manager85 m1 = new Manager85(52,"jho");
c.add(m1);
Manager85 m2 = new Manager85(52,"jho");
System.out.println(c.contains(m2));
}
}
class Manager85{
int no;
String name;
Manager85(int no,String name){
this.no = no;
this.name = name;
}
public boolean equals(Object o){
if(this==o) return true;
if(o instanceof Manager85) {
Manager85 m = (Manager85)o;
if(this.no==m.no && this.name.equals(m.name)){
return true;
}
}
return false;
}
//总结创建一个类,要重写equals方法,才能对类中的数据进行对比,否则继承原来的equals只能是对比对象的地址
}

2.boolean remove(Object o);删除集合中某个元素。
总结:从这两次输出的结果就可以看出来,remove方法与contains方法在用法上是一致的
他们的底层全部都调用了equals方法来进行比较,因为在使用这个方法的时候,必须保证我们的原始类中equals方法已经被重写,否则就会得到意想不到的结果。
package com.bjpowernode.java_learning;
import java.util.*;
public class D85_2_RemoveMethod {
public static void main(String[] args) {
//创建集合对象
Collection c = new ArrayList();
Integer i1 = new Integer(10);
//添加元素
c.add(i1);
//删除
Integer i2 = new Integer(10);
c.remove(i2);
System.out.println(c.size());
Manager85 m1 = new Manager85(10,"ji");
c.add(m1);
Manager85 m2 = new Manager85(10,"ji");
c.remove(m2);
System.out.println(c.size());
}
}

3.深入remove方法
(1)迭代器的remove方法;
(2)集合自身的remove方法
package com.bjpowernode.java_learning;
import java.util.*;
import java.lang.Iterable;
public class D85_3_DeepIntoRemoveMethod {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add(1);//这里复习了自动装箱,int类型直接转化为Integer类型
c.add(2);
c.add(3);
//遍历
Iterator it = c.iterator();
while(it.hasNext()) {
Object element = it.next();
//删除
it.remove();//通过迭代器的remove方法删除
}
System.out.println(c.size());
Collection c2 = new ArrayList();
c2.add(1);//这里复习了自动装箱,int类型直接转化为Integer类型
c2.add(2);
c2.add(3);
Iterator it2 = c2.iterator();
while(it2.hasNext()) {
Object element = it2.next();
c2.remove(element);
}
}
}

解释:
(1)如果要是删除集合里的许多元素(一两个无所谓,直接用集合的remove方法了),这时候推荐使用代码中的第一种方法,迭代器的remove方法进行删除;
(2)之所以不推荐第二种,用集合自身所带的remove方法进行删除,是因为会报截图中的错误。产生这种错误是因为,当你初始化完一个迭代器之后,用迭代里的元素去删除集合里的元素时,删除第一个的时候还没有报错,但是删除第二的时候,迭代器初始化后的内容,与此时的集合内容不一样了(也就是集合少了一个元素,而迭代器还是完好的)产生了冲突,所以报错,推荐使用第一种方法。
三、源码:
D85_1_ContainsMethod.java
D85_2_RemoveMethod.java
D85_3_DeepIntoRemoveMethod.java
https://github.com/ruigege66/Java/blob/master/D85_1_ContainsMethod.java
https://github.com/ruigege66/Java/blob/master/D85_2_RemoveMethod.java
https://github.com/ruigege66/Java/blob/master/D85_3_DeepIntoRemoveMethod.java
2.CSDN:https://blog.csdn.net/weixin_44630050
3.博客园:https://www.cnblogs.com/ruigege0000/
4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

Java连载85-集合的Contains和Remove方法的更多相关文章
- Java基础(37)ArrayList的remove方法
1.问题描述 给定两个字符串 s 和 t,它们只包含小写字母. 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母. 请找出在 t 中被添加的字母. 输入: s = "abcd& ...
- Java连载88-HashSet集合与hashCode方法重写
一.Set集合 1.HashSet底层实际上是一个HashMap,HashMap底层采用了哈希表数据结构. 2.哈希表又称为散列表,哈希表底层是一个数组,这个数组中每一个元素是一个单向链表,每个单向链 ...
- Java连载86-List集合详解
一.List集合 1.List集合存储元素的特点: (1)有序(List集合中存储有下标):存进去是这样的顺序,取出来还是按照这个顺序取出. (2)可重复 2.深入ListJ集合 ArrayLis ...
- Java中List集合去除重复数据的方法
1. 循环list中的所有元素然后删除重复 public static List removeDuplicate(List list) { for ( int i = 0 ; i < list. ...
- Java中List集合去除重复数据的方法1
1. 循环list中的所有元素然后删除重复 public static List removeDuplicate(List list) { for ( int i = ...
- Java连载29-方法执行内存分析、方法重载
一.JVM包含三个内存区:栈内存.堆内存.方法区内存 二.注意点 (1)在MyEclipse中字体是红色的是一个类的名字,并且这个类除了我们自定义的类是JavaSE类库中自带的 (2)其实JavaSE ...
- Java连载63-异常处理try...catch...、方法getMessageyu printStackTrace
一.处理异常的第二种方法 1.try......catch... 语法: try{ 可能出现异常的代码: }catch{ 处理异常的代码: }catch{ 注意: (1)引入了什么异常,catch里面 ...
- Java连载41-this关键字其他注意事项、static方法
一.this关键字 1.this在多数情况下都会省略 2.this不能用在含有static的方法之中. 3.static的方法的调用是不需要对象的,直接使用格式:类名.方法名:没有当前对象,自然不能访 ...
- Java连载76-基础数据类型包装类型及其方法简介
一.java中八种基本数据类型对应的包装类型 基本数据类型 包装类型 byte java.lang.Byte short ...
随机推荐
- Django-1.10支持中文用户注册登录
让django 支持中文注册登录,支持中文用户名cat django的models文件发现调的如下两个类 class AbstractUser(AbstractBaseUser, Permission ...
- Apache 安装 静态编译 动态编译
2014-09-19 09:53 (分类:Linux) 排名第一的web服务器. (linux环境:CentOS release 6.5 (Final)) 安装出错:如下 configure: err ...
- centos6.x下使用xinetd管理rsync服务
系统环境说明:centos6.x,centos7.x下rsync直接可由systemd管理(无需使用xinetd). [root@meinv01 ~]# rpm -qa|grep xinetd [ro ...
- MySQL 数据库的提速器-写缓存(Change Buffer)
写缓存(Change Buffer) 是一种特殊的数据结构,用于在对数据变更时,如果数据所在的数据页没有在 buffer pool 中的话,在不影响数据一致性的前提下,InnoDB 引擎会将对数据的操 ...
- linux学习--1. 文件系统
文件目录结构 闲话篇: linux我也是最近才开始学,写随笔是为分享学习经验的同时也留着供自己以后来参考.因为linux一切皆文件的基本哲学思想.所以我决定从文件目录开始写. 正文: 首先linux文 ...
- Linux运维---1.Ceph分布式存储架构及工作原理
Ceph理论 Ceph 简介 Ceph 是一个开源项目,它提供软件定义的.统一的存储解决方案 .Ceph 是一个具有高性能.高度可伸缩性.可大规模扩展并且无单点故障的分布式存储系统 . Ceph 是软 ...
- Android9.0 Settings 修改踩坑记录
问题现象 上图展示的很清楚,当系统语言为中文时,PreferenceScreen 中的折叠项 summary 描述重复显示的 bug,系统语言为英文时正常. 修改历程 先搜索 当前显示了 字符串,还真 ...
- PMP--1.7 项目治理
治理凌驾于管理之上 组织治理用于影响项目治理. 组织治理需要组织根据组织文化.项目类型和组织需求裁剪治理框架,适用于当前组织. 其实组织治理的内容,在项目管理初期不需要详细了解,组织治理的内容都是高层 ...
- C++中static关键字的用法
运行一个完整的程序.我们可将整个存储区分为四块: (1)栈区:就比如局部变量,对应的函数参数等这些,调用完之后相应的内存会自己释放掉,很让人省心. (2)堆区:堆来堆去的.得要人动手.所以得我们自己手 ...
- 应用场景不同,是无代码和低代码的最大区别 ZT
随着媒体对低代码.无代码等先进技术的持续关注,我们发现大多数人都听说过低代码开发和无代码开发这两个概念,但是对两者之间的区别其实并不清楚.事实上,低代码开发和无代码开发之间存在着很多非常显著的差异,如 ...