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


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

相关文章推荐

Java基础---集合框架---迭代器、ListIterator、Vector中枚举、LinkedList、ArrayList、HashSet、TreeSet、二叉树、Comparator

为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。 数组和集合类同是容器,有何不同? 数组虽然也可以...

Java集合系列(10)--TreeSet

java集合系列之TreeSet,底层是由TreeMap实现的,即是红黑树

java集合TreeSet的两种排序方式

java集合TreeSet的两种排序方式:          自然排序:①要求添加进TreeSet中的元素所在的类implements Comparable接口 ②重写compareTo(Obje...

java中treemap和treeset实现(红黑树)

TreeMap 的实现就是红黑树数据结构,也就说是一棵自平衡的排序二叉树,这样就可以保证当需要快速检索指定节点。 TreeSet 和 TreeMap 的关系 为了让大家了解 TreeM...

java 集合框架-TreeSet练习

import java.util.*; /* 练习:按照字符串长度排序。 字符串本身具备比较性,但是它的比较方式不是所需要的。这时就只能使用比较器 注意:在方式二中: int num=ne...

java中的Iterator 和TreeSet

HashSet 是没有提供get方法的,但是我们在使用Set的时候要获取对象,因此在HashSet中提供了 Iterator 来实现遍历迭代器的工作原理: 主要有三个函数:可以认为iter是箭...

Java中HashSet、LinkedHashSet和TreeSet的使用

HashSet hashSet = new HashSet<>(); hashSet.add("a"); hashSet.add("a"); hashS...

学习日记java TreeSet

/* Set:无序,不可以重复元素。 |–HashSet:数据结构是哈希表。线程是非同步的。 保证元素唯一性的原理:判断元素的hashCode值是否相同。...

Java基础--集合框架(HashSet、TreeSet、泛型)

Set集合体系Set集合中元素是无序的(存入和取出的顺序不一定一致),元素不可以重复;Set接口常用类 HashSet:底层数据结构是哈希表,线程是非同步的; TreeSet:底层数据结构 是二叉树,...

java se TreeSet自己实现Comparator接口

1 字母按照倒序排列的Comparator实现方法代码import java.util.Comparator; import java.util.Iterator; import java.uti...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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