不灭的焱

革命尚未成功,同志仍须努力

作者:php-note.com  发布于:2019-02-19 10:05  分类:Java基础 

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排序。