TreeSet和TreeMap

TreeSet

对于TreeSet类不仅实现了Set接口,还实现了java.util.SortedSet接口(注意Collection位于java.lang.Object包),因此,TreeSet类实现的Set集合在遍历集合时按照自然顺序递增排序,也可以按照指定比较比较器递增排序,即可以通过比较器对用TreeSet类实现的Set集合中的对象进行排序。

  • 按照自然顺序排序,java.lang.Comparable,调用new TreSet()空构造器方法
  • 按照业务类排序,java.util.Comparator,调用new TreeSet(Comparator
public class person {
    private String name;
    private int hansome;

    public person() {
    }
    public person(String name, int hansome) {
        super();
        this.name = name;
        this.hansome = hansome;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getHansome() {
        return hansome;
    }
    public void setHansome(int hansome) {
        this.hansome = hansome;
    }

    @Override
    public String toString() {
        return this.name+"--"+this.hansome;
    }
}
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;


public class TestTreeSet {
    public static void main(String[] args) {
        Set<person> list = new TreeSet<>(new Comparator<person>(){
            @Override
            public int compare(person o1, person o2) {
                return o1.getHansome()-o2.getHansome();
            }  //如果使用业务规则排序,需要使用带参构造
        });
        person p1 = new person("我", 100);
        person p2 = new person("你", 80);
        person p3 = new person("他", 10);
        person p4 = new person("她", 90);
        list.add(p1);
        //注意,TreeSet是在添加数据的自动排序,不像Collections需要调用排序方法
        //在谈价p2的时候就和p1作比较
        list.add(p2);
        list.add(p3);
        list.add(p4);

        System.out.println(list);
        System.out.println("--------注意,就算改变数据,顺序还是不会变,所以最好不要修改数据--------");
        p4.setHansome(10);    //想要数据不被修改,就吧不应该被改的数据改成final修饰就行
        System.out.println(list);
    }
}
输出结果为:[他--10, 你--80, 她--90, 我--100]
--------注意,就算改变数据,顺序还是不会变,所以最好不要修改数据--------
          [他--10, 你--80, 她--10, 我--100]

当然,也可以使用Comparable按照自然排序

public class worker implements Comparable<worker>{
    private String type;
    private double salary;

    public worker() {
    }

    public worker(String type, double salary) {
        super();
        this.type = type;
        this.salary = salary;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    @Override
    public int compareTo(worker o) {
        return (int) (this.salary-o.salary);
    }
    @Override
    public String toString() {
        return this.type+"--"+this.salary;
    }

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

public class TestTree_1 {
    public static void main(String[] args) {
        worker w1 = new worker("农民", 2000);
        worker w4 = new worker("我", 20000);
        worker w3 = new worker("白领", 5000);
        worker w2 = new worker("工民", 3000);
        Set<worker> set = new TreeSet<worker>();
        set.add(w1);
        set.add(w2);
        set.add(w3);
        set.add(w4);
        System.out.println(set);
    }
}
输出结果:[农民--2000.0, 工民--3000.0, 白领--5000.0, 我--20000.0]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值