Android开发之Java集合类性能分析

  对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List、Set和 Map这三大类的集合,今天就他们的子类在标准情况和多线程下的性能做简单的分析。

  Collection接口主要有两种子类分别为List和Set,区别主要是List保存的对象可以重复,而Set不可以重复,而Map一般为key-value这样的对应关系,比如我们常用的HashMap。

  一、List 主要有ArrayList、LinkedList、Vector和Stack
  有关这些子类的性能,Android开发网从插入、删除、移动等方面按照元素的执行效率做一一分析,通过分析Sun 的Java源码和实际元素操作得出下面结论:
  ArrayList - 他的构造主要从AbstractList实现,主要是判断下初始元素的容量,ArrayList最大的特点就是提供了Add、Get操作,当然可以通过迭代器来遍历,对于元素的存在可以通过contains方法判断。
   LinkedList - 作为一种双向链表结构,对于元素的插入、删除效率比较高,只需要调整节点指向即可,但是对于随机查找而言性能主要看这个链表长度和运气了。 LinkedList也提供了ArrayList的get方法,但是要复杂的多,主要通过next或previous方法遍历得到。
  Vector - 比较简单和ArrayList差不多,主要是内部实现了synchronized关键字,实现了线程安全访问但性能有些降低,同时对于元素的扩充在算法上和ArrayList稍有不同,通过构造的容量增量系数来决定。
  Stack - 作为栈的操作,本次继承于Vector,提供了push,pop和peek方法,peek是不弹出根据数据大小获取最后一个元素对象。

  二、Set 主要有HashSet 和 TreeSet
  HashSet - 该类是从Set接口继承而来,相对于List而言就是说内部添加的元素不能重复,当然从名字的Hash来看就是通过哈希算法来实现防止冲突来获得防止重复 的,整体上从HashMap实现,存放元素方法的也是类似key- value的对应的,通过迭代器遍历,不过HashSet不是线程安全的。
  TreeSet - 这个相对于HashSet而言主要是提供了排序支持,TreeSet是从TreeMap类实现,也是非线程安全的。
  可以看到Set的两个类都和Map有关,下面就一起看下有关映射(Map)相关的使用。

  三、Map 主要有 HashMap 和 TreeMap
  HashMap - 提供了比较强大的功能实现,比如说loadFactor可以控制元素增长时内存分配,HashMap也是非线程安全的。
  TreeMap - 相对于HashMap它的排序可以通过传入包含comparator的属性来控制。

  四、单线程模式下性能测试 ,测试元素100~1000中平均成绩:
  添加  HashMap效率最高,ArrayList最低,其他的效高的还有Stack、HashSet和Vector,较低的有LinkedList和TreeSet和TreeMap
  删除 HashMap效率最高,LinkedList最低,其他的HashSet、TreeMap和TreeSet效率较高,较低的有Vector、ArrayList和Stack
  查找  HashMap效率最高,LinkedList最低,HashXXX和TreeXXX效率都比较高,而基于List类效率耗时是Map或Set的十倍左右。

  五、多线程模式下性能测试 ,测试元素100~1000,线程数10个中平均成绩:
  添加 HashSet效率最高,LinkedList最低,HashXXX和TreeXXX效率都比较高,这里ArrayList效率较低,整体相差不大。
  删除 HashSet效率最高,LinkedList最低,整体性能同添加相似,但HashXXX或TreeXXX性能比List系列高出3倍。
  查找 仍然是HashSet性能最好,LinkedList最低,性能较差的是ArrayList,其他的均表现很好。

转载于:https://www.cnblogs.com/xgjblog/p/4119176.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2019年汽车行业深度投资研究

来源:中泰证券2018年预计我国汽车销售负增长,为30年来首次,批发数据自5月份开始逐步下降,尤其是9月之后,销售增速加速下滑,判断汽车市场弱势的原因和持续时间长短,是思考2019年汽车行业投资策略的前提。我们认为&#…

duilib消息事件产生和分发解释

参考博客:https://www.cnblogs.com/haomiao/p/5055413.html

有没有哪些数学猜想是验证到很大的数以后才发现是错的?

来源:孙天任算数学苑素数的分布密度为 ρ(x)~1/ln(x),从而在 x 以内的素数个数——通常用 π(x) 表示——为: π(x) ~ Li(x) 其中 Li(x) ≡ ∫ 1/ln(x) dx 是对数积分函数 。这个结果有些读者可能也认出来了,它正是著名的素数定理…

JAVA动态代理(JDK和CGLIB)

JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一…

