如果您有兴趣了解其他数据结构,我建议您HashSet,默认情况下它不会为原始对象插入重复项。 你的情况,你需要做的,你位置类的唯一事情,就是添加 等于和的hashCode方法。因为例如Eclipse的getter和setter将由他自己创建。
hashCode()方法
大家知道这种方法提供了具有对象的代码。基本上,由Object提供的hashCode()的默认实现是通过将内存地址映射为整数值来派生的。如果查看Object类的源代码,您会发现hashCode的以下代码。 public native int hashCode();它表明hashCode是在一定程度上提供内存地址的本地实现。但是可以重写实现类中的hashCode方法。
equals()方法
这种特殊的方法用于使两个对象之间的相等比较。 Java中有两种类型的比较。一个使用“= =”运算符,另一个使用“equals()”。我希望你知道这两者之间的区别。更具体地说,“.equals()”是指等价关系。因此,从广义上讲,你说两个对象是等价的,它们满足“equals()”条件。如果您查看Object类的源代码,您将会找到equals()方法的以下代码。
这里一个完整的工作示例(您可以修改以下这COSE类)
import java.util.HashSet;
public class Zhashset{
private int num;
public Zhashset(){
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + num;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Zhashset other = (Zhashset) obj;
if (num != other.num)
return false;
return true;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HashSet<Zhashset> hs = new HashSet<Zhashset>();
hs.add(new Zhashset());
hs.add(new Zhashset());
for(Zhashset item : hs)
System.out.println(item.getNum());
}
}
输出将是:写入一次。
可能值得使用'Map'而不是'ArrayList '? –
我对编程比较陌生,这是我迄今为止的想法。我将学习地图并尝试以这种方式进行。谢谢! –