我有以下情况:
public class CustomClass {
private LinkedList<ActionClass> actionList;
private MyReaderClass reader; //methods...
//other methods...
hashcode()
equals()
//blabla
}
现在,我在hashset中使用了customclass,但是我不知道它是否需要在ActionClass中实现方法hashcode和equals,因为它包含在链接中我用过的清单。 感谢您的回复
答案 0 :(得分:0)
是的,如果您想使用CustomClass
作为HashSet集合的元素,则必须提供hashCode
方法。要获得对象的真正唯一哈希码,您必须计算它,包括所有对象的文件的哈希码。在您的情况下,包括actionList
的哈希码。
由于List#hashCode()的JavaDoc:
返回此列表的哈希码值。列表的哈希码被定义为以下计算的结果:
int hashCode = 1; for (E e : list) hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());
这意味着,您必须为hashCode()
提供哈希值(ActionClass
实现),以便计算集合的哈希码。
List#equals()也是如此,如果你想将你的类添加到其他一些不需要对象哈希的集合中:
将指定对象与此列表进行比较以获得相等性。当且仅当指定的对象也是列表时,返回true,两个列表具有相同的大小,并且两个列表中的所有对应的元素对相等。
您必须在equals()
中提供ActionClass
方法的实现,才能使LinkedList<ActionClass>
类型的2变量相互比较。
当然,如果您确定的话,可以避免在actionList
和equals()
hashCode()
实施CustomClass
字段中使用CustomClass
字段。价值对您的#test.R
x <- y <- seq(10,70,10)
png("test.png")
plot(x, y, type='o', col='red')
grid()
title(main="title", font.main=5)
title(xlab="B", col.lab="black")
title(ylab="C", col.lab="black")
并不重要。但无论如何,它是一个很好的风格&#34;在类中提供这两种方法的实现。