gpt4 book ai didi

java - 以相同对象作为键值的映射

转载 作者:行者123 更新时间:2023-12-01 10:45:32 24 4
gpt4 key购买 nike

如果 Foo1 和 Foo2 在技术上可以相等,但您仍然希望它们具有不同的品质,这样的 Map 从技术上讲是不是很糟糕的设计:

  Foo foo2 = new Foo("id1", 4);
Foo foo1 = map.get(foo2);
if(foo1 != null){
map.replace(foo1, foo1.combine(foo2));
}

这在技术上不违反“等于”吗?我注意到在 Multiset 中没有有意义的 get 函数,因为如果集合包含该对象,则您已经拥有它,因此无需检索它。

但与此同时,拥有一个包含相同对象的键和值的映射似乎有点过头了,这就是我研究 Multiset 的原因

编辑:组合返回仍然“等于”但组合属性的相同对象。

即:

public class Foo {
String id;
int length;

public combine(Foo foo){
this.length += foo.length;
return this;
}

@Override equals(Object o){
...
return this.id == that.id;
}

最佳答案

Equals 和 hashcode 有一个契约,其他类依赖该契约才能正确实现。我不会滥用这些方法来解决这个问题。

更好的解决方案是拥有自定义界面

public interface MergeAble<T> {

public boolean canMerge(T other);

}

然后,您的对象可以实现此功能,并且您可以拥有自定义逻辑来合并在您自己的界面中实现的那些对象。

关于java - 以相同对象作为键值的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34205641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com