【奔跑的菜鸟】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<Student> tSet = new TreeSet<Student>(new MyComparator());

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


		for(Iterator<Student> 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<Object>
{
	@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的自定义排序


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值