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 ...
随机推荐
- Nginx 主要应用场景
前言 本文只针对 Nginx 在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解到过得.所以还请见谅,同时欢迎留言交流 ...
- Linux 配置ip 子接口 多网卡绑定
linux系统配置ip地址,图形化界面略过,这里只介绍文本行.做以下设置注意是否有此权限 查看当前路由及网关信息: [root@localhost ~]# netstat -r Kernel IP r ...
- css权重导致的样式不生效问题
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- python网络爬虫(二)requests库的基本介绍和使用
一.requests库的七个重要方法 (1)最常用方法:requests.get(url,params=None,**kwargs)//对应HTTP协议的GET()操作 (请求获得URL位置的资源) ...
- 本地与github建立连接,本地代码上传到github
1,已有github账号 2,本地已经安装git 3,本地创建ssh-key 在git bash中输入后直接回车. $ ssh-keygen -t rsa -C "your_email@yo ...
- codewars--js--Simple string expansion+ repeat(),includes()方法
问题描述: Consider the following expansion: solve("3(ab)") = "ababab" -- "ab&qu ...
- pikachu-跨站脚本漏洞(XSS)
一.跨站脚本漏洞概述 1.1 什么是XSS漏洞? XSS是一种发生在Web前端的漏洞,其危害的对象也主要是前端用户. 1.2 XSS如何攻击? 二.跨站脚本漏洞类型及测试流程 2.1 跨站脚本 ...
- C语言:字符串拷贝(截取)、查找
C语言:字符串拷贝(截取).查找 很惭愧,学了这么久别的语言,一直没有好好学C和C++,所以现在开始认真C/C++的一些特性和比较,这里记录下C语言拷贝和截取的一些方式,由于系统库带的函数不方便,所以 ...
- Spark基础和RDD
spark 1. Spark的四大特性 速度快 spark比mapreduce快的两个原因 基于内存 1. mapreduce任务后期在计算的是时候,每一个job的输出结果都会落地到磁盘,后续有其他的 ...
- 洛谷 P4298: bzoj 1143: [CTSC2008]祭祀
题目传送门:洛谷 P4298. 题意简述: 给定一个 \(n\) 个点,\(m\) 条边的简单有向无环图(DAG),求出它的最长反链,并构造方案. 最长反链:一张有向无环图的最长反链为一个集合 \(S ...