Set排序
set包括HashSet和TreeSet,HashSet是基于HashMap的,TreeSet是基于TreeMap的。
TreeMap是用红黑树实现,天然就具有排序功能,“天然就具有排序功能”是指它拥有升序、降序的迭代器。
那么HashSet怎么排序呢?我们可以将HashSet转成List,然后用List进行排序。
例如:
package SetLearn; public class User implements Comparable<User> { private String name; private int age; public User() { } public User(String name, int age) { super(); this.name = name; this.age = age; } @Override public String toString() { return "name:" + name + ",age:" + age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public int compareTo(User o) { if (o.age < this.age) { return 1; } else if (o.age > this.age) { return -1; } else { return 0; } } /** * @param args */ public static void main(String[] args) { User u1 = new User("fox", 11); User u2 = new User("fox2", 21); System.out.println(u2.compareTo(u1)); } }
主要示例代码:
Set<User> us = new HashSet<User>(); //Set<User> us = new TreeSet<User>(); //Set<User> us = new TreeSet<User>(new Comparator<User>() { // @Override // public int compare(User o1, User o2) { // if (o1.getAge() < o2.getAge()) { // return -1; // } else if (o1.getAge() > o2.getAge()) { // return 1; // } else { // return o1.getName().compareTo(o2.getName()); // } // } //}); us.add(new User("f5", 12)); us.add(new User("f2", 22)); us.add(new User("f3", 2)); us.add(new User("f4", 14)); us.add(new User("f5", 32)); us.add(new User("f4", 12)); us.add(new User("f7", 17)); us.add(new User("f8", 52)); // set -> array List<User> list = new ArrayList<User>(us); System.out.println(list); Collections.sort(list); System.out.println(list);
也可以将HashSet转换成数组用Arrays排序。