Java面向对象
Java异常
Java数组
Java常用类
Java集合
Java IO流
Java线程
Java反射
Socket编程
Java注解开发
Java GoF设计模式
HashMap
Java内存模型
Java线性表

Java TreeSet集合

TreeSet集合实现了SortedSet接口, 可以对集合中元素进行自然排序, 要求集合中的元素必须是可比较的。

package com.wkcto.chapter05.set;

import java.util.Comparator;
import java.util.TreeSet;

/**
 * TreeSet集合
 * 		可以对元素进行自然排序, 要求元素必须是可比较的
 * 			1)创建TreeSet集合时,通过构造方法指定Comparator比较器
 * 			2)如果没有指定Comparator比较器, 要求元素的类必须实现Comparable接口
 * @author 蛙课网
 *
 */
public class Test03 {

	public static void main(String[] args) {
		//1) 创建TreeSet集合,存储Person对象, 在构造方法中指定Comparator比较器,按姓名升序排序
		TreeSet<Person> treeSet = new TreeSet<>(new Comparator<Person>() {
			//在匿名内部类中重写接口的抽象方法
			@Override
			public int compare(Person o1, Person o2) {
				//指定一个比较规则
				return o1.name.compareTo(o2.name);   //姓名升序
			}
		});
		
		//2)添加元素
		treeSet.add(new Person("lisi", 18));
		treeSet.add(new Person("feifei", 28));
		treeSet.add(new Person("yong", 35));
		treeSet.add(new Person("bin", 36));
		treeSet.add(new Person("zhang", 33));
		
		//3)直接打印
		System.out.println( treeSet );
		
		//4) 根据已有TreeSet创建新的TreeSet集合
		TreeSet<Person> treeSet22 = new TreeSet<>(treeSet);
		System.out.println( treeSet22 );
		
		//5) 使用TreeSet的无参构造, 没有指定Comparator比较器, 要求Person类实现Comparable接口
		TreeSet<Person> treeSet33 = new TreeSet<>();
		treeSet33.addAll(treeSet);		
		System.out.println( treeSet33);
	}

}

TreeSet集合底层是TreeMap,向TreeSet集合添加元素,实际上是把该元素作为键添加到了底层TreeMap中,TreeSet集合实际上就是底层TreeMap的键的集合。

package com.wkcto.chapter05.set;

import java.util.Comparator;
import java.util.TreeSet;
/**
 * 注意:
 * 		在TreeSet集合中, 是根据Comparator/Comparable的比较结果是否为0来判断是否为同一个对象
 * 		如果Comparator的compare()方法/Comparable的compareTo()方法的返回值为0 就认为是同一个对象
 * @author 蛙课网
 *
 */
public class Test04 {

	public static void main(String[] args) {
		//创建TreeSet集合,存储Person对象, 通过构造方法指定Comparator比较器,按年龄降序排序
		TreeSet<Person> treeSet = new TreeSet<>(new Comparator<Person>() {
			@Override
			public int compare(Person o1, Person o2) {
				return o2.age - o1.age;
			}
		});
		
		//当前treeSet是根据年龄比较Person大小的, 在添加Person对象时, 如果年龄相同就认为是同一个对象
		treeSet.add(new Person("lisi", 18));
		treeSet.add(new Person("feifei", 18));
		treeSet.add(new Person("zhang", 18));
		treeSet.add(new Person("yong", 18));
		
		System.out.println( treeSet.size() ); 		// 1
		System.out.println( treeSet );
		System.out.println( treeSet.contains( new Person("wang", 18)));   //true
	}

}