0

私はこのクラスを持っています:

public class Contact {
private  String firstname;
private String lastname;
private List<Integer> phoneNumber;
private Scanner in;
public Contact(){
    phoneNumber = new ArrayList<>();
    firstname = lastname = "";
    in = new Scanner(System.in);
}
public void setFirstName(){
    firstname = in.nextLine();
} 
public  void setLastName(){
    lastname = in.nextLine();
}
public void setPhoneNumber(){
    phoneNumber.add(in.nextInt());
}
public String getFirstName(){
    return firstname;
}
public  String getLastName(){
    return lastname;
}
public  Integer getPhoneNumber(int position){
    return phoneNumber.get(position);
}
}

今、私は自分の連絡先を持つクラスPhoneBookを作りたいと思っています..

Arraylist<Contact>

サイズが固定されていないため..この配列リストを姓でソートしたい場合はどうすればよいですか?

4

2 に答える 2

5

Contact クラスは Comparable インターフェースを実装する必要があります...その後、 Collections.sort(list) を使用してリストをソートできます。

編集:複数の並べ替え方法が必要な場合は、 Comparator インターフェイスを実装するクラスを作成することもできます。複数のコンパレータを作成する (または 1 つを構成可能にする) ことができ、そのコンパレータを 2 番目のパラメーターとして Collections.sort に渡すことができます。

コンパレータソリューションを説明するリンクは次のとおりです。 http://www.vogella.com/blog/2009/08/04/collections-sort-java/

于 2012-11-23T14:16:06.703 に答える
2

別のクラスまたは匿名クラスとして、lastname にカスタム コンパレータを配置する必要があります。

わかりました、私は暇があるので編集しています。あなたは Java を学んでいると思います :)

次の 2 つのメソッドを Contact クラスに追加してテストします。

public void setLastName(String lastname) {
    this.lastname = lastname;
}
@Override
public String toString() {
    return getLastName();
}

テスト:

public class Sort {

    static List<Contact> list = new ArrayList<Contact>();
    static Contact one = new Contact(); 
    static Contact two = new Contact(); 
    static Contact three = new Contact(); 
    public static void main(String[] args) {
        one.setLastName("Smith");
        two.setLastName("Monks");
        three.setLastName("Aaron");
        list.add(one); list.add(two); list.add(three);
        System.out.println("Before: " + list);
        Collections.sort(list, new Comparator<Contact>() {
            public int compare(Contact contact, Contact another) {
                return contact.getLastName().compareToIgnoreCase(another.getLastName());
            }
        });
        System.out.println("After: " + list);
    }
}

結果は次のようになります。

Before: [Smith, Monks, Aaron]
After: [Aaron, Monks, Smith]
于 2012-11-23T14:41:43.400 に答える