Java TreeSet

TreeSet

TreeSet可以给Set集合中的元素进行指定顺序的排序。默认情况下是通过元素的自然顺序进行排序。

TreeSet保证元素唯一性的依据:比较方法的返回结果是否是0,如果是0,则存在相同元素,不再存入TreeSet。

TreeSet排序方式一:

让元素自身具备可比较性,需要实现Comparable接口,重写compareTo方法,这种排序方式是按照自然顺序进行的排序。

TreeSet排序方式二:

让容器自身具有比较性。容器一初始化就具备比较功能。因为容器是在对象构造的时候初始化。

构造方法TreeSet(Comparator),在容器初始化时指定一个比较器,这种方法称为比较器排序。需要实现Comparator接口,重写compare方法。

例1:采用自然顺序进行排序(先按年龄排序,如果年龄一样再按照姓名排序)

Person类   Person.java

/*
*Created on 2016年6月1日
*Copyright 2016 Yong Cai Limited crop. All Rights Reserved
*
*728**[email protected]
*/

package treeset;

public class Person implements Comparable{
	String name;
	int age;
	
	public Person(String name, int age){
		this.name = name;
		this.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 String toString() {
		return this.name + ":" + this.age;
	}

	@Override
	public int compareTo(Person o) {
		int temp = this.age - o.age;
		return temp == 0?this.name.compareTo(o.getName()):temp;
	}
	
	
}

TreeSetTest类    TreeSetTest.java

/*
*Created on 2016年6月1日
*Copyright 2016 Yong Cai Limited crop. All Rights Reserved
*
*728**[email protected]
*/

package treeset;

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

public class TreeSetTest {

	public static void main(String[] args) {
		
        Person p1 = new Person("nameee", 11);
        Person p2 = new Person("name1", 11);
        Person p3 = new Person("name1", 16);
        Person p4 = new Person("name4", 100);
        Person p5 = new Person("name0", 100);
		
		TreeSet ts = new TreeSet();//自然顺序进行排序
		//TreeSet ts = new TreeSet(new CompareByName());//使用比较器进行排序
		ts.add(p1);
		ts.add(p2);
		ts.add(p3);
		ts.add(p4);
		ts.add(p5);
		
  		Iterator iter = ts.iterator();
		
		while (iter.hasNext()) {
			Person person = iter.next();
			System.out.println(person.toString());
			
		}
	}

}
运行结果:

name1:11
nameee:11
name1:16
name0:100
name4:100

例2:使用比较器进行排序(先按姓名排序,如果姓名一样再按照年龄排序)

CompareByName.java

/*
*Created on 2016年6月1日
*Copyright 2016 Yong Cai Limited crop. All Rights Reserved
*
*728**[email protected]
*/

package treeset;

import java.util.Comparator;

public class CompareByName implements Comparator{

	@Override
	public int compare(Object o1, Object o2) {
		Person p1 = (Person)o1;
		Person p2 = (Person)o2;
		
		int temp = p1.getName().compareTo(p2.getName());
		return temp==0?p1.getAge() - p2.getAge():temp;
	}
	
}

运行结果:

name0:100
name1:11
name4:100
nameee:11


你可能感兴趣的:(Java)