赞
踩
我将通过典型的HashSet来了解Set的特性。HashSet实现Set的方式是通过Hash表确保元素的唯一性。而Hash表中,又将分别进行两个动作来判断将要储存的元素是否唯一。
在往HashSet内添加值时,会分别进行以上两个步骤。HashSet允许储存:
除了以上两种元素,其他元素都会被拒之门外。
因此,在使用HashSet储存对象时,我们需要重写对象的这两个方法,以便满足我们对储存对象数据唯一性的要求。
在这个例子中,我写了一个Band类,在这个类中,有三个内部变量:name,style,rate, 在判断HashCode上,我选择用name和rate判断,在equals上,我选择name和style判断。
class Band implements { private String name; private String style; private int rate; Band() { } public Band(String name, String style, int rate) { this.name = name; this.style = style; this.rate = rate; } public String getName() { return this.name; } public String getStyle() { return this.style; } public int getRate() { return this.rate; } public void setRate(int rate) { this.rate = rate; } @Override public int hashCode() { System.out.println(this.toString() + "'s hashCode: " + this.name.hashCode() + this.rate * 37); return this.name.hashCode() + this.rate * 37; } @Override public boolean equals(Object obj) { System.out.println(this + "---equals---" + obj); if (obj instanceof Band) { Band bd = (Band)obj; return this.name.equals(bd.name) && this.style.equals(bd.style); } else { return false; } } @Override public String toString() { return "Band@name: " + this.name + " style: " + this.style + " rate: " + this.rate; } }
在主方法中,我们来尝试一下HashSet判断一致性的过程:
public static void main(String[] args) {
HashSet<Band> hs = new HashSet<Band>();
hs.add(new Band("Smashing Pumpkins", "Rock", 99));
hs.add(new Band("Smashing Pumpkins", "Rock", 98));
hs.add(new Band("Smashing Pumpkins",
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。