专栏名称: 鸿洋
你好,欢迎关注鸿洋的公众号,每天为您推送高质量文章,让你每天都能涨知识。点击历史消息,查看所有已推送的文章,喜欢可以置顶本公众号。此外,本公众号支持投稿,如果你有原创的文章,希望通过本公众号发布,欢迎投稿。
目录
相关文章推荐
郭霖  ·  Android Resource资源管理 ·  2 天前  
郭霖  ·  一文了解 Gradle 插件 ·  5 天前  
今天看啥  ›  专栏  ›  鸿洋

Google 为何设计了如此难用的 ArrayMap

鸿洋  · 公众号  · android  · 2024-09-20 08:35
    

主要观点总结

本文主要介绍了ArrayMap的设计理念和实现历程,分析了其初衷、缺陷以及如何正确使用。文章还对比了ArrayMap和HashMap的优缺点,探讨了ArrayMap的线程安全问题,并给出了使用建议。最后,文章对ArrayMap进行了总结,并推荐了一些相关阅读。

关键观点总结

关键观点1: ArrayMap的初衷和优点

ArrayMap是为了解决内存受限环境下小数据集操作的高性能需求而设计的。通过减少内存分配次数、降低垃圾回收压力,提供了更紧凑的数据结构,具有减少内存占用和提高读写效率的优点。

关键观点2: ArrayMap的缺陷及线程安全问题

ArrayMap存在线程不安全的缺陷,并发场景下可能导致数据异常和app崩溃。其线程超级不安全的问题主要体现在缓存池的使用上,当其他线程进行写操作时,可能会污染缓存池数据,导致类型异常。

关键观点3: ArrayMap的使用建议

为了保证线程安全,应尽量避免在子线程中使用ArrayMap。在使用时,应保证只在主线程中使用ArrayMap及其子类。

关键观点4: 对比HashMap和ArrayMap的优缺点

在内存受限的环境下,对于小数据集操作,ArrayMap相比HashMap更节省内存。但是,ArrayMap存在线程不安全的缺陷,使用时需要更加小心。因此,普通业务场景下,可以考虑使用HashMap。

关键观点5: 总结与展望

文章总结了ArrayMap的设计理念和实现历程,分析了其优缺点和线程安全问题,并给出了一些使用建议。同时,文章也提到了关于ArrayMap缓存池设计的争议和解决方案。最后,文章推荐了一些相关阅读。


文章预览

本文作者 作者: 却把清梅嗅 链接: https://juejin.cn/post/7405842860035424266 本文由作者授权发布。 1 概述 天下苦 ArrayMap 久矣。 这并非 哗众取宠,如果有幸翻阅了 Glide 的代码仓库,你会在 issues 中发现在一堆奇怪的  ClassCastException : 难以置信,一个 2018 年的问题,历经 6 年Glide 官方仍然未解决。最近笔者线上发现了类似的崩溃,经过排查,崩溃原因竟然和业务代码或 Glide本身 毫无关系——其根本原因,是源自 Google 官方的 ArrayMap 的设计缺陷,并且从 Android 8.0 保留至今仍未修复。 本文针对 ArrayMap 的设计理念和实现历程进行一个简单的回顾,最终回答以下几个问题: ArrayMap 初衷是为了解决什么问题? ArrayMap 的设计缺陷是什么,如何正确使用? ArrayMap 和 HashMap 的对比,如何取舍? 2 设计与实现 ArrayMap 是官方提供的一种  键值对集合  ,我们知道, ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览