【奔跑的菜鸟】Java中TreeSet的自定义排列顺序


      在Java编程中有时会用到TreeSet这个类,这个类会对里面的key进行自动的排序。一般是进行自然序列排序,但是自然序列排序,一般都没什么用。我们大多数情况下需要它按照我们自己要求的方式进行排序。下面这个例子就是把一个类的引用放到TreeSet中,然后按照类中一个成员变量的大小进行排序。

package com.java;

import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

public class TreeSetTest
{
	public static void main(String[] args)
	{

		Student stu1 = new Student(6, "zhao");
		Student stu2 = new Student(69, "qian");
		Student stu3 = new Student(644, "sun");
		Student stu4 = new Student(68, "li");
		Student stu5 = new Student(45, "zhou");
		Student stu6 = new Student(5, "wu");

		TreeSet tSet = new TreeSet(new MyComparator());

		tSet.add(stu1);
		tSet.add(stu2);
		tSet.add(stu3);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
		tSet.add(stu4);
		tSet.add(stu5);
		tSet.add(stu6);


		for(Iterator iter = tSet.iterator();iter.hasNext();)
		{
			System.out.println(iter.next());
		}
	}
}

class Student
{
	private int score;
	private String name;

	Student(int a, String str)
	{
		this.score = a;
		this.name = str;
	}

	int Score()
	{
		return score;
	}

	@Override
	public String toString()
	{

		return this.name + "   " + String.valueOf(this.score);
	}
}

class MyComparator implements Comparator
{
	@Override
	public int compare(Object o1, Object o2)
	{
		Student s1 = (Student) o1;
		Student s2 = (Student) o2;
		if (s1.Score() > s2.Score())
			return 1;
		else if (s1.Score() == s2.Score())
			return 0;
		else
			return -1;
	}
}
 
  
运行结果如下:

wu   5
zhao   6
zhou   45
li   68
qian   69
sun   644

同理,也可以写出关于TreeMap的自定义排序


你可能感兴趣的:(奔跑的菜鸟)