0

私はこの構造のセットを持っています。そのクラスの等しいオブジェクトの重複を削除するにはどうすればよいですか?等しいとは、フィールドFileplikが同じであることを意味します。

編集:しかし、問題はもっと大きく、重複はありませんが、古いSETメンバーを新しいものに置き換えたいと思います。

サードパーティのライブラリはありません。

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()));
    }
4

2 に答える 2

3

ここで説明するように、overrideequals。

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();
    }
}
于 2012-11-19T03:46:49.797 に答える
2
public class WordInfo implements Serializable {
    File plik;

以下が要件に従ってequalsandメソッドをオーバーライドする方法であることを考慮してください。hashCode

@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();
}
于 2012-11-19T03:57:51.047 に答える