2015-11-08 69 views
0

我需要将对象用户放入集合中,然后通过三个比较器对它们进行排序。 因此排序后的集合必须通过一个变量。 什么样的集合可供选择?如何实现它?集合和比较器

ArrayList<User> list2 = Collections.sort(list , new NameComparator()); 

所以这是不可能的。我可以使用TreeSet或ArrayList吗?

public class User { 
private String name; 
private String surname; 
private String login; 
} 

public class NameComparator implements Comparator<User>{ 

public int compare(User a, User b){ 

    return a.getName().compareTo(b.getName()); 
} 
} 

public class SurnameComparator implements Comparator<User>{ 

public int compare(User a, User b){ 

    return a.getSurname().compareTo(b.getSurname()); 
} 
} 

public class LoginComparator implements Comparator<User>{ 

public int compare(User a, User b){ 

    return a.getLogin().compareTo(b.getLogin()); 
} 
} 

怎么办?

TreeSet set1= new TreeSet<User>(new NameComparator()); 

    set1.add(new User("RRRR","TTTT","KK")); 
    set1.add(new User("AAA","EEEEE","QQQQ")); 
    set1.add(new User("GGGG","BBBBB","ssss")); 
    set1.add(new User("BBBB","BBBBF","AAAA")); 

    System.out.println(set1); 

    TreeSet set2= new TreeSet<User>(new LoginComparator()); 
    set2=set1; 
    System.out.println(set2); 

回答

0

您可以使用TreeSet集合。 虽然创建TreeSet只是传递你想要的比较器的类。

例如:Set<User> userSet=new TreeSet<User>(new NameComparator());

这将根据名称顺序的设置。

+0

那么如何在同一个集合中分配另一个比较器(新的SurnameComparator())呢? – Dmitry88

+0

请你清楚解释一下吗?你想基于姓氏对排序后的Treeset进行排序吗?是的,你也可以这样做。创建另一个Treeset并在创建时使用SurnameComparator。将以前的userSet添加到新的TreeSet。如果这不是你所问的,请清楚指明你想要的。 –

+0

TreeSet set1 = new TreeSet (new NameComparator()); \t \t \t \t set1.add(new User(“11”,“3”,“2”)); \t \t set1.add(新用户(“5”,“3”,“1”)); \t \t set1.add(新用户(“1”,“1”,“5”)); (新用户(“2”,“1”,“4”)); \t \t \t \t System.out.println(set1); \t \t \t \t TreeSet set2 = new TreeSet (new LoginComparator()); \t \t set2 = set1; \t \t System.out.println(set2); – Dmitry88

1

您可以使用ArrayList集合,但每次插入后都不会自动排序元素(除非再次调用显式排序)。为了达到这个目的,你必须使用TreeSet(或者ConcurrentSkipListSet)。

要使用ArrayList,你可以简单地做:

ArrayList<User> myList = new ArrayList<>(); 
myList.add(new User()); 
myList.add(new User()); 
myList.add(new User()); 
// Add your elements. 

Collections.sort(myList , new LoginComparator()); 
Collections.sort(myList , new SurnameComparator()); 
Collections.sort(myList , new NameComparator()); 

考虑也该方法Collections.sort(...)返回一个新的实例,这是一个无效方法。在第一行中,您将排序的结果分配给一个新的ArrayList。