对于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

Android开发之Java集合类性能分析相关推荐

  1. Java:集合类性能分析

    1.Java 集合框架图 -集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础. -抽象类:5个抽象类(长虚线表示),对集合接口的部分实现.可扩展为自定义集合类. -实现类:8个实现 ...

  2. android java设计模式,Android开发之Java设计模式基础篇

    今日我们就Android开发中的一些设计模式做一些 根底性的 主宰,本次就Android项 目标架构设计 有关内容做 综合: 1. 静态工厂 步骤 静态工厂 步骤 可以算是工厂 步骤加单例模式的整合在 ...

  3. Android开发之Java基础JVM和ClassLoader以及类加机制面试题

    在面试中被问到Java相关的东西非常多: 首先说下Java内存模型: 主要由: 程序计数器,Java虚拟机栈,本地方法栈=>被线程私有 方法区 堆组成=>被线程共有 Java类加载机制Cl ...

  4. Android开发之Java的IO流读写的十种方法

    直接上代码: package com.xiayiye.honorfirst.io;import java.io.BufferedInputStream; import java.io.Buffered ...

  5. Android开发之Java和Kotlin混合开发互相跳转报错的问题

    老套路报错如下: 关于这个错误我检查了不知道多少遍了,包路径啥的XML配置也都是没问题.我思来想去最后发现是Kotlin环境的问题: 我的项目是个Java版本的项目,然后再Java项目里面新建的Kot ...

  6. Android开发之Java基础面试题抽象类和接口的区别

    抽象类和接口的区别? 三个方面说: 1.成员特点: 抽象类:成员变量,可以是变量也可以是常量成员方法:可以是抽象方法,也可以是非抽象方法构造方法:有构造方法接口:成员变量,只有常量没有构造方法成员方法 ...

  7. Android开发之Java和Calendar日期上一年,上一个月,前一天,前一周的方法

    公司做的项目要求选择日期可以选择上一个月的,很简单,但是涉及到临界日期,例如跨年 直接的问题从2019.1.1往前一个月那就不简单了,于是找到相关方法自己尝试下.理解出了两个往前一年的区别 看下图: ...

  8. android md5加密登录,Android开发之MD5加密

    将字符串进行MD5加密,返回加密后的字符串 public static String encode(String password) { try { StringBuffer sb = new Str ...

  9. android 图库分析,Android开发之ImageSwitcher相册功能实例分析

    本文实例讲述了Android开发之ImageSwitcher相册功能.分享给大家供大家参考,具体如下: 简介: 1.ImageSwitcher是viewSwitcher的子类,所以ImageSwitc ...

最新文章

  1. java冒泡排序,选择排序,插入排序,希尔排序
  2. 数据中心机房的一些空调制冷办法详解!
  3. 学计算机应该了解什么软件,大学计算机软件业生应该学什么.doc
  4. 关于android设备管理器的一些分析
  5. 流程展示 php,js实现动态的流程进度展示条
  6. MySQL学习笔记_5_SQL语言的设计与编写(上)
  7. 浅入浅出深度学习理论实践
  8. 内核解密 | Oracle 18c 数据库安装ORA-12754的两种解决方案
  9. ubuntu 默认防火墙安装、启用、查看状态
  10. 1.2 xss原理分析与剖析(3)
  11. 构造函数和方法的区别
  12. 如何打造基于 markdown 的论文工作流程(一)
  13. vue使用node-sass@4.9.0时,npm intall出错
  14. 为Druid监控配置访问权限(配置访问监控信息的用户与密码)
  15. Open3D 欧式聚类
  16. Windows用户如何安装使用cpolar内网穿透工具
  17. 统计 | 几种特殊随机变量的分布
  18. 关于网易滚动菜单视图的实现
  19. VLC web插件 js接口
  20. Linux使用Android的USB共享网络

热门文章

  1. JS高级——模块化学习笔记
  2. Node 中的开发环境与生产环境 和 使用Morgan打印请求信息
  3. Chapter7-5_Multilingual BERT
  4. LeetCode 278. 第一个错误的版本(二分查找)
  5. 剑指Offer - 面试题53 - I. 在排序数组中查找数字 I(二分查找的变形版本)
  6. python中数据类型转换原理_python的可变与不可变数据类型的原理是什么呢?
  7. python substr函数_Sql SUBSTR函数
  8. .git文件夹_Git幸存者指南
  9. python中的私有化
  10. Python基础(八)--迭代,生成器,装饰器与元类