TreeSet 和TreeMap 排序

TreeSet 有两种排序方式 
1. Java.lang.Comparble+compareTo 
new TreeSet() 
用这种方法必须要求实体类实现Comparable接口,也就是说要求添加到TreeSet中的元素是可排序的 
2. java.util.Comparator +compare 
举个TreeSet栗子:
package com.etc.test;
import java.util.Comparator;
import java.util.TreeSet;
import com.etc.entity.Person;
public class TreeSetDemo {
public static void main(String[] args) {
	Person p1=new Person("depp",100);
	Person p2=new Person("tom",90);
	Person p3=new Person("jack",50);
	TreeSet<Person> ts=new TreeSet<Person>(
			new Comparator<Person>() {
				public int compare(Person o1,Person o2){
					return o1.getHandsome()-o2.getHandsome();//升序
				}
			}
	);
	ts.add(p1);
	ts.add(p2);
	ts.add(p3);
	System.out.println(ts);
	/*
	 * 排序结果没有改变,是因为TreeSet在添加元素的时候进行排序,需要注意,数据更改不会影响原来的顺序 
还有一点需要注意的是,TreeSet中不可以数据重复,所以一般不修改数据,为了确保这一点,我们可以在Person类为属性加上final关键字,删除setter方法
	 */
	p3.setHandsome(200);//改变数据,排序不会改变
	System.out.println(ts);
}
}

举个TreeMap栗子:
package com.etc.test;

import java.util.Comparator;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;

import com.etc.entity.Person;

public class TreeMapDemo {
public static void main(String[] args) {
	Person p1=new Person("depp",100);
	Person p2=new Person("tom",90);
	Person p3=new Person("jack",50);
	TreeMap<Person, String> tm=new TreeMap<Person, String>(new Comparator<Person>() {
		public int compare(Person o1,Person o2)
		{
			return o1.getHandsome()-o2.getHandsome();//升序
		}
	});
	tm.put(p1, "ttt");
	tm.put(p2, "ttt");
	tm.put(p3, "ttt");
	System.out.println(tm);
	//也可以用set进行输出    TreeMap也是在添加元素时进行排序
	Set<Person> set=tm.keySet();
	System.out.println(set);
}
}

  

原文地址:https://www.cnblogs.com/ipetergo/p/6288849.html