3

私の場合、2つのハッシュセットがあります。1つのセットには友人の名前と番号が含まれ、もう1つのセットには既存の友人の名前と番号が含まれます。このデータはdbから取得され、セットに保存されます。
私はグーグルでそのためのコードが必要です私はコンパレータでコンパレータを見ました彼らは1セットしか使用していませんでしたが私の場合私は私の悪い英語のために申し訳ありませんが2セットをチェックしています

4

4 に答える 4

4

set1 と set2 があると仮定すると、次のことができます。

    Set set3 = new HashSet(set1);
    set3.retainAll(set2);    
    set1.removeAll(set3);
    set2.removeAll(set3);

あなたの場合、これは

public class Friend {
    String name;
    String number;

    public Friend(String name, String number) {
        this.name = name;
        this.number = number;
    }

    @Override
    public int hashCode() {
        return name.hashCode() + 31 * number.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (!(obj instanceof Friend)) {
            return false;
        }
        Friend other = (Friend)obj;
        return other.number.equals(number) && other.name.equals(name);
    }

    @Override
    public String toString() {
        return name + "-" + number;
    }
}

public static void main(String[] args) throws Exception {
    Set<Friend> set1 = new HashSet<Friend>();
    set1.add(new Friend("Karthik", "111"));
    set1.add(new Friend("Mani", "222"));
    set1.add(new Friend("Karthik", "111"));
    set1.add(new Friend("Mani", "444"));
    set1.add(new Friend("Karthik", "111"));

    Set<Friend> set2 = new HashSet<Friend>();
    set2.add(new Friend("Karthik", "111"));
    set2.add(new Friend("Raju", "3333"));

    Set<Friend> set3 = new HashSet<Friend>(set1);
    set3.retainAll(set2);
    set1.removeAll(set3);
    set2.removeAll(set3);

    System.out.println(set1);
    System.out.println(set2);
}

出力

[Mani-444, Mani-222]
[Raju-3333]
于 2013-03-05T04:48:33.833 に答える
3

これを試して

 Friend f1=new Friend("Karthik",111); 
 Friend f2=new Friend("Mani",222); 
 Friend f3=new Friend("Karthik",111); 
 Friend f4=new Friend("Mani",222); 
 Friend f5=new Friend("Karthik",111); 

 Set<Friend> set1=new HashSet<Friend>(); 
 set1.add(f1); 
 set1.add(f2); 
 set1.add(f3); 
 set1.add(f4); 
 set1.add(f5); 

 Set<Friend> set2=new HashSet<Friend>(); 
 set2.add(new Friend("Karthik", 111)); 
 set2.add(new Friend("Raju", 333));  
 set1.addAll(set2); //Adding all the objects from set2 to set1

 Set<Friend> set3=new HashSet<Friend>(); // creating a new Set object
/////////// Logic for removing duplicates ///////////////////////
 Set mine=new HashSet();
 for (Iterator<Friend> it = set1.iterator(); it.hasNext();) {
 Friend s = it.next();
    if(mine.add(s.getName()))
    set3.add(new Friend(s.getName(),s.getId()));
 }
 /////////// Now set3 contains non-duplicates objects ///////////
 for (Iterator<Friend> it = set3.iterator(); it.hasNext();) {
 Friend s = it.next();
     System.out.println("Name:"+s.getName()+"   Id:"+s.getId());
 }
于 2013-03-05T05:30:39.143 に答える
1

あなたの要件についての私の理解は、2 つのセットから重複を削除し、交差データを新しいセットに保存することです。

私のやり方は、Friend クラスの hashCode() と equals() メソッドをオーバーライドすることです。次に、 retainAll () メソッド を使用して交差データを持つ commonFriends を次のように作成します。変更 - 両方のセットで残りのデータを取得

Set<Friend> commonFriend = new HashSet<Friend>();
commonFriend.addAll(f);
commonFriend.retainAll(set2);
// Find remaining data
set2.removeAll(commonFriend);
f.removeAll(commonFriend);

詳細コーディングは

package examA;

import java.io.File;
import java.util.HashSet;
import java.util.Set;

public class Test1 {

    /**
     * @param args
     */
    public static void main(String[] args) {

        Friend f1 = new Friend("Karthik", "111");
        Friend f2 = new Friend("Mani", "222");
        Friend f3 = new Friend("Karthik", "111");
        Friend f4 = new Friend("Mani", "Manik");
        Friend f5 = new Friend("Karthik", "111");

        Set<Friend> f = new HashSet<Friend>();
        f.add(f1);
        f.add(f2);
        f.add(f3);
        f.add(f4);
        f.add(f5);

        Set<Friend> set2 = new HashSet<Friend>();
        set2.add(new Friend("Karthik", "111"));
        set2.add(new Friend("Raju", "3333"));
        set2.add(new Friend("Karthikeyan", "111"));
        set2.add(new Friend("Raju", "3333"));

        System.out.println("Set 1 size" + f.size());
        System.out.println("Set 2 size" + set2.size());

        Set<Friend> commonFriend = new HashSet<Friend>();
        commonFriend.addAll(f);
        commonFriend.retainAll(set2);
        System.out.println("Common size" + commonFriend.size());

        f.removeAll(commonFriend);
        System.out.println("Remaining Data in f" + f.size());

        set2.removeAll(commonFriend);
        System.out.println("Remaining Data in set2" + set2.size());
        for (Friend friend : commonFriend) {
            System.out.println(friend);
        }
    }
}

class Friend {
    private String name;
    private String number;

    public Friend(String name, String number) {
        this.name = name;
        this.number = number;
    }

    @Override
    public String toString() {
        return "Friend [name=" + name + ", number=" + number + "]";
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((number == null) ? 0 : number.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Friend other = (Friend) obj;
        if (number == null) {
            if (other.number != null)
                return false;
        } else if (!number.equals(other.number))
            return false;
        return true;
    }
}
于 2013-03-05T04:58:05.290 に答える
0

使用できます

全て追加する()

セット方法。これにより、あるセットから別のセットに要素がコピーされます。セットは重複を許可しないため、注意が必要です

于 2013-03-05T04:23:20.093 に答える