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

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. expect知识梳理

    1 expect expect软件用于实现非交互式操作,实际应用中常用于批量部署,可以帮助运维人员管理成千上万台服务器. expect实现非交互式操作主要是在程序发出交互式询问时,按条件传递程序所需的 ...

  2. 浅析Internet上使用的安全协议

    Internet上使用的安全协议 网络安全是分层实现的,从应用层安全到数据链路层安全. 一.运输层安全协议:安全套接字SSL 1.1.简介 SSL 是安全套接层 (Secure Socket Laye ...

  3. 分享下超实用的用skura frp做内网穿透的经验

    操作目的: 使无公网ip的主机能被外网访问,实现ssh对服务器的远程管理 硬件准备: 1.服务端:skura frp主机(skura frp 免费提供,有待创建) 2.客户端:接在无线路由器(内网)上 ...

  4. centos下mysql中table大小写改为不敏感

    项目由win系统部署到linux系统下,启动项目报错如下: Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: ...

  5. 邓 【PHP大全】

    获取对应的时间戳(只保存月底的时间戳) function getTimeDate($timeType, $time, $count) { switch ($timeType) { case 'MONT ...

  6. go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin)

    目录 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin) zipkin使用demo 数据持久化 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin ...

  7. Eclipse安装WebJavaEE插件、Eclipse编写HTML代码(综合问题统一记录)

    1 Eclipse没有Web插件和JavaEE插件咋整 1.1 在Eclipse中菜单help选项中选择install new software选项 1.2 在work with 栏中输入 http: ...

  8. qt creator源码全方面分析(2-9)

    目录 Semantic Highlighting 通用高亮 高亮和折叠块 Semantic Highlighting Qt Creator将C++,QML和JavaScript语言理解为代码,而不是纯 ...

  9. CSRF防护

    CSRF防护 (待完善...)

  10. jQuery---小火箭返回顶部案例

    小火箭返回顶部案例 1. 滚动页面,当页面距离顶部超出1000px,显示小火箭. 封装在scroll函数里,当前页面距离顶部为$(window).scrollTop >=1000 小火箭显示和隐 ...