2017-03-17 171 views
2

私はプログラミングの初心者で、2つのクラスがあります。ファーストクラスがある:フィールドint agecompareToをオーバーライドする方法(Java)

public class User implements Comparable<User> 

、コンストラクタとComparableインタフェースのオーバーライド方法:

@Override 
    public int compareTo(User user) { 
     return user.age >= age ? -1 : 0; 
    } 

セカンドクラスは、リストからセットのコレクションを作成する方法と public class SortUserです

public Set<User> sort(List<User> list) { 
     Set<User> result = new TreeSet<>(); 
     for (User user : list) { 
      result.add(user); 
     } 
     return result; 
    } 

すべてのUserのセット内のオブジェクトをソートする必要がありますが、私がリストウィットを作ったときそのリストから ...とSetTreeSet)を作成します。h 3つのUserオブジェクト...

User a = new User(1); 
User b = new User(2); 
User c = new User(3); 
List<User> list = new ArrayList<>(); 
list.add(c); 
list.add(a); 
list.add(b); 

312今リストの順番がある):私は終わり

SortUser sortUser = new SortUser(); 
Set<User> set = sortUser.sort(list); 

その次数が13setの場合は、setには2つのオブジェクトしか存在しません。何がうまくいかないのですか?

+3

値。リストの 'sort'を呼び出すだけです。 – Carcigenicate

+1

ソートされたSetを持つことはできません。集合は順序付けられていないコレクションです。 sort()メソッドは、List(または他の順序付けされたコレクション)を適切にソートするか、Listを返す必要があります。 – chrisdowney

+1

@chrisdowneyまあ、技術的にはあなたが注文セットを持つことができます。特定の実装がそれをサポートしていることを確認するだけです。順序付けられたセットの実装を書くことは非常に可能です。 – Carcigenicate

答えて

5

私はあなたが比較メソッドの実装が間違っているのを見ています。あなたはそれを更新できますか?

@Override 
public int compareTo(User user) { 
    return Integer.compare(age, user.age); 
} 
1

TreeSetで行っていることは不要です。私は彼らが反復時に特定の順序を持​​つことが保証されているかどうかはわかりません。

だけの要素がドロップされる理由の

Collections.sort(list)

そして、私の推測であなたのsortメソッドを置き換える要素が常に小さくなるように考えられているので、あなたのcompareTo方法は、どのような場合に1を返すことはありませんおそらくTreeSetと繋がっている可能性があります。

0

Userクラス

public class User implements Comparable<User>{ 
    int age; 
    User(int age){age=age;} 
    @Override 
    public int compareTo(User user) { 
    return this.age >= age ? -1 : 0; 
    } 
} 

Set<User> list1 = new TreeSet(list); 
1

をソートするためのリスト

User a = new User(1); 
    User b = new User(2); 
    User c = new User(3); 
    List<User> list = new ArrayList<>(); 
    list.add(c); 
    list.add(a); 
    list.add(b); 

を準備し、文字列の場合、方法論

の下に従ってください。整数の場合は

public static Comparator<Employee> NameComparator = new Comparator<Employee>() { 
    @Override 
    public int compare(Employee e1, Employee e2) { 
     return e1.getName().compareTo(e2.getName()); 
    } 
}; 

は、私がセットに追加してソートすることはありません

public static Comparator<Employee> SalaryComparator = new Comparator<Employee>() { 

    @Override 
    public int compare(Employee e1, Employee e2) { 
     return (int) (e1.getSalary() - e2.getSalary()); 
    } 
}; 
+0

引数の1つが否定的になる可能性があるときは、良い方法ではありません。しかし、給与の場合は、給料が負にならない小切手があると思います。 – bpjoshi

関連する問題