当前位置: 首页 > news >正文 陕西网站开发公司地址html5 手机网站导航条 news 2025/10/26 3:12:16 陕西网站开发公司地址,html5 手机网站导航条,现在都有什么网站工作室,网站dedecms模板怎么查看修改啊优化数据结构是提高Android应用性能的重要一环。在Android开发中#xff0c;ArrayList、LinkedList和HashMap等常用的数据结构的正确使用对APP性能的提升有着重大的影响。 一、ArrayList ArrayList内部使用的是数组#xff0c;默认大小10#xff0c;当数组长度不足时…优化数据结构是提高Android应用性能的重要一环。在Android开发中ArrayList、LinkedList和HashMap等常用的数据结构的正确使用对APP性能的提升有着重大的影响。 一、ArrayList ArrayList内部使用的是数组默认大小10当数组长度不足时会进行扩容扩容后的长度为原来的1.5倍。扩容实际上是新建一个长度为原数组1.5的新数组然后遍历原数组将数据一一赋值给新数组。 add(position,object) 给指定位置添加元素时会将该元素及其下标后面的元素都往后移动一位 最后将add的元素添加到position位置。 delete(position) 删除指定位置元素删除该元素并将该元素下标后面的元素都往前移动一位。 由于添加和删除指定位置的元素其后面的元素需要移动造成耗时速度慢在尾部添加和删除不需要移动不受影响。 优缺点 读取速度快尾部添加和删除速度快中途添加和删除速度慢。 使用场景 1ArrayList提供了常数时间复杂度的随机访问操作get和set方法因为它内部使用数组来存储元素可以通过索引直接访问元素。 2ArrayList对于在末尾添加或删除元素的操作具有较好的性能时间复杂度为O(1)。当需要在集合的尾部频繁添加和删除元素时可以使用ArrayList。 3ArrayList对于在中间位置插入或删除元素的操作性能较差因为需要移动后续元素来保持顺序。如果需要频繁在集合的中间位置进行插入或删除操作LinkedList更适合。 4在创建ArrayList时如果能够预估元素数量可以通过指定初始容量避免频繁的扩容操作提高性能。 数组特点 存储区间是连续且占用内存严重空间复杂也很大时间复杂为O1。 优点是随机读取效率很高原因数组是连续随机访问性强查找速度快。 缺点插入和删除数据效率低因插入数据这个位置后面的数据在内存中要往后移的且大小固定不易动态扩展。 二、LinkList 双链表结构添加和删除速度快查询需要从头遍历所有节点速度慢。不需要连续内存不会导致内存浪费。 链表特点 区间离散占用内存宽松空间复杂度小时间复杂度O(N)。 优点插入删除速度快内存利用率高没有大小固定扩展灵活。 缺点不能随机查找每次都是从第一个开始遍历查询效率低。 使用场景 1需要频繁在集合的中间位置插入或删除元素 2不需要频繁随机访问元素 3需要高效的插入和删除操作而不关心空间开销LinkedList在插入和删除操作上的性能优于ArrayList但它需要额外的空间来存储链表节点的指针因此在空间开销上相对较高。 三、HashMap 1.7及之前使用 数组链表 1.7之后使用 数组链表红黑树 数组链表 HashMap数组默认长度16加载因子默认0.75f当数组中存储的元素 0.75*数组长度 时需要扩容将数组长度扩容为原来的2倍以保证为2的整数次幂。 HashMap以key-value成对出现一个key对应一个value putkey-value 通过key获取hash值然后跟数组长度取模 key-value存储在数组的下标 然后将key、hash值、value、下一个节点封装成一个节点插到链表的头节点 -- 头插法 getkey 通过key获取hash值然后跟数组长度取模 key-value存储在数组的下标 然后遍历数组下标元素--链表通过判断节点的key值一致返回对应的节点。 扩容 由于扩容后数组长度不一致导致按原数组长度计算的下标失效所以在扩容后需要将原HashMap保存元素遍历按新的数组长度重新计算数组下标存储。该过程耗时故尽量在使用HashMap时评估实际数组的长度在创建HashMap时指定其长度避免出现扩容的情况。 优缺点 数组的特点查询效率高插入删除效率低。 链表的特点查询效率低插入删除效率高。 在HashMap底层使用数组链表红黑树的结构完美的解决了数组和链表的问题使得查询和插入删除的效率都很高。 当数组中存储的元素 0.75*数组长度时需要扩容导致HashMap至少有25%的空间浪费无疑是使用了空间换时间的方式去提高效率。 四、SparseArray Android为了解决HashMap存在的空间浪费问题推出的新数据类型采用双数组的方式HashMap的思想二分查找解决HashMap浪费空间的同时提高了效率。 缺点SparseArray的key只能是int类型 SparseArray采用了延迟删除的机制通过将删除KEY的Value设置DELETED方便之后对该下标的存储进行复用 使用二分查找时间复杂度为O(LogN)如果没有查找到那么取反返回左边界再取反后左边界即为应该插入的数组下标 如果无法直接插入则根据mGarbage标识是否有潜在延迟删除的无效数据进行数据清除再通过System.arraycopy进行数组后移将目标元素插入二分查找左边界对应的下标 mSize小于等于keys.length小于的部分为空数据或者是gc后前移的数据的原数据也是无效数据因此二分查找的右边界以mSize为准 mSize包含了延迟删除后的元素个数如果遇到频繁删除不会触发gc机制导致mSize 远大于有效数组长度,造成性能损耗; mGarbage为true不一定有无效元素因为可能被删除的元素恰好被新添加的元素覆盖 使用场景 key为整型不需要频繁的删除元素个数相对较少。 五、ArrayMap 实现了Map接口并使用int[]数来存储key的hash值数组的索引用作index而使用Object[]数组来存储key-value 这还是比较新颖的 。 使用二分查找查找hash值在key数组中的位置然后根据这个位置得到value数组中对应位置的元素。 和SparseArray类似当数据有几百条时性能会比HashMap低50%因此ArrayMap适用于数据量很小的场景 ArrayMap和HashMap的区别 1ArrayMap的存在是为了解决HashMap占用内存大的问题它内部使用了一个int数组用来存储元素的hashcode使用了一个Object数组用来存储元素两者根据索引对应形成key-value结构这样就不用像HashMap那样需要额外的创建Entry对象来存储减少了内存占用。但是在数据量比较大时ArrayMap的性能就会远低于HashMap因为 ArrayMap基于二分查找算法来查找元素的并且数组的插入操作如果不是末尾的话需要挪动数组元素效率较低。 2而HashMap内部基于数组单向链表红黑树实现也是key-value结构 正如刚才提到的HashMap每put一个元素都需要创建一个Entry来存放元素导致它的内存占用会比较大但是在大数据量的时候因为HashMap中当出现冲突时冲突的数据量大于8就会从单向链表转换成红黑树而红黑树的插入、删除、查找的时间复杂度为O(logn),相对于ArrayMap的数组而言在插入和删除操作上要快不少所以数据量上百的情况下使用HashMap会有更高的效率。 如何解决冲突问题 在ArrayMap中假设存在冲突的话并不会像HashMap那样使用单向链表或红黑树来保留这些冲突的元素而是全部key、value都存储到一个数组当中然后查找的话通过二分查找进行这也就是当数据量大时不宜用ArrayMap的原因了。 文章转载自: http://www.morning.wtnwf.cn.gov.cn.wtnwf.cn http://www.morning.wnjbn.cn.gov.cn.wnjbn.cn http://www.morning.ffdyy.cn.gov.cn.ffdyy.cn http://www.morning.pngph.cn.gov.cn.pngph.cn http://www.morning.lkpzx.cn.gov.cn.lkpzx.cn http://www.morning.snmth.cn.gov.cn.snmth.cn http://www.morning.hqbnx.cn.gov.cn.hqbnx.cn http://www.morning.ssjry.cn.gov.cn.ssjry.cn http://www.morning.jxhlx.cn.gov.cn.jxhlx.cn http://www.morning.ryfpx.cn.gov.cn.ryfpx.cn http://www.morning.mkhwx.cn.gov.cn.mkhwx.cn http://www.morning.xhgxd.cn.gov.cn.xhgxd.cn http://www.morning.horihe.com.gov.cn.horihe.com http://www.morning.lmjkn.cn.gov.cn.lmjkn.cn http://www.morning.khxyx.cn.gov.cn.khxyx.cn http://www.morning.tqqfj.cn.gov.cn.tqqfj.cn http://www.morning.qhjkz.cn.gov.cn.qhjkz.cn http://www.morning.lxfdh.cn.gov.cn.lxfdh.cn http://www.morning.dgpxp.cn.gov.cn.dgpxp.cn http://www.morning.jqjnl.cn.gov.cn.jqjnl.cn http://www.morning.drcnn.cn.gov.cn.drcnn.cn http://www.morning.dnzyx.cn.gov.cn.dnzyx.cn http://www.morning.rbgwj.cn.gov.cn.rbgwj.cn http://www.morning.jcbmm.cn.gov.cn.jcbmm.cn http://www.morning.csznh.cn.gov.cn.csznh.cn http://www.morning.pfnwt.cn.gov.cn.pfnwt.cn http://www.morning.tckxl.cn.gov.cn.tckxl.cn http://www.morning.rfycj.cn.gov.cn.rfycj.cn http://www.morning.fyxtn.cn.gov.cn.fyxtn.cn http://www.morning.rtlrz.cn.gov.cn.rtlrz.cn http://www.morning.tlpgp.cn.gov.cn.tlpgp.cn http://www.morning.jpydf.cn.gov.cn.jpydf.cn http://www.morning.knscf.cn.gov.cn.knscf.cn http://www.morning.bndkf.cn.gov.cn.bndkf.cn http://www.morning.nccyc.cn.gov.cn.nccyc.cn http://www.morning.hengqilan.cn.gov.cn.hengqilan.cn http://www.morning.xgmf.cn.gov.cn.xgmf.cn http://www.morning.yrgb.cn.gov.cn.yrgb.cn http://www.morning.wbfly.cn.gov.cn.wbfly.cn http://www.morning.rknjx.cn.gov.cn.rknjx.cn http://www.morning.qzpqp.cn.gov.cn.qzpqp.cn http://www.morning.wkqrp.cn.gov.cn.wkqrp.cn http://www.morning.rsjng.cn.gov.cn.rsjng.cn http://www.morning.ydyjf.cn.gov.cn.ydyjf.cn http://www.morning.wcjk.cn.gov.cn.wcjk.cn http://www.morning.fwlch.cn.gov.cn.fwlch.cn http://www.morning.ynbyk.cn.gov.cn.ynbyk.cn http://www.morning.dbrnl.cn.gov.cn.dbrnl.cn http://www.morning.nrjr.cn.gov.cn.nrjr.cn http://www.morning.qiyelm.com.gov.cn.qiyelm.com http://www.morning.pphgl.cn.gov.cn.pphgl.cn http://www.morning.cfmrb.cn.gov.cn.cfmrb.cn http://www.morning.pzlcd.cn.gov.cn.pzlcd.cn http://www.morning.qxwgx.cn.gov.cn.qxwgx.cn http://www.morning.fjgwg.cn.gov.cn.fjgwg.cn http://www.morning.srbfp.cn.gov.cn.srbfp.cn http://www.morning.ltffk.cn.gov.cn.ltffk.cn http://www.morning.hjjkz.cn.gov.cn.hjjkz.cn http://www.morning.jbxfm.cn.gov.cn.jbxfm.cn http://www.morning.cpljq.cn.gov.cn.cpljq.cn http://www.morning.qnpyz.cn.gov.cn.qnpyz.cn http://www.morning.kpgbz.cn.gov.cn.kpgbz.cn http://www.morning.khlxd.cn.gov.cn.khlxd.cn http://www.morning.flchj.cn.gov.cn.flchj.cn http://www.morning.rltsx.cn.gov.cn.rltsx.cn http://www.morning.rkypb.cn.gov.cn.rkypb.cn http://www.morning.srmpc.cn.gov.cn.srmpc.cn http://www.morning.jpwkn.cn.gov.cn.jpwkn.cn http://www.morning.bfcrp.cn.gov.cn.bfcrp.cn http://www.morning.sfgtp.cn.gov.cn.sfgtp.cn http://www.morning.bmtyn.cn.gov.cn.bmtyn.cn http://www.morning.qqxmj.cn.gov.cn.qqxmj.cn http://www.morning.dtzxf.cn.gov.cn.dtzxf.cn http://www.morning.rbgqn.cn.gov.cn.rbgqn.cn http://www.morning.skscy.cn.gov.cn.skscy.cn http://www.morning.kbkcl.cn.gov.cn.kbkcl.cn http://www.morning.wylpy.cn.gov.cn.wylpy.cn http://www.morning.lgcqj.cn.gov.cn.lgcqj.cn http://www.morning.sxfnf.cn.gov.cn.sxfnf.cn http://www.morning.qpnmd.cn.gov.cn.qpnmd.cn 查看全文 http://www.tj-hxxt.cn/news/249896.html 相关文章: 看网站的关键词茂名建设企业网站 一键做网站的软件网站根目录多文件 如何推销网站建设国内十大网站建设公司 厦门网站建设 软件园wordpress设置主页 做公司子网站的请示报告建设工程管理有限公司 大连哪里做网站dedecms 图片网站 北海涠洲岛旅游网站建设分析渭南网站建设与维护 沈阳企业定制网站建设建设银行江苏省行网站 邢台做移动网站公司电话网站建设需要考虑因素 仿第四城地方门户网站模板WordPress支持多少文章 有名设计网站手机移动开发网站建设 天津网站推广网站开发报告 用什么做网站方便html基本结构框架代码 教做游戏的网站建设国家标准官方网站 海外域名注册网站用地方名字做网站 建设自己网站的流程图移动端网站建设 新闻动态 吉林门户网站建设c++编程软件 现在流行做网站吗适合发表个人文章的平台 中国建设职业注册中心网站西安三网合一网站建设 搞一个公司网站得多少钱wordpress 钩子大全 网站怎么连接微信支付知名的集团门户网站建设费用 教育海报设计素材网站宜昌网站优化 网站发多少篇文章开始做外链论文中网站数据则呢做文献参考 企业网站免费建站程序天津网站设计建设 电商网站如何做精细化运营网站建设信息科技 建设通网站查询单位域名如何注册? 做家具的网站免费个人网站模板 做ps可以在哪些网站上找素材虹口网站建设 深圳福田网站设计搜索引擎营销的方式 网站主机设置方法做网站公司昆山