标签:
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
我们知道集合是用来存储对象的。在他们实现了众多的接口我们以Arraylist为列子
所有已实现的接口:
Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess
集合当中有这样的一个方法。在API文档当中是下面这样解释的。
contains(Object o)
如果此列表中包含指定的元素,则返回 true。
其实我在查看源代码的时候:代码如下。其实就是调用了对象的equals()方法,进行比较。如果相等,那么返回Ture
public int indexOf(Object o) { if (o == null) { for (int i = 0; i < size; i++) if (elementData[i]==null) return i; } else { for (int i = 0; i < size; i++) if (o.equals(elementData[i])) return i; } return -1; }
我们我们就会有一个问题:
我们比较如String对象的话我们可以直接比较。因为只要地址相同说明在栈里面的值就是统一代码块。final的作用。
而如果我们比较的是对我们应该怎么比较呢?
因为我们在object当中保存的是我们创建对象的引用(也就是地址),
在Java当我我们判断两个对象是是否相等我们要重新equal()方法,设置自己判断自己相同的条件
class Person { public String name ; public int age ; public Person(String name ,int age) { this.name = name; this.age = age; } //重写一个equals方法 public boolean equals(Object obj) { //判断对象是否相同. //1.先看他是否是Person对象 //2.比较字段值是否相同 if(!(obj instanceof Person)) return false; Person p = (Person)obj; return this.name.equals(p.name) && this.age == p.age; } }
所以我们在集合当中用contains方法查找是否包含当前对象时我们就应该重写equal()方法
小测试:删除一个集合当中重复的元素。 而这个元素是我们自己定义的对象
package com.text; import java.util.ArrayList; import java.util.Iterator; import com.sun.org.apache.bcel.internal.generic.NEW; public class List { public static void main(String[] args) { //创建长度为10的 ArrayList lang = new ArrayList(); lang.add(new Person("zhulang",13)); lang.add(new Person("zhulang",42)); lang.add(new Person("zhulang",13)); lang.add(new Person("zhulang",42)); lang.add(new Person("zhulang",13)); lang.add(new Person("zhulang",42)); lang = singleElement(lang); //我就用迭代器输出吧。 for(Iterator it = lang.iterator(); it.hasNext();) { Person p = (Person)it.next(); System.out.println(p.name + p.age); } } //去除重复元素的方法 public static ArrayList singleElement( ArrayList al) { //用到conkd ArrayList newAL = new ArrayList(); //创建查找。 如果第一次存在我我们记录。如果在有同样的内容我们就不添加 //创建迭代器我们反复的查找 Iterator it= al.iterator(); while(it.hasNext()) { Object ob = it.next(); if (!newAL.contains(ob)) { //如果新的没有我们就添加。有就不添加 //实际上调用的是对象的equal()方法: newAL.add(ob); } } return newAL; } } //定义一个人的类 class Person { public String name ; public int age ; public Person(String name ,int age) { this.name = name; this.age = age; } //重写一个equals方法 判断对象相等的条件 public boolean equals(Object obj) { //判断对象是否相同. //1.先看他是否是Person对象 //2.比较字段值是否相同 if(!(obj instanceof Person)) return false; Person p = (Person)obj; return this.name.equals(p.name) && this.age == p.age; } }
输出:
zhulang 13
zhulang 14
标签:
原文地址:http://www.cnblogs.com/ganwei/p/4559608.html