Java TreeSet的两种自定义类比较方式及TreeSet存储原理

package com.heilong.collection;

import java.util.Comparator;
import java.util.TreeSet;
/*
 * TreeSet添加自定义元素:
 * 
 * TreeSet要注意的事项:
 * 1.往TreeSet添加元素的时候,如果元素本身具备了自然元素的特性,那么就按照元素自然顺序的特性进行排序存储
 * 2.往TreeSet添加元素的时候,如果元素本身不具备自然元素的特性,那么该元素所属的类必须要实现Comparable接口,把元素的
 * 		比较规则定义在compaerTo(T o)方法内
 * 3.如果比较元素的时候,compareTo方法返回的是0,那么该元素视为重复元素,不允许添加
 * 4.往TreeSet添加元素的时候,如果元素本身没有具备自然顺序的特性,而元素所属的类也没有实现Comparable接口,那么必须要在创建TreeSet的时候传入一个比较器
 * 5.往TreeSet添加元素的时候,如果元素本身没有具备自然顺序的特性,元素所属的类实现了Comparable接口,在创建TreeSet的时候也传入了一个比较器,那么是以比较器的比较规则优先
 * 
 * 如何自定义比较器:自定义一个类实现Comparator接口即可,把比较规则定义在compara()方法内。
 * 
 * 		class 类名 implements Comparator{
 * 		
 * 		}
 * */

//方式一:
class Emp1 implements Comparable<Emp1>{
	
	int id;
	
	String name;
	
	int salary;
	
	public Emp1(int id, String name, int salary){
		super();
		this.id = id;
		this.name = name;
		this.salary = salary;
	}
	
	@Override
	public String toString() {

		return "{ 编号:" + this.id + " 姓名:" + this.name + " 薪水:" + this.salary;
	}
	
	@Override
	public int compareTo(Emp1 e) {
		System.out.println(this.name + "cpmpare" + e.name);
		return this.salary-e.salary;
	}
}

//方式二:



class Emp2 {
	
	int id;
	
	String name;
	
	int salary;
	
	public Emp2(int id, String name, int salary){
		super();
		this.id = id;
		this.name = name;
		this.salary = salary;
	}
	
	@Override
	public String toString() {

		return "{ 编号:" + this.id + " 姓名:" + this.name + " 薪水:" + this.salary;
	}
	
}

class MyComparator implements Comparator<Emp2>{

	@Override
	public int compare(Emp2 e1, Emp2 e2) {
		return e1.salary-e2.salary;
	}
	
	
}

public class treeSet {

	public static void main(String[] args) {
		TreeSet treeSet1 = new TreeSet();
		
		treeSet1.add(new Emp1(001,"张三",200));
		treeSet1.add(new Emp1(002,"李四",300));
		treeSet1.add(new Emp1(003,"王五",100));
		treeSet1.add(new Emp1(004,"赵六",500));
		
		System.out.println(treeSet1);
		
		System.out.println("******************************************");
		
		MyComparator myComparator = new MyComparator();
		TreeSet treeSet2 = new TreeSet(myComparator);
		
		treeSet2.add(new Emp2(001,"张三",200));
		treeSet2.add(new Emp2(002,"李四",300));
		treeSet2.add(new Emp2(003,"王五",100));
		treeSet2.add(new Emp2(004,"赵六",500));
		
		System.out.println(treeSet2);
	}
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值