java--TreeMap实现原理

5 篇文章 0 订阅

TreeMap是红黑二叉树的典型实现

TreeMap和HashMap实现了同样的接口Map,HashMap效率高于TreeMap,在需要排序Map时才选用TreeMap;

private transient Entry<K,V> root;
package cn.gm.map;

import java.util.Map;
import java.util.TreeMap;

/**
 * @ClassName TestTreeMap
 * @Description 测试TreeMap的用法
 * @Author edz
 * @Date 2021/5/11 4:48 下午
 * @Version 1.0
 **/
public class TestTreeMap {
    public static void main(String[] args) {
        Map<Integer, String> treemap1 = new TreeMap<>();
        treemap1.put(20, "aa");
        treemap1.put(3, "bb");
        treemap1.put(40, "cc");
        //按照key递增的方式排序
        for(Integer key:treemap1.keySet()){
            System.out.println(key+"---"+treemap1.get(key)); // 3---bb, 20---aa, 40---cc
        }
        Map<Emp, String> treemap2 = new TreeMap<>();
        treemap2.put(new Emp(100, "张三", 50000), "是个好人");
        treemap2.put(new Emp(200, "李四", 10000), "不积极");
        treemap2.put(new Emp(300, "王五", 30000), "不错");
        treemap2.put(new Emp(400, "拉里", 10000), "不错");

        for(Emp key:treemap2.keySet()){
            System.out.println(key+"---"+treemap2.get(key)); // 3---bb, 20---aa, 40---cc
        } /**id: 200name:李四salary:10000.0---不积极
         id: 400name:拉里salary:10000.0---不错
         id: 300name:王五salary:30000.0---不错
         id: 100name:张三salary:50000.0---是个好人
         */
    }

}

class Emp implements Comparable<Emp>{
    int id;
    String name;
    double salary;

    public Emp(int id, String name, double salary) {
        this.id = id;
        this.name = name;
        this.salary = salary;
    }

    @Override
    public int compareTo(Emp o) { //负数:小于, 0:等于, 正数:大于
        if(this.salary > o.salary){
            return 1;
        } else if(this.salary < o.salary){
            return -1;
        } else{
            if(this.id>o.id){
                return 1;
            } else{
                return 0;
            }
        }
    }

    @Override
    public  String toString(){
        return "id: "+id +"name:"+name +"salary:" + salary;
    }
}

TreeSet底层用TreeMap实现

package cn.gm.map;

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

/**
 * @ClassName TestTreeSet
 * @Description Treeset,底层用TreeMap
 * @Author edz
 * @Date 2021/5/11 5:31 下午
 * @Version 1.0
 **/
public class TestTreeSet {
    public static void main(String[] args) {
        Set<Integer> treeSet = new TreeSet();
        treeSet.add(1111);
        treeSet.add(2222);
        treeSet.add(2222);
        for(Integer m:treeSet){
            System.out.println(m); // 1111, 2222
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小小_长颈鹿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值