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集合框架之_TreeSet特性

1.向TreeSet中添加是元素必须是同一类型的。否则会报错。  2.可以按照添加进集合中的元素的指定的顺序来遍历;如:String,包装类等默认按照从小到大的顺序遍历  3.当向TreeSet中...
  • XF777
  • XF777
  • 2017年07月30日 22:23
  • 129

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

[java] view plaincopy import java.util.*;      /*  Set:无序,不可以重复元素。      |--HashSe...

java模仿斗地主随机洗牌 发牌,TreeMap、ArrayList、TreeSet练习

/** * 模仿斗地主洗牌,随机发牌 * 使用TreeMap、ArrayList、TreeSet * 思想: * 使用TreeMap存54张牌,每张牌作为值,key为每张牌整数编...

java集合框架的练习之TreeSet集合的运用

java集合框架练习之TreeSet集合的运用 要求: 从键盘接收一个字符串,程序对其中所有的字符进行排序并输出....
  • striner
  • striner
  • 2017年11月04日 17:48
  • 32

java集合类深入分析之TreeMap/TreeSet篇

转载自:http://shmilyaw-hotmail-com.iteye.com/blog/1836431 简介     TreeMap和TreeSet算是java集合类里面比较有难度的数据...

Java学习之TreeSet的反序

package com.edu.homework; import java.util.Comparator; import java.util.Scanner; import java.util.S...

Java 集合系列17之 TreeSet详细介绍(源码解析)和使用示例

概要 这一章,我们对TreeSet进行学习。 我们先对TreeSet有个整体认识,然后再学习它的源码,最后再通过实例来学会使用TreeSet。内容包括: 第1部分 TreeSet介绍 第2...

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

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

Java集合-TreeSet(一)

TreeSet集合源码解析源码package java.util;public class TreeSet extends AbstractSet implements NavigableSe...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java TreeSet
举报原因:
原因补充:

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