包含列表的自定义对象的Java HashSet和HashCode

包含列表的自定义对象的Java HashSet和HashCode,java,linked-list,equals,hashcode,hashset,Java,Linked List,Equals,Hashcode,Hashset,我有以下情况: public class CustomClass { private LinkedList<ActionClass> actionList; private MyReaderClass reader; //methods... //other methods... hashcode() equals() //blabla } 公共类CustomClass{ 私有链接列

我有以下情况:

    public class CustomClass {
       private LinkedList<ActionClass> actionList;
       private MyReaderClass reader; //methods...
       //other methods...
       hashcode()
       equals()
       //blabla
    }
公共类CustomClass{
私有链接列表操作列表;
私有MyReaderClass reader;//方法。。。
//其他方法。。。
hashcode()
等于()
//布拉布拉
}
现在,我在hashset中使用customclass,但我不知道是否需要在ActionClass中实现hashcode和equals方法,因为它包含在我使用的链接列表中。
感谢您的回复

是的,如果您想使用
CustomClass
作为HashSet集合的元素,您必须提供
hashCode
方法。要为对象获得真正唯一的哈希代码,必须计算它,包括所有对象文件的哈希代码。在您的情况下,包括
actionList
的哈希代码

由于JavaDoc的原因:

返回此列表的哈希代码值。列表的哈希代码定义为以下计算的结果:

int hashCode = 1;
for (E e : list)
 hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());
这意味着您也必须为
ActionClass
提供哈希(
hashCode()
实现),以便计算集合的哈希代码

如果要将类添加到其他一些不需要对象哈希的集合中,则对的情况也是如此:

比较指定对象与此列表是否相等。当且仅当指定对象也是列表、两个列表的大小相同且两个列表中所有对应的元素对相等时,返回true

您必须在
ActionClass
中提供
equals()
方法的实现,以使
LinkedList
类型的2个变量相互可比


当然,您可以避免在
equals()
hashCode()
实现
CustomClass
时使用
actionList
字段,如果您确定它的值对
CustomClass
不重要。但无论如何,在类中为这两种方法提供实现是一种“好风格”。

您的问题非常不清楚。请扩展示例代码,更具体地说明如何使用
CustomClass