Java集合之TreeSet

总结

  1. TreeSet 是 SortedSet 接口的实现类,TreeSet 可以确保集合元素处于排序状态。
  2. TreeSet 支持两种排序方法:自然排序和定制排序。默认情况下,TreeSet 采用自然排序。

自然排序

排序:TreeSet 会调用集合元素的 compareTo(Object obj) 方法来比较元素之间的大小关系,然后将集合元素按升序排列
如果 this > obj,返回正数 1
如果 this < obj,返回负数 -1
如果 this = obj,返回 0 ,则认为这两个对象相等
必须放入同样类的对象.(默认会进行排序) 否则可能会发生类型转换异常.我们可以使用泛型来进行限制

import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class Test {
	public static void main(String[] args) {
		Set<Integer> set = new TreeSet<Integer>();
		//添加元素
		set.add(10);
		set.add(4);
		set.add(99);
		set.add(66);
		//移除元素
		set.remove(1);
		//是否包含某种元素
		set.contains(99);
		//TreeSet自然排序
		System.out.println(set);
		
		//使用迭代器遍历集合
		Iterator<Integer> st = set.iterator();
		while(st.hasNext()) {
			System.out.println(st.next());
		}
		//使用for each迭代集合
		for(Integer i :set) {
			System.out.println(i);
		}
}

定制排序

如果需要实现定制排序,则需要在创建 TreeSet 集合对象时,提供一个 Comparator 接口的实现类对象。由该 Comparator 对象负责集合元素的排序逻辑

import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class Test {
	public static void main(String[] args) {	
		/**
		 * 定制排序
		 * 如果需要实现定制排序,则需要在创建 TreeSet 集合对象时,
		 * 提供一个 Comparator 接口的实现类对象。
		 * 由该 Comparator 对象负责集合元素的排序逻辑
		 */
		Person p5 = new Person(111,"李四");
		Person p1 = new Person(13,"张三");
		Person p2 = new Person(9,"王二");
		Person p3 = new Person(101,"李逵");
		Person p4 = new Person(111,"李某人");
		//创建一个person对象的泛型集合
		Set<Person> p = new TreeSet<Person>(new Person());
		//将对象加入集合
		p.add(p1);
		p.add(p2);
		p.add(p3);
		p.add(p4);
		p.add(p5);
		//for each遍历集合
		for(Person set1:p) {
			System.out.println(set1.age+"    "+set1.name);
		}
		
	}
}
//实现Comparator接口
class Person implements Comparator<Person>{
	int age;
	String name;
	//定义一个无参构造和有参构造
	Person() {}
	Person(int age,String name){
		this.name = name;
		this.age = age;
	}
//重写compare方法,自定义排序方式
	@Override
	public int compare(Person o1, Person o2) {
		if(o1.age>o2.age) {
			return 1;
		}else if(o1.age<o2.age) {
			return -1;
		}
		return 0;
	}}

原文地址:https://www.cnblogs.com/istart/p/12013648.html