关闭

Java TreeSet

193人阅读 评论(0) 收藏 举报
分类:

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**80@qq.com
*/

package treeset;

public class Person implements Comparable<Person>{
	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**80@qq.com
*/

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<Person> ts = new TreeSet<Person>();//自然顺序进行排序
		//TreeSet<Person> ts = new TreeSet<Person>(new CompareByName());//使用比较器进行排序
		ts.add(p1);
		ts.add(p2);
		ts.add(p3);
		ts.add(p4);
		ts.add(p5);
		
  		Iterator<Person> 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**80@qq.com
*/

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


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    Always Be Coding
    We have seen that computer programming is an art, because it applies accumulated knowledge to the world.A programmer who subconsciously views himself as an artist will enjoy what he does and will do it better.
    Contact
    Mail:yongcai@my.swjtu.edu.cn Phone:18782924980
    个人资料
    • 访问:207625次
    • 积分:3765
    • 等级:
    • 排名:第8598名
    • 原创:173篇
    • 转载:16篇
    • 译文:0篇
    • 评论:25条
    最新评论