一、包含与删除两种方法解析

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方法的更多相关文章

  1. Java基础(37)ArrayList的remove方法

    1.问题描述 给定两个字符串 s 和 t,它们只包含小写字母. 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母. 请找出在 t 中被添加的字母. 输入: s = "abcd& ...

  2. Java连载88-HashSet集合与hashCode方法重写

    一.Set集合 1.HashSet底层实际上是一个HashMap,HashMap底层采用了哈希表数据结构. 2.哈希表又称为散列表,哈希表底层是一个数组,这个数组中每一个元素是一个单向链表,每个单向链 ...

  3. Java连载86-List集合详解

    一.List集合 1.List集合存储元素的特点: (1)有序(List集合中存储有下标)​:存进去是这样的顺序,取出来还是按照这个顺序取出​. (2)可重复 2.深入ListJ集合 ArrayLis ...

  4. Java中List集合去除重复数据的方法

    1. 循环list中的所有元素然后删除重复 public static List removeDuplicate(List list) { for ( int i = 0 ; i < list. ...

  5. Java中List集合去除重复数据的方法1

    1. 循环list中的所有元素然后删除重复 public   static   List  removeDuplicate(List list)  {         for  ( int  i  = ...

  6. Java连载29-方法执行内存分析、方法重载

    一.JVM包含三个内存区:栈内存.堆内存.方法区内存 二.注意点 (1)在MyEclipse中字体是红色的是一个类的名字,并且这个类除了我们自定义的类是JavaSE类库中自带的 (2)其实JavaSE ...

  7. Java连载63-异常处理try...catch...、方法getMessageyu printStackTrace

    一.处理异常的第二种方法 1.try......catch... 语法: try{ 可能出现异常的代码: }catch{ 处理异常的代码: }catch{ 注意: (1)引入了什么异常,catch里面 ...

  8. Java连载41-this关键字其他注意事项、static方法

    一.this关键字 1.this在多数情况下都会省略 2.this不能用在含有static的方法之中. 3.static的方法的调用是不需要对象的,直接使用格式:类名.方法名:没有当前对象,自然不能访 ...

  9. Java连载76-基础数据类型包装类型及其方法简介

    一.java中八种基本数据类型对应的包装类型 基本数据类型      包装类型 byte                    java.lang.Byte short                ...

随机推荐

  1. Django-1.10支持中文用户注册登录

    让django 支持中文注册登录,支持中文用户名cat django的models文件发现调的如下两个类 class AbstractUser(AbstractBaseUser, Permission ...

  2. Apache 安装 静态编译 动态编译

    2014-09-19 09:53 (分类:Linux) 排名第一的web服务器. (linux环境:CentOS release 6.5 (Final)) 安装出错:如下 configure: err ...

  3. centos6.x下使用xinetd管理rsync服务

    系统环境说明:centos6.x,centos7.x下rsync直接可由systemd管理(无需使用xinetd). [root@meinv01 ~]# rpm -qa|grep xinetd [ro ...

  4. MySQL 数据库的提速器-写缓存(Change Buffer)

    写缓存(Change Buffer) 是一种特殊的数据结构,用于在对数据变更时,如果数据所在的数据页没有在 buffer pool 中的话,在不影响数据一致性的前提下,InnoDB 引擎会将对数据的操 ...

  5. linux学习--1. 文件系统

    文件目录结构 闲话篇: linux我也是最近才开始学,写随笔是为分享学习经验的同时也留着供自己以后来参考.因为linux一切皆文件的基本哲学思想.所以我决定从文件目录开始写. 正文: 首先linux文 ...

  6. Linux运维---1.Ceph分布式存储架构及工作原理

    Ceph理论 Ceph 简介 Ceph 是一个开源项目,它提供软件定义的.统一的存储解决方案 .Ceph 是一个具有高性能.高度可伸缩性.可大规模扩展并且无单点故障的分布式存储系统 . Ceph 是软 ...

  7. Android9.0 Settings 修改踩坑记录

    问题现象 上图展示的很清楚,当系统语言为中文时,PreferenceScreen 中的折叠项 summary 描述重复显示的 bug,系统语言为英文时正常. 修改历程 先搜索 当前显示了 字符串,还真 ...

  8. PMP--1.7 项目治理

    治理凌驾于管理之上 组织治理用于影响项目治理. 组织治理需要组织根据组织文化.项目类型和组织需求裁剪治理框架,适用于当前组织. 其实组织治理的内容,在项目管理初期不需要详细了解,组织治理的内容都是高层 ...

  9. C++中static关键字的用法

    运行一个完整的程序.我们可将整个存储区分为四块: (1)栈区:就比如局部变量,对应的函数参数等这些,调用完之后相应的内存会自己释放掉,很让人省心. (2)堆区:堆来堆去的.得要人动手.所以得我们自己手 ...

  10. 应用场景不同,是无代码和低代码的最大区别 ZT

    随着媒体对低代码.无代码等先进技术的持续关注,我们发现大多数人都听说过低代码开发和无代码开发这两个概念,但是对两者之间的区别其实并不清楚.事实上,低代码开发和无代码开发之间存在着很多非常显著的差异,如 ...