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,其他的均表现很好。

时间: 2024-11-07 10:28:05

Android开发之Java集合类性能分析的相关文章

零基础学Android开发之Java语言学习01-什么是java

一.什么是Java? Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称.由James Gosling和同事们共同研发,并在1995年正式推出. Java分为三个体系: JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版) JavaEE(J2EE)(Java 2 Platform,Enterprise Edition,java平台企业版) JavaME(J2ME)(Jav

Android开发之Java必备基础

Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先声明. 这种机制和非静态类型的语言有很大差别,非静态语言不要求对变量进行声明.虽然显式类型声明看起来较繁琐,但其有助于编译器对很多编程错误的预防,例如,由于变量名拼写错误导致创建了没有用的变量,调用了不存在的方法等.显式声明可以彻底防止这些错误被生成到运行代码中.关于Java类型系统的详细说明可以在Java语言规范(Java Langu

Android开发之JAVA基础__开发环境搭建

一.开发环境搭建 由于ANDROID的应用程序是使用JAVA语言编写的,所以,开发ANDROID的应用程序时,需要计算机具备开发.运行JAVA应用程序的条件.JAVA语言开发的应用程序需要:JDK(Java Development Kit),通常,JDK包含JRE(Java Runtime Envrioment).JDK是JAVA开发工具包,如果需要开发JAVA语言的程序,则计算机上必须安装和配置JDK.JRE就JAVA运行时系统,它是运行JAVA语言开发的程序的支撑.JDK是免费软件,可以直接

android开发之java.lang.verifyError(转载)

原文链接: http://www.linuxidc.com/Linux/2012-08/67289.htm 解决方案: 最近在做一个Android开发小项目的时候,遇到java.lang.verifyerror错误 并且这个错误让我困惑了2天,无论我怎么修改代码,错误依然提示如此,后来到网上查了一下是我导入jar包的时候 文件虽然倒进去了,但是导入文件一些地方却没有正确: 步骤1:正确导包如下图: 步骤2:当我们导包的时候一般都会点击Add JARS那个选项,这是我们要注意,接下来我们应该做下面

零基础学Android开发之Java语言学习02-基本语法

第一个Java程序 下面看一个简单的Java程序,它将打印字符串 Hello World //com.henancaiyun 包,主要用来解决同名问题.每一个类都要指定在一个包下面.package com.henancaiyun; //导入ClassAimport com.henancaiyun.ClassA; //HelloWord类public class HelloWord {  //Main静态函数 public static void main(String[] args ) {  /

零基础学Android开发之Java语言学习02-JAVA开发平台搭建

window系统安装java 下载JDK 首先我们需要下载java开发工具包JDK,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html,点击如下下载按钮: 在下载页面中你需要选择接受许可,并根据自己的系统选择对应的版本(每个人的操作系统是不一样的),本文以 Window 64位系统为例: 下载后JDK的安装根据提示进行,还有安装JDK的时候也会安装JRE,一并安装就可以了. 安装JDK,安装过程中可以自定

Android开发之SQLite优化

本文原地址为:http://blog.csdn.net/horkychen/article/details/18892223 关于SQLite的优化,首先是能用SQL语句批次处理的,就不要单笔操作,Cursor就更是能不用就不用.比如成批的DELETE/UPDATE,将条件组装到SQL语句,会比使用CURSOR一条条的查再删效率要高很多(若干年前就曾使用存储过程代替单笔操作,将一次批量计算时间从一天缩到了数分钟以内,参考).其次是对操作的优化:对于INSERT/UPDATE操作较多时使用事务,如

Android开发之InstanceState详解

Android开发之InstanceState详解 本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceState(),并且在介绍这两个方法之后,再分别来实现使用InstanceState保存和恢复数据功能.Android实现屏幕旋转异步下载效果这样两个示例. 首先来介绍onSaveInstanceState() 和 onRestoreInstanceState() .关于这两个方法,一些朋友可能在Andr

Android开发之TextView高级应用

我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此.下面就和大家分享一下TextView的一些使用技巧. Android中设置文本样式的几种方法: 1.将android:autoLink属性值设为true.系统会自动识别E-mail.电话.网址等特殊文本. 2.使用Html标签,例如,<font>.<img>等.不要设置 android:autoLink 属性. 3.在Java代码中直接使用Span对象来设置文本样式.这种方法需要将文本