如何删除Java HashSet中的重复项

时间:2012-11-19 03:44:02

标签: java set duplicates

我有一套这种结构。如何删除该类的相同对象的重复?等于表示字段文件plik是相同的。

修改: 但问题是肠道更大我没有重复但我想用新的替换旧的SET成员。

Withoud第三方库。

import java.io.*;

public class WordInfo implements Serializable {
    File plik;
    Integer wystapienia;

    public WordInfo(File plik, Integer wystapienia) {
        this.plik = plik;
        this.wystapienia = wystapienia;
    }

    public String toString() {
    //  if (plik.getAbsolutePath().contains("src") && wystapienia != 0)
            return plik.getAbsolutePath() + "\tWYSTAPIEN " + wystapienia;
    //  return "";
    }

}

修改

我没有这个HashCodeBuilder我想使用Java标准库

 public int hashCode() {
            return new HashCodeBuilder(17, 31).append(plik).append(wystapienia).toHashCode();
        }

    public boolean equals(Object obj) {
        File f = (File) obj;
        return(plik.getAbsoluteFile().equals(f.getAbsolutePath()));
    }

2 个答案:

答案 0 :(得分:3)

正如所讨论的here,覆盖等于。

public class Person {
    private String name;
    private int age;
    // ...

    public int hashCode() {
        return new HashCodeBuilder(17, 31). // two randomly chosen prime numbers
            // if deriving: appendSuper(super.hashCode()).
            append(name).
            append(age).
            toHashCode();
    }

    public boolean equals(Object obj) {
        if (obj == null)
            return false;
        if (obj == this)
            return true;
        if (obj.getClass() != getClass())
            return false;

        Person rhs = (Person) obj;
        return new EqualsBuilder().
            // if deriving: appendSuper(super.equals(obj)).
            append(name, rhs.name).
            append(age, rhs.age).
            isEquals();
    }
}

答案 1 :(得分:2)

public class WordInfo implements Serializable {
    File plik;

考虑以下内容是如何根据您的要求覆盖equalshashCode方法:

@Override
public boolean equals(Object obj) {
    if(this == obj) return true;
    if(!(obj instanceof WordInfo)) return false;
    return this.plik.equals(((WordInfo) obj).plik);
}

@Override
public int hashCode() {        
    return this.plik.hashCode();
}