当前位置: 首页 > news >正文

Android15之SparseArray、HashMap、Map用法实例(二百三十八)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者

新书发布:《Android系统多媒体进阶实战》🚀
优质专栏: Audio工程师进阶系列原创干货持续更新中……】🚀
优质专栏: 多媒体系统工程师系列原创干货持续更新中……】🚀
优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

🍉🍉🍉文章目录🍉🍉🍉

    • 🌻1.前言
    • 🌻2. SparseArray、HashMap、Map介绍
      • 🐓2.1 SparseArray
      • 🐓2.2 HashMap
      • 🐓2.3 Map
      • 🐓2.4 使用场景对比
    • 🌻3. 代码实例
      • 🐓3.1 Android标准SparseArray获取Key索引值V1.0
      • 🐓3.2 Android标准SparseArray获取Key索引值V2.0

🌻1.前言

本篇目的:Android15之SparseArray、HashMap、Map用法实例

🌻2. SparseArray、HashMap、Map介绍

🐓2.1 SparseArray

适用范围:Android SDK 提供的特定数据结构,通常用于 int 键和任意对象值的映射。
设计初衷:优化内存使用,适用于键值分布稀疏的场景。与 HashMap 相比,它的实现没有使用装箱(boxing)机制,避免了 Integer 对象的自动装箱带来的开销。
性能特点:在 Android 上内存效率高,适用于存储 int -> Object 的映射,不适合高频增删操作。

  • 使用示例
import android.util.SparseArray;SparseArray<String> sparseArray = new SparseArray<>();
sparseArray.put(1, "Value1");
sparseArray.put(2, "Value2");String value = sparseArray.get(1);  // 获取键为1的值
sparseArray.remove(2);  // 移除键为2的项

🐓2.2 HashMap

适用范围:Java 标准库中的数据结构,适用于任意类型键和值的映射。
设计初衷:通用的键值对映射,不局限于特定的键类型,灵活性高。
性能特点:通过哈希表实现,增删查改效率较高,适合键值对数目较多的情况;但由于需要装箱,使用 Integer 类型作为键时会有额外的内存开销。

  • 使用示例
import java.util.HashMap;HashMap<Integer, String> hashMap = new HashMap<>();
hashMap.put(1, "Value1");
hashMap.put(2, "Value2");String value = hashMap.get(1);  // 获取键为1的值
hashMap.remove(2);  // 移除键为2的项

🐓2.3 Map

适用范围:Java 集合框架中的通用接口,定义了键值对存储的基本操作;HashMap、TreeMap、LinkedHashMap 等类都实现了 Map 接口。
设计初衷:提供统一的键值映射接口,便于在不同类型的映射数据结构中切换。
性能特点:Map 本身不是一个具体的数据结构类,性能取决于实现类。常用的实现类有:
HashMap:基于哈希表,适合快速查找。
TreeMap:基于红黑树,键有序。
LinkedHashMap:维护插入顺序,适合用于缓存实现。

  • 使用示例
import java.util.Map;
import java.util.HashMap;Map<Integer, String> map = new HashMap<>();
map.put(1, "Value1");
map.put(2, "Value2");String value = map.get(1);  // 获取键为1的值
map.remove(2);  // 移除键为2的项

🐓2.4 使用场景对比

在这里插入图片描述

🌻3. 代码实例

🐓3.1 Android标准SparseArray获取Key索引值V1.0

