在Java </class>中对ArrayList <class>进行排序

时间:2012-11-23 14:12:08

标签: java sorting arraylist

我有这堂课:

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

现在我想制作一个有我的联系人的电话簿..我想用

制作它
Arraylist<Contact>

因为它没有固定的大小..当我想用Lastname对这个arraylist进行排序时我该怎么办?

2 个答案:

答案 0 :(得分:5)

您的Contact类需要实现Comparable接口......然后您可以使用Collections.sort(list)对列表进行排序。

编辑: 如果您想要多种排序方式,那么您还可以创建一个实现Comparator接口的类。您可以创建多个比较器(或使一个可配置),然后您可以将比较器作为第二个参数传递给Collections.sort

以下是解释比较器解决方案的链接:http://www.vogella.com/blog/2009/08/04/collections-sort-java/

答案 1 :(得分:2)

您必须在姓氏上放置自定义比较器,作为单独的类或匿名类:

好的,我正在编辑,因为我有空闲时间,我猜你正在学习Java:)

将这两个方法添加到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]