标签:name Day07 contains 37 equals collection Manager 集合
深度剖析集合中的 contains()方法
-
contains()方法查找集合中是否包含某个元素
-
contains() 底层使用的是 equals()方法
-
当contains()方法拿到一个对象的时候,会循环和当前集合中的元素的值进行比较,如果没有相等的那么返回false,有相等的则返回true
-
返回true/false的关键还在于,是否重写了equals()方法,如果重写了equals()方法那么就会做值比较,如果没有重写那么就是对象地址比较。
-
-
代码对比解析
package com.shige.Collection; import java.util.ArrayList; import java.util.Collection; import java.util.Objects; public class CollectionMethod02 { public static void main(String[] args) { // 创建Collection集合 Collection collection=new ArrayList(); // 父类引用指向子类对象、 // 创建对象 Integer integer=new Integer(100); // 向集合中添加元素 collection.add(integer); //使用contains()方法查找集合中是否包含该元素 if(collection.contains(integer)){ System.out.println("包含"); }else{ System.out.println("不包含"); } //再创建一个对象 Integer integer1=new Integer(100); //在没有把integer1加入到集合中的情况下,再次调用contains()方法 if(collection.contains(integer1)){ System.out.println("包含"); // 包含 }else{ System.out.println("不包含"); } // 为什么在没有把integer1加入到集合中的情况下,结果确是包含的呢? 因为contains()方法底层使用的是equals()方法,而Integer重写了equales()方法,只做了值的比较,所以包含。 //当contains()方法拿到一个对象的时候,会循环和当前集合中的元素的值进行比较,如果没有相等的那么返回false,有相等的则返回true //再次创建对象 Manager manager=new Manager("张三",56); Manager manager1=new Manager("张三",56); //添加对象到集合中 collection.add(manager); //调用contains()方法 System.out.println(collection.contains(manager)); //true System.out.println(collection.contains(manager1)); //false // 这里两个相等的数据为什么不包含了呢? 因为这里的Manager类没有重写equals()方法,比较的是两个对象的地址。 //使用remove()方法删除集合中的指定元素 collection.remove(integer); System.out.println(integer); } } class Manager{ //属性 String name; int age; // 构造方法 Manager(){} Manager(String name,int age){ this.name=name; this.age=age; } // 重写equals @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Manager manager = (Manager) o; return age == manager.age && Objects.equals(name, manager.name); } @Override public int hashCode() { return Objects.hash(name, age); } }
标签:name,Day07,contains,37,equals,collection,Manager,集合 来源: https://www.cnblogs.com/szqengr/p/14603977.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。