List 和MAP的区别

本文探讨了在Android应用中,使用List和Map两种数据结构来管理卡片上的倒计时功能。通过对比List和Map的使用方式,展示了如何根据卡片标识初始化并启动倒计时。在List中,通过索引来管理和启动倒计时;而在Map中,通过卡片位置作为key来存储和启动倒计时。当需要根据标识判断是否已存在倒计时,Map提供了更直接的访问方式。
摘要由CSDN通过智能技术生成

List 和MAP的区别

需求:返回的List卡片,某些卡片需要显示倒计时,解决方法:需要显示显示倒计时,则创建相对于的倒计时,当继续执行响应倒计时则不需要重新创建,更具list的标识即可判断

备注:HashMap key和value一一对应倒,key对应的value为null,则创建

    /** 倒计时集合. */
    private var timerList: MutableList<FixCountDownTimer?> = mutableListOf()
    //标记哪些卡片带有倒计时功能
    private var timerPositionList = arrayListOf<Int>()
  	private fun initTime(
        start: Boolean = false,
        tvCountTime: TextView,
        timeInter: Long,
        cardPosition: Int
    ) {
        //未标记有倒计时功能的时候执行
        if (!timerPositionList.contain(cardPosition) ) {
            tvCountTime?.text = spannableStringBuilder(getGlobalContext()) {
                append(getString(R.string.string_count_time))
                append((timeInter).formatToDDHHString())
            }
            //添加指定卡片到标记集合
            timerPositionList.add(cardPosition)
            //添加指定卡片的倒计时到倒计时集合
            timerList.add(object : FixCountDownTimer(timeInter, 1000L) {
                override fun onFinish() {
                    //请求接口,重新小助手
                    viewModel.refresh()
                    cancel()
                }

                override fun onTiack(millisUntilFinished: Long) {
                    tvCountTime?.text = spannableStringBuilder(getGlobalContext()) {
                        append(getString(R.string.string_count_time))
                        append((millisUntilFinished).formatToDDHHString())
                    }
                }
            })
            if (start) {
                //开启指定倒计时
                timerList[timerPositionList.indexOf(cardPosition)]?.setCurrentTime(timeInter)
                timerList[timerPositionList.indexOf(cardPosition)]?.start()
            }
        }

    }
 private var timerMap: HashMap<Int, FixCountDownTimer>? = hashMapOf()
 private fun initTime(
        start: Boolean = false,
        tvCountTime: TextView,
        timeInter: Long,
        cardPosition: Int
    ) {
        //未标记有倒计时功能的时候执行
        if (timerMap?.get(cardPosition) == null) {
            tvCountTime?.text = spannableStringBuilder(getGlobalContext()) {
                append(getString(R.string.string_count_time))
                append((timeInter).formatToDDHHString())
            }
            var fixCountDownTimer = object : FixCountDownTimer(timeInter, 1000L) {
                override fun onFinish() {
                    //请求接口,重新小助手
                    viewModel.refresh()
                    cancel()
                }

                override fun onTick(millisUntilFinished: Long) {
                    tvCountTime?.text = spannableStringBuilder(getGlobalContext()) {
                        append(getString(R.string.string_count_time))
                        append((millisUntilFinished).formatToDDHHString())
                    }
                }
            }
            timerMap?.set(cardPosition, fixCountDownTimer)
            if (start) {
                //开启指定倒计时
                timerMap?.get(cardPosition)?.setCurrentTime(timeInter)
                timerMap?.get(cardPosition)?.start()
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

黄毛火烧雪下

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

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

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

打赏作者

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

抵扣说明:

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

余额充值