Java集合知识:TreeMap

TreeMap是按照Key的排序结果来组织内部结构的Map类集合,它改变了Map类散乱无序的形象。虽然TreeMap没有ConcurrentHashMap和HashMap普及(毕竟插入和删除的效率远没有后者高),但是在Key有排序要求的场景下,使用TreeMap可以事半功倍。

在TreeMap的接口继承树中,有两个与众不同的接口:SortedMap和NavigableMap。

  1. SortedMap接口表示它的Key是有序不可重复的,支持获取头尾Key-Value元素。或者根据Key指定范围获取子集合等。插入的Key必须实现Comparable或提供额外的比较器Comparator,所以Key不允许为null,但是Value可以;

  2. NavigableMap接口继承了SortedMap接口,根据指定的搜索条件返回最匹配的Key-Value元素。不同于HashMap,TreeMap并非一定要覆写hashCode和equals方法来达到去重的目的。

public class TreeMapRepeat {
    public static void main(String[] args){
        TreeMap treeMap = new TreeMap();
        treeMap.put(new Key(),"value one");
        treeMap.put(new Key(),"value two");
        // TreeMap,size=2因为Key去重规则是根据排序结果
        System.out.println(treeMap.size());

    }
}
class Key implements Comparable<Key>{

    @Override
    // 返回负的常数,表示此对象永远小于输入的o对象,此处决定TreeMap的size=2
    public int compareTo( Key o) {
        return -1;
    }

    @Override
    // hash是相等的
    public int hashCode() {
        return 1;
    }

    @Override
    // equals比较是相等的
    public boolean equals(Object obj) {
        return true;
    }
}

 如果将上述示例中的 TreeMap treeMap = new TreeMap();换成HashMap map = new HashMap();,size的结果则从2变为1.。


HashMap是使用hashCode和equals实现去重的;
TreeMap依靠Comparable或者Comparator来实现Key的去重。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值