TreeSet使用和底层原理_Comparable接口

版权声明: https://blog.csdn.net/weixin_40072979/article/details/82967615

TreeSet 底层实际是 TreeMap 实现的,内部维持了一个简化版的 TreeMap,通过 key 来存储 Set 的元素。 TreeSet 内部需要对存储的元素进行排序,因此,我们对应的类需要四线 Comparable 接口。这样才能根据 compareTo() 方法比较对象之间的大小,才能进行内部排序 (TreeMap 对key进行升序排列)

package com.jianshun;

import java.util.Set;
import java.util.TreeSet;

/**
 * 测试TreeSet
 * 熟悉Comparable接口(参考TreeMap)
 * @author Administrator
 *
 */
public class TestTreeSet {

	
	public static void main(String[] args) {
		Set<Integer> set = new TreeSet<Integer>();
		
		set.add(300);
		set.add(200);
		set.add(600);
		
		for(Integer m : set){
			System.out.println(m);
		}
		
		Set<Emp2> set2 = new TreeSet<Emp2>();
		
		set2.add(new Emp2(100,"张三",3000));
		set2.add(new Emp2(50,"李四",2000));
		set2.add(new Emp2(150,"王五",8000));		
		set2.add(new Emp2(30,"赵六",20000));
		
		for(Emp2 m : set2){
			System.out.println(m);
		}
	}
}

//当key是一个自定义对象时;
class Emp2 implements Comparable<Emp2>{
	int id;
	String name;
	double salary;

	public Emp2(int id, String name, double salary) {
		super();
		this.id = id;
		this.name = name;
		this.salary = salary;
	}
	
	public int compareTo(Emp2 o) {//负数:小于,0:等于,整数:大于
		if(this.salary > o.salary){
			return 1;
		}else if(this.salary < o.salary){
			return -1;
		}else{// salary相等在比较id
			if(this.id > o.id){
				return 1;
			}else if(this.id < o.id){
				return -1;
			}else{
				return 0;
			}
		}
	}

	@Override
	public String toString() {
		return "Emp2 [id=" + id + ", name=" + name + ", salary=" + salary + "]";
	}

}

运行结果:

200
300
600
Emp2 [id=50, name=李四, salary=2000.0]
Emp2 [id=100, name=张三, salary=3000.0]
Emp2 [id=150, name=王五, salary=8000.0]
Emp2 [id=30, name=赵六, salary=20000.0]

猜你喜欢

转载自blog.csdn.net/weixin_40072979/article/details/82967615