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);
}
}
Java TreeSet的两种自定义类比较方式及TreeSet存储原理
最新推荐文章于 2021-04-02 00:49:23 发布