Jetpack-Lifecycle组件-SafeIterableMap解析

Jetpack-Lifecycle组件-SafeIterableMap解析

概述

在查看Lifecycle组件时,看到有SafeIterableMap的身影,于是就简单分析了一下这个类。

SafeIterableMap是一个数据结构实现类,它具备以下特点:

  • 支持键值存储,API类似于Map 采用链表实现
  • 支持遍历时删除任意数据,而不会抛出 ConcurrentModifiedException
  • 线程不安全

SafeIterableMap核心方法

方法 作用
putIfAbsent() 添加数据
如果指定Key还没有跟Value关联起来,就关联起来 添加到链表中
get() 根据Key获取指定链表节点数据
remove() 移除指定数据
size() 返回数据大小
iterator() 返回迭代器 默认使用升序查找方式
descendingIterator() 返回使用降序查找方式的迭代器
iteratorWithAdditions() 返回一个已添加的迭代器 供外部直接使用
eldest() 返回链表的头部数据
newest() 返回链表的尾部数据
FastSafeIterableMap

FastSafeIterableMap 继承 SafeIterableMap 并增加了如下方法

方法 作用
contains() 判断是否含有当前值
ceil() 返回给定Key的前驱指针数据

使用

SafeIterableMapFastSafeIterableMap使用比较简单,测试用例代码如下:

SafeIterableMap

//SafeIterableMap 单元测试
@Test
fun safeIterableMapTest() {
   
    
    val safeMap = SafeIterableMap<String, String>()
    val keys = arrayOf("A", "B", "C", "D")
    
    //①添加数据
    for (s in keys) {
   
        safeMap.putIfAbsent(s, "value_".plus(s))
    }
    println("safeMap = $safeMap") //safeMap = [A=value_A, B=value_B, C=value_C, D=value_D]
    
    //②移除
    safeMap.remove("A")
    println("after remove : safeMap = $safeMap") //after remove : safeMap = [B=value_B, C=value_C, D=value_D]
    
    //③快速访问 头部数据、尾部数据
    println("safeMap.eldest() = ${
     safeMap.eldest()}") //safeMap.eldest() = B=value_B
    println("safeMap.newest() = ${
     safeMap.newest()}") //safeMap.newest() = D=value_D
    
    //④foreach 遍历
    println("begin forEach")
    safeMap.forEach {
   
        println(it)
    }
    println("complete forEach")
    //begin forEach
    //B=value_B
    //C=value_C
    //D=value_D
    //complete forEach
    
    
    //⑤移除指定数据
    safeMap.forEach {
   
        if (it.key == "C"){
   
            safeMap.remove(it.key)
        }
    }
    println("after foreach remove : safeMap = $safeMap") //after foreach remove : safeMap = [B=value_B, D=value_D]
}

上述测试代码演示了如何使用,注释部分为输出结果,故不再赘述。

FastSafeIterableMap

//FastSafeIterableMap 单元测试
@Test
fun fastSafeIterableMapTest(){
   

    val safeMap = FastSafeIterableMap<String, String>()
    val keys = arrayOf("A", "B", "C", "D")
    
    //①添加数据
    for (s in keys) {
   
        safeMap.putIfAbsent(s, "value_".plus(s))
    }
    println("safeMap = $safeMap") //safeMap = [A=value_A, B=value_B, C=value_C, D=value_D]
    
    //②判断是否含有某项值
    println("contains(B) = ${safeMap.contains("B")}") //contains(B) = true
    println("contains(X) = ${safeMap.contains("X")}") //contains(X) = false
    
    //③获取此项数据的前驱指针
    val c = safeMap.ceil("C")
    print
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值