public void getKeyIndex() {int MUSIC = 1, NAVIGATION = 2, VOICE_COMMAND = 3, CALL_RING = 200, CALL = 5, ALARM = 6, NOTIFICATION = 7, SYSTEM_SOUND = 8;// 创建音频上下文的整数值列表List<Integer> CONTEXTS = new ArrayList<>(Arrays.asList(MUSIC, NAVIGATION, VOICE_COMMAND, CALL_RING, CALL, ALARM, NOTIFICATION, SYSTEM_SOUND));// 初始化 SparseArray 并添加每个音频上下文的键值对SparseArray<String> CONTEXT_NAMES = new SparseArray<>(CONTEXTS.size());CONTEXT_NAMES.append(MUSIC, "MUSIC");CONTEXT_NAMES.append(NAVIGATION, "NAVIGATION");CONTEXT_NAMES.append(VOICE_COMMAND, "VOICE_COMMAND");CONTEXT_NAMES.append(CALL_RING, "CALL_RING");CONTEXT_NAMES.append(CALL, "CALL");CONTEXT_NAMES.append(ALARM, "ALARM");CONTEXT_NAMES.append(NOTIFICATION, "NOTIFICATION");CONTEXT_NAMES.append(SYSTEM_SOUND, "SYSTEM_SOUND");// 循环遍历 SparseArray 的所有键并获取索引for (int i = 0; i < CONTEXT_NAMES.size(); i++) {int key = CONTEXT_NAMES.keyAt(i);  // 获取当前键int index = CONTEXT_NAMES.indexOfKey(key);  // 获取当前键的索引String name = CONTEXT_NAMES.get(key);  // 获取键对应的值// 打印日志信息Log.e(new Exception().getStackTrace()[0].getFileName(),"xxx----> "+new Exception().getStackTrace()[0].getMethodName()+"() , line = "+new Exception().getStackTrace()[0].getLineNumber()+ " key = " + key+ " index = " + index+ " name = " + name);}}

🐓3.2 Android标准SparseArray获取Key索引值V2.0

public void getKeyIndices() {// 使用 Object[][] 数组来存储整数键和字符串值Object[][] contextData = {{1, "MUSIC"},{2, "NAVIGATION"},{3, "VOICE_COMMAND"},{200, "CALL_RING"},{5, "CALL"},{6, "ALARM"},{7, "NOTIFICATION"},{8, "SYSTEM_SOUND"}};// 初始化 Map 并使用循环将键值对添加到 Map 中Map<Integer, String> audioContextMap = new HashMap<>();for (Object[] entry : contextData) {int key = (int) entry[0];            // 将第一个元素转换为 intString value = (String) entry[1];     // 将第二个元素转换为 StringaudioContextMap.put(key, value);  //将key和Value使用map存放.}// 初始化SparseArray 并使用 Map 中的键值对填充SparseArray<String> CONTEXT_NAMES = new SparseArray<>(audioContextMap.size());for (Map.Entry<Integer, String> entry : audioContextMap.entrySet()) {CONTEXT_NAMES.append(entry.getKey(), entry.getValue());}// 循环遍历 SparseArray 的所有键并获取索引for (int i = 0; i < CONTEXT_NAMES.size(); i++) {int key = CONTEXT_NAMES.keyAt(i);  // 获取当前键int index = CONTEXT_NAMES.indexOfKey(key);  // 获取当前键的索引String name = CONTEXT_NAMES.get(key);  // 获取键对应的值// 打印日志信息Log.e(new Exception().getStackTrace()[0].getFileName(),"xxx------> "+new Exception().getStackTrace()[0].getMethodName()+"() , line = "+new Exception().getStackTrace()[0].getLineNumber()+ " key = " + key+ " index = " + index+ " name = " + name);}}

http://www.mrgr.cn/news/74758.html

相关文章:

  • 使用 前端技术 创建 QR 码生成器 API1
  • C语言教程指针笔记整理(三)
  • 金融科技白皮书:2022-2023年度回顾与前瞻
  • springboot课程答疑系统(代码+数据库+LW)
  • 模型的评估与选择——交叉验证(基于Python实现)
  • 数据结构---队列详解
  • 基于SpringBoot智慧社区管理平台
  • 丹摩征文活动|丹摩智算平台使用指南
  • 新书速览|Python数据科学加速:Dask、Ray、Xorbits、mpi4py
  • 【JAVA毕业设计】基于Vue和SpringBoot的宠物咖啡馆平台
  • 网络基础 - 网段划分篇
  • 2024年,有多少程序员被迫转行?
  • WeakHashMap原理
  • 数据结构PTA
  • 【目标检测】【Ultralytics-YOLO系列】Windows11下YOLOV5人脸目标检测
  • nginx代理后jsp如何获取http协议
  • DNS服务器Mac地址绑定与ip网路管理命令(Ubuntu24.04)
  • Oauth2.0
  • Java复习44(PTA)
  • 2024算法基础公选课练习三(DFS1)(1)
  • 全国交通安全日知识竞赛答题投票活动策划
  • 基于AX650N/AX630C部署多模态大模型InternVL2-1B
  • 华为OD机试真题---数组二叉树
  • C# 反射与动态编程
  • arcgis做buffer
  • LeetCode105.从前序与中序遍历构造二叉树