LinkedIdentityHashSet
2022-09-04 21:58:08
我知道IdentityHashSet
(通过Collections#newSetFromMap(Map))
和LinkedHashSet
。但是,我需要的是两者的组合,一个.我无法在网上找到任何现成的解决方案。有人知道如何调整这个吗?LinkedIdentityHashSet
感谢您的建议!
我知道IdentityHashSet
(通过Collections#newSetFromMap(Map))
和LinkedHashSet
。但是,我需要的是两者的组合,一个.我无法在网上找到任何现成的解决方案。有人知道如何调整这个吗?LinkedIdentityHashSet
感谢您的建议!
那里的实现技术不能很好地结合在一起。 将链接列表添加到地图的入口对象。 使用探测技术,因此避免了任何入口对象。LinkedHashMap
IdentityHashMap
有几种方法可以将“标识”特征添加到集合/映射。
final
equals
hashCode
equals
hashCode
final
final
final
equals
hashCode
==
System.identityHashCode
一种选择是使用LinkedHashSet和包装器
class LinkedIdentityHashSet<E> extends AbstractSet<E> {
Set set = new LinkedHashSet();
static class IdentityWrapper {
Object obj;
IdentityWrapper(Object obj) {
this.obj = obj;
}
public boolean equals(Object obj) {
return this.obj == obj;
}
public int hashCode() {
return System.identityHashCode(obj);
}
}
public boolean add(E e) {
return set.add(new IdentityWrapper(e));
}
...