Jas*_*n S 7 java hashtable map set
TreeSet有一个带比较器的构造函数,这意味着即使您存储的Comparable对象本身不是对象,您也可以提供自定义比较器.
是否有类似的无序集实现?(例如,替代HashSet<T>它需要一个"hasher"对象来计算equals()和hashCode()对象T可能与对象自己的实现不同?)
C++ std::hash_set为您提供了这个,只是想知道是否有适合Java的东西.
编辑:@Max提出了一个很好的技术观点equals()- 公平; 这是真的TreeMap和HashMap钥匙通过Map.containsKey().但是否有其他众所周知的数据结构可以通过自定义哈希来组织?
不,Collections规范不支持具有"hasher"对象.你当然可以实现你自己的支持这个的集合,但另一种方法是将Hasher你的存储视为一个包装对象HashSet.
Set<HasherWrapper<Foo>> set = new HashSet<HasherWrapper<Foo>>();
set.add(new HasherWrapper(foo));
...
Run Code Online (Sandbox Code Playgroud)
然后包装类看起来像:
private class HasherWrapper<T> {
T wrappedObject;
public HasherWrapper(T wrappedObject) {
this.wrappedObject = wrappedObject;
}
@Override
public int hashCode() {
// special hash code calculations go here
}
@Override
public boolean equals(Object obj) {
// special equals code calculations go here
}
}
Run Code Online (Sandbox Code Playgroud)