2012-11-23 143 views
0

我有这个类: 排序的ArrayList中的Java

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> 

做它,因为它赢得了没有固定的大小。当我想按姓氏对这个数组列表进行排序时,我该怎么办?

+0

这个问题已经被问过无数次之前,并且可以很容易地看着在互联网上。 http://stackoverflow.com/questions/9679769/sort-an-arraylist-of-objects –

回答

5

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

编辑: 如果你想有多种排序方式,那么你也可以创建一个实现Comparator接口的类。您可以创建多个比较器(或使一个可配置的),那么你可以通过比较器作为第二个参数Collections.sort

这里是一个链接解释比较的解决方案:http://www.vogella.com/blog/2009/08/04/collections-sort-java/

+0

我不能让类MyComparable实现比较器。你可以帮我吗?我如何比较联系人的姓氏2并返回正确的?之后:Collections.sort(contacts,new MyComparable()); ? – Bbabis

+0

让您的MyComparable类实现比较器而不是比较器,因为您要比较联系人项目... – Tom

2

,你将不得不把在关于姓氏的自定义比较,无论是作为一个单独的类或匿名类:

OK,我编辑,因为我有一些空闲时间,我想你是学习Java :)

这两种方法添加到联系人类别测试:

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] 
+0

我想排序我的ArrayList contacts = new ArrayList <>(); (联系人是一个有很多领域的类)由联系人的字段lastname(字符串)..所以我会写:Collections.sort(联系人,新比较器)..请帮我代码..我遇到这个问题很多次我想要一个解决方案.. – Bbabis