我有一個Java類的程序,我想使用hashSets比較文本文檔的目錄。本質上,我的計劃是爲每個紙張創建一個字符串哈希集合,然後將兩個論文hashSets一起添加到一個哈希集合中,並找出相同的6個字符序列的數量。Java中的HashSet碰撞
我的問題是,我必須手動檢查並處理衝突,或者Java是否爲我做這件事?
我有一個Java類的程序,我想使用hashSets比較文本文檔的目錄。本質上,我的計劃是爲每個紙張創建一個字符串哈希集合,然後將兩個論文hashSets一起添加到一個哈希集合中,並找出相同的6個字符序列的數量。Java中的HashSet碰撞
我的問題是,我必須手動檢查並處理衝突,或者Java是否爲我做這件事?
Java哈希映射/集自動哈德爾哈希碰撞,這就是爲什麼覆蓋equals
和hashCode
方法都很重要的原因。由於它們都被集合用來區分重複或唯一的條目。
重要的是要注意,由於多個對象被相同的哈希引用,所以這些哈希衝突具有性能影響。
public class MyObject {
private String name;
//getter and setters
public int hashCode() {
int hashCode = //Do some object specifc stuff to gen hashCode
return int;
}
public boolean equals(Object obj) {
if(this==obj) return true;
if(obj instanceOf MyObject) {
if(this.name.equals((MyObject)obj.getName())) {
return true;
}
return false;
}
}
}
注:標準Java對象如String已經實施的hashCode和equals,所以你只需要做到這一點對自己的一種數據對象。
我想你沒有要求散列衝突,對吧?問題是當HashSet a和HashSet b被添加到一個集合中時會發生什麼,例如由a.addAll(b)。
答案是一個將包含所有元素和沒有重複。在字符串的情況下,這意味着您可以在add-b.size()之後添加a.size()之前,使用a.size()從集合中計算相等字符串的數量。
即使某些字符串具有相同的哈希碼但不相等也不重要。
你可以找到你ans [here](http://stackoverflow.com/questions/4980757/how-do-hashtables-deal-with-collisions) –