05 集合-Map(三)

SortedMap

接口,继承了Map接口。它是一个会对键值对,根据key进行排序的一种Map,要求存储的Key都实现了Comparable接口,或者该接口的实现类可以接收一种比较方法,代替key自身去实现的Comparable接口。同时要求存储的key在比较的时候不会出现ClassCastException异常,即key是同一种类型。

SortedMap基于Map接口扩展的方法如下:

  • comparator,返回key的比较器,或者实现类接收到的比较器
  • firstKey,返回排序后的第一个key
  • lastKey,返回排序后的最后一个key
  • headMap,返回Map中的key小于参数key的所有键值对,并生成一个Map
  • tailMap,返回Map中key大于等于参数ley的所有键值对,并生成一个Map
  • subMap,查询两个key之间的所有键值对,并生成一个Map

NavigableMap

接口,继承SortedMap接口。正如navigable含义一样,接口定义的方法可以看作是起到了导航的作用。同时,数据操作的维度指向Map里的Entry对象,有多个方法是基于Entry进行操作。

  • ceilingEntry,ceilingKey,返回一个最小的但是大于等于参数key的key或其所属的的entry对象,找不到时返回null
  • firstEntry,lastEntry,返回map排序后的第一个或最后一个Entry对象
  • floorEntry,floorKey,返回比参数key小的但是排序最大的key 或其所属Entry
  • higherEntry,higherKey,返回比参数key大的但是排序里最小的key 或其所属Entry
  • lowerEntry,lowerKey,返回比参数key小的但是排序里最大的key或其所属的Entry
  • pollFirstEntry,pollLastEntry,返回并移除排序后的map里第一个或最后一个entry对象
  • descendingMap,descendingKeySet,返回一个逆序排列的Map或者key集合

TreeMap

继承AbstractMap,实现NavigableMap接口。TreeMap的底层实现是一个由Entry对象作为根节点构成的一颗红黑树。

构建方法创建对象:

  • 无参时,设置比较器为null,但是要求key的类型必须实现Comparable接口,此时TreeMap的默认比较器就是key类型的实现的接口所实现的比较方法。
  • 有参,接收一个指定的比较器方法,此时TreeMap的默认比较器就是此比较器了
public TreeMap() {
    comparator = null;
}

public TreeMap(Comparator<? super K> comparator) {
    this.comparator = comparator;
}

put方法存储数据:

  1. 如果此时根节点还是null,那么本次创建的Entry对象就是根节点,无parent指向
  2. 如果当前根节点非null,则从根节点开始与本次新添加的key进行比较
    1. 若key小于当前节点的key,则根节点切换到它的左节点;
    2. 若key大于当前节点的key,则根节点切换到它的右节点;
    3. 若相等,那么新的value覆盖旧value,添加结束。
  3. 直到最后切换到叶子节点处,创建新的Entry对象, 并设置parent指向,同时parent设置它的左节点或右节点是此entry。
  4. 对红黑树进行平衡操作
  5. 存储的数据个数加1,方法结束。

备注:根据方法的返回结果,为null本次就是新增数据,不为null本次就是覆盖数据。

get方法获取数据:

遍历并比较树的节点,找到比较结果key相等的entry,返回entry的value。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值