首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

集合类 重写equals()步骤和hashCode()方法 笔记一

2013-11-20 
集合类 重写equals()方法和hashCode()方法 笔记一??? }}结果:[dong guo, jxufe Jiangxi, 4]解释:为什么结

集合类 重写equals()方法和hashCode()方法 笔记一
??? }
}

结果:
[dong guo, jxufe Jiangxi, 4]

解释:
为什么结果会是这样呢?那是因为在调用System.out.println(c)这个方法的时候
它会自动的去调用User中的toString的方法,那么4呢,同样的,它会调用Integer类中的toString()方法

至于为什么要用Collection c=new ArrayList();这样的语句,那就好好的说一下啦。这样做的好处是当我
想要更换另一个的LinkedList类来实现的时候,我们不用再去改变下面的代码,(这里很重要)因为c这个变量只能调用它自己的方法,并不能

调用它子类的方法。所以也就成啦他子类的一个通用方法。但是能达到同样的效果
至于内部怎么操作的,我们不用去管他.这就是它的好处,以后在很多程序中
你会经常看到这样的用法的
而如果你用Arraylist al=new ArrayList();的话那就有可能会造成以后的修改不方便
而只需要改成Collection c=new LinkedList()就可以啦

例二:
这个例子,你先执行啦看看结果有什么变化再来看代码,这样效果会更好
带着这个问题去看:
那就是当我们用remove()和contains()这个方法的时候,那些值被移出啦,那些值没什么被移去。
那些值显示为true,而那些又显示为false,为什么会这样呢。这就是这个例子要解决的问题

源代码:
import java.util.*;
public class?? TestCollection
{
public static void main(String[] args)?
{?
?? //这里用那一个都可以,你还可以换成其它的
?? //Collection c=new LinkedList();
?? Collection c=new HashSet();
??
?? c.add("asdfg");
?? c.add(new User("dong","guo"));
?? c.add(new User("jxufe","Jiangxi"));
?? c.add(new Integer(4));

?? c.remove("asdfg");
?? c.remove(new Integer(4));
?? c.remove(new User("jxufe","Jiangxi"));??

?? System.out.println(c.contains(new User("dong","guo")));
?? System.out.println(c.contains(new Integer(4)));
??
?? System.out.println(c);

}
}
class User
{
private String firstName;
private String lastName;

public User(String firstName,String lastName)
{
?? this.firstName=firstName;
?? this.lastName=lastName;
}?
public?? String toString()
{
?? return firstName+" "+lastName;
}
}

结果:
[dong guo, jxufe Jiangxi]

为什么我们用啦c.remove(new User("jxufe","Jiangxi"));??
并没有把它们给册掉呢?原因就是因为在用户自己定义的类中还没有重写equals和hashCode这样的方法
要使Collection中的remove()方法和contains()生效,就必须重写它们,下面是重写后的User类

代码如下:
class User
{
private String firstName;
private String lastName;

public User(String firstName,String lastName)
{
?? this.firstName=firstName;
?? this.lastName=lastName;
}
public boolean equals(Object obj)
{
?? if(obj instanceof User)
?? {
??? User user=(User)obj;
??? return firstName.equals(user.firstName) && lastName.equals(user.lastName);
?? }
?? return super.equals(obj);

}
public int hashCode()
{
?? return firstName.hashCode();
}
public?? String toString()
{
?? return firstName+" "+lastName;
}
}

结果:
true
false
[dong guo]

热点排行