TreeSet和TreeMap排序原理

package unit5;

import java.util.TreeMap;

import java.util.TreeSet;

public class Java45 {

public static void main(String[] args) {

// 集合排序

// TreeSet集合:不重复、排序

// 报错:unit5.P cannot be cast to java.lang.Comparable

TreeSet<P> treeSet = new TreeSet<>();

treeSet.add(new P("bca", 40));

treeSet.add(new P("abc", 30));

treeSet.add(new P("ccc", 50));

treeSet.forEach(System.out::println);

// TreeSet源码:TreeSet底层就是通过TreeMap实现的

//        public TreeSet() {

//            this(new TreeMap<E,Object>());

//        }

//        public boolean add(E e) {

//            return m.put(e, PRESENT)==null;

//        }

// TreeMap集合:key-value存储、key排序

//        TreeMap<String, String> treeMap = new TreeMap<>();

//        treeMap.put("bba","张A");

//        treeMap.put("abc","张B");

//        treeMap.put("ccc","张C");

//        treeMap.put("bca","张D");

//        treeMap.forEach((k,v)->{

//            System.out.println(k + v);

//        });

// 排序本质:TreeSet -> TreeMap -> Comparable

//        Comparable<? super K> k = (Comparable<? super K>) key;

//        TreeMap.Entry<K,V> p = root;

//        while (p != null) {

//            int cmp = k.compareTo(p.key);

//        System.out.println("a".compareTo("b"));

//        System.out.println("b".compareTo("a"));

//        System.out.println("a".compareTo("a"));

}

}

// 自定义类需要实现Comparable接口、规定了排序的规则

class P implements Comparable {

// 实现排序规则的方法

// 正数、负数、0

@Override

public int compareTo(Object o) {

P p = (P)o;

return this.name.compareTo(p.name);

}

String name;

int age;

public P(String name, int age) {

this.name = name;

this.age = age;

}

@Override

public String toString() {

return "P{" +

"name='" + name + '\'' +

", age=" + age +

'}';

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大连赵哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值