Class A {
private String test1;
private String test2;
}
Class Feature {
private List<A> obj;
/*
HashCode which should return same value even though i change ordering of objects in List
*/
}
当前行为:
> List<A> contains [obj1, obj2, obj3] -> Some hashCode (Ex: 9058203945)
> List<A> contains [obj2, obj1, obj3] -> Some other hashCode (Ex:-23423423)
我想要的是,如果我改变列表中元素的顺序,我的列表哈希代码应该是相同的。
有什么帮助吗?
提前谢谢
1条答案
按热度按时间g52tjvyc1#
不确定,但我猜你指的是
List#hashCode
方法。元素的排序就是列表的定义
元素的顺序
List
是列表的核心概念。所以改变顺序会产生另一个列表。这两个列表在概念上是不相等的,因此它们不返回,也不应该返回相同的哈希值(除非是异常巧合,如果使用适当的哈希函数,这是非常罕见的)。从技术上讲,你可以把
List
类并重写hashCode
方法。你可以自己做任何你想做的事hashCode
方法。但这将是一个非常糟糕的想法,因为它违反了List
.套
如果您不关心元素的顺序,请使用另一个集合而不是
List
.Set
很可能是你需要的。一Set
包含一堆对象,不一定按任何特定顺序。有些实现是按特定顺序迭代的,有些则不保证任何顺序。当你跑的时候。
setx.hashcode()=-838114520
sety.hashcode()=-838114520
samehashcode=真
这适用于的不同实现
Set
.samehashcode=真
上面是枚举对象。它对你有用吗
String
物体?对。samehashcode=真
集合是不同的
意识到两者之间的一个主要区别
Set
以及List
:List
允许重复。一个对象可以多次添加到列表中,并在该列表中占用多个插槽。Set
禁止重复。一Set
是不同的,只包含对任何特定对象的单个引用。多次添加一个特定对象在第一次之后没有效果。引用
Set
javadoc公司:不包含重复元素的集合。更正式地说,集合不包含一对元素e1和e2,例如e1.equals(e2),最多包含一个空元素。正如它的名字所暗示的,这个接口为数学集合抽象建模。
sety.tostring():[辛迪,简,玛莎]