Java TreeSet

原创 2016年06月01日 16:53:08

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


版权声明:本文为博主原创文章,未经博主允许不得转载。

TreeSet

/* *TreeSet:此处简单实现了将自定义对象存入二叉树结构集合的实例。存入二叉树结构集合的元素,必须具备比较性,或者集合本身具备比较器。 * *对象具备比较性通过其类实现Comparabl...
  • u014798557
  • u014798557
  • 2014年07月21日 13:53
  • 261

java file.io的各种使用

File类   File可以表示一个文件的名字也可以表示某个目录下一堆文件的名字,如果是表示多个文件,那么可以使用list方法来获取他们的set集合,返回的是一系列的字符串。下面我们就来看下如何使用...
  • lanmenghcc
  • lanmenghcc
  • 2014年10月20日 11:42
  • 1921

TreeSet学习小结

JDK对TreeSet介绍如下:基于 TreeMap 的 NavigableSet 实现。使用元素的自然顺序对元素进行排序, 或者根据创建 set 时提供的 Comparator 进行排序,具体取决于...
  • liuweiballack
  • liuweiballack
  • 2015年08月30日 17:18
  • 562

Java之TreeSet介绍

import java.util.Comparator; import java.util.TreeSet; import org.junit.Test; //非线程安全 public class...
  • shihuacai
  • shihuacai
  • 2013年07月12日 11:44
  • 6578

java的Set集合:TreeSet集合

1.TreeSet类TreeSet使用红黑树的数据结构来存储集合元素 TreeSet也不能存放重复对象,但是TreeSet会自动排序,如果存放的对象不能排序则会报错,所以存放的对象必须指定排序规则。...
  • peach90
  • peach90
  • 2015年05月14日 20:32
  • 1365

知识点:各种容器介绍(示例为TreeSet),TreeSet的遍历

/**  * ArrayList LinkList HashSet TreeSet Comparator  * ArrayList的ListIterator,equals(),get()  *...
  • heyanmeicomeon
  • heyanmeicomeon
  • 2014年08月04日 20:09
  • 3106

java之TreeSet里添加自定义对象

以一个例子来说明: package javastudy; import java.util.Comparator; import java.util.Iterator; import ...
  • qq_32575047
  • qq_32575047
  • 2016年07月22日 21:05
  • 1527

浅谈java中的TreeSet中的排序方式

TreeSet 和HashSet的区别 HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的,只不过Set用的只是Map的key Map的key和Set都有一个共同的特性...
  • mingxin95
  • mingxin95
  • 2016年05月25日 11:14
  • 1694

Java中TreeSet的用法

Java中 TreeMap和TreeSet算是java集合类里面比较有难度的数据结构。和普通的HashMap不一样,普通的HashMap元素存取的时间复杂度一般是O(1)的范围,而TreeMap内部对...
  • u012050154
  • u012050154
  • 2016年05月20日 10:37
  • 6572

java的TreeSet类详解

集合 的体系: ------------| Collection 单例集合的根接口 ----------------| List  如果是实现了List接口的集合类,具备的特点: 有序,可重复。  -...
  • oguro
  • oguro
  • 2016年11月30日 22:04
  • 1933
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java TreeSet
举报原因:
原因补充:

(最多只允许输入30个字)