duilib消息机制的介绍

参考:https://www.cnblogs.com/redrainblog/p/4209721.html

徐铁:当深度学习握手脑科学-圣城会议归来

原创:许铁 来源:混沌巡洋舰耶路撒冷号称三教圣地, 而它的牛逼之处绝不仅在于宗教, 如果你深入了解, 你会发现它的科学,尤其是理论创新也同样牛逼, 尤其是在脑科学和人工智能方向。 当然神族…

hdu 1241Oil Deposits(BFS)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid1241 Oil Deposits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 13137 Accepted Submission(s): 7611 Problem DescriptionThe GeoSurvComp…

重磅!联合国权威AI趋势报告,美中日韩四分天下

来源:智东西摘要:AI趋势报告,中美专利申请和科学出版数遥遥领先。近年来,随着AI从理论知识落地到全球市场,AI正以其潜在的革命性影响,持续推动技术和产业的重大变革,从天气预报、自动驾驶、癌症…

模态窗口和非模态窗口

转载自:https://my.oschina.net/u/2425942/blog/882879 模态窗口就是在该窗口关闭之前,其父窗口不可能成为活动窗口的那种窗口。 例如: 窗口A弹出窗口B,如果窗口B是模态的,在窗口B关闭前就不可能切换到窗口A;如果B是非模态的&…

cut命令详解(转)

线上会log回归,计算请求超时率,会用到cut命令,看了一篇不错的文章,转了。。 1 描述一下cut命令 正如其名,cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。 cut是以每一行为一个处理对象的&…

通信产业5G迭代,万亿机遇一触即发

来源:中银国际摘要:进入本世纪一零年代后,全球通信行业首先迎来了4G商用的元年。▌通信产业5G迭代促使中国企业突破进入本世纪一零年代后,全球通信行业首先迎来了4G商用的元年。LTE网络在世界各地开花,“管”领域的性能…

duilib中的添加自定义控件

原理参考博客:https://blog.csdn.net/zhuhongshu/article/details/45362751#commentBox 添加自定义的控件时,让程序识别该控件,要继承IDialogBuilderCallback接口,并实现接口中的CreateControl函数,自定义控件主要是继…

duilib中界面的布局方式

参考博客:https://blog.csdn.net/zhuhongshu/article/details/38531447 常用的布局默认为相对布局,默认floatfalse,该属性为true时,表示绝对布局; 相对布局方式可以依据界面自动调整控件大小。 最常用的VerticalLayout…

『重构--改善既有代码的设计』读书笔记----Split Temporary Variable

继续开始我们重构手法的系列,今天介绍的是Split Temporary Variable---分解临时变量。 在我们平常写的程序中肯定有某些临时变量被赋予了超过一个的责任。如果他们不是那种收集结果(temp temp QString("abc"))或者循环变量&#…

美丽新世界:这七个原因将让未来更美好

来源:资本实验室摘要:技术进步推动人类社会的进步。然而在现实生活中,对技术的恐惧困扰着相当一部分人。暴走的机器人、失控的AI、滥用的人体增强……这些经常出现于各种反乌托邦科幻故事中的场景也被认为是对技术破坏的一种警示。如果能够从…

学习OpenStack之 (4): Linux 磁盘、分区、挂载、逻辑卷管理 (Logical Volume Manager)

0. 背景: inux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个…

写论文文献引用方式

打开百度学术: 如下:

美国DARPA204页可解释人工智能文献综述论文《Explanation in Human-AI Systems》

来源:专知摘要:本文介绍Arxiv上的《Explanation in Human-AI Systems》,一篇关于可解释机器学习的综述,介绍了可解释机器学习的多学科观点、历史研究、模型、关键点等。可解释AI是现在正火热的科研和工程问题。Arxiv上一篇《Expla…

Thinkphp系统常量

预定义常量 常量说明URL_COMMON0普通模式 URLURL_PATHINFO1PATHINFO URLURL_REWRITE2REWRITE URLURL_COMPAT3兼容模式 URLHAS_ONE1HAS_ONE 关联定义BELONGS_TO2BELONGS_TO 关联定义HAS_MANY3HAS_MANY 关联定义MANY_TO_MANY4MANY_TO_MANY 关联定义THINK_VERSION框架版本号这些预…

显卡的显存

首先说明,转载自:百度知道,作者:asdf_12346 网址:https://zhidao.baidu.com/question/216504146.html 千万注意不要只看显存大小了,显存大小只是影响显卡性能的一个很次要的因素而已。不了解的人很容易被商…