- 浏览: 587489 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (423)
- windows2003 (1)
- exception (3)
- java (91)
- eclipse (14)
- java web (3)
- javaScript (11)
- 装机 (1)
- sql (34)
- outlook (1)
- html (8)
- JAVA 不同区域服务器引起的乱码解决 (2)
- strtus (3)
- http (1)
- 设计模式 (4)
- Java对存储过程的调用方法 (0)
- java-数据库操作 (0)
- jdbc (7)
- dwr (2)
- 软件版本号 (1)
- jxls (1)
- ExtJS (3)
- Ajax (1)
- git (12)
- linux (20)
- mysql (14)
- maven (16)
- easyui (1)
- 日常备注 (1)
- spring (9)
- others (1)
- windows快捷键 (1)
- 工作备注 (9)
- 工作杂项 (0)
- photoshop (1)
- 开发环境配置 (0)
- jboss (1)
- 报表 (1)
- 图表 (1)
- fckeditor (1)
- 调试bug (2)
- 口令 (1)
- css (2)
- mongodb (7)
- restful (1)
- jsp (5)
- jpa (2)
- bug (1)
- js (2)
- Json (1)
- POI (1)
- xml (2)
- webstorm (1)
- java swing (1)
- ubuntu (3)
- mongo (27)
- 自我学习 (0)
- 草稿 (0)
- 单元测试 (1)
- 数据库 (2)
- ide (1)
- 大数据 (0)
- uml (1)
- spring-boot (1)
- mybatis (3)
- oracle (2)
- jetty (1)
- 学习 (0)
- 系统调优 (1)
- tomcat (2)
- kettle (1)
- 学习资源 (1)
- 架构 (2)
- database (4)
- idea (1)
- consul (1)
- hadoop (2)
- nginx (3)
- 认证 (1)
- 加密 (1)
- connection pool (1)
- loadrunner (1)
- tps (1)
- 翻墙工具 (1)
- redis (2)
- redis jedis shardjedis (1)
- spring boot (1)
- 认证授权 (1)
- ssh (1)
- svn (2)
- 多线程 (1)
最新评论
-
abcdeudi:
不错
接口和抽象类什么时候使用才合适? -
羽翼的心动:
POI中对Word处理,读取不到书签。如果要处理书签的话,就只 ...
POI根据模板(excel表头)导出excel -
pdf1192012:
高质量文章
接口和抽象类什么时候使用才合适? -
沐忆潼:
...
POI根据模板(excel表头)导出excel -
422937561:
高质量文章
接口和抽象类什么时候使用才合适?
http://www.2cto.com/kf/201206/137422.html
3)数组扩容
这是对ArrayList效率影响比较大的一个因素。
每当执行Add、AddRange、Insert、InsertRange等添加元素的方法,都会检查内部数组的容量是否不够了,如果是,它就会以当前容量的两倍来重新构建一个数组,将旧元素Copy到新数组中,然后丢弃旧数组,在这个临界点的扩容操作,应该来说是比较影响效率的。
例1:比如,一个可能有200个元素的数据动态添加到一个以默认16个元素大小创建的ArrayList中,将会经过:
16*2*2*2*2 = 256
四次的扩容才会满足最终的要求,那么如果一开始就以:
ArrayList List = new ArrayList( 210 );
的方式创建ArrayList,不仅会减少4次数组创建和Copy的操作,还会减少内存使用。
例2:预计有30个元素而创建了一个ArrayList:
ArrayList List = new ArrayList(30);
在执行过程中,加入了31个元素,那么数组会扩充到60个元素的大小,而这时候不会有新的元素再增加进来,而且有没有调用TrimSize方法,那么就有1次扩容的操作,并且浪费了29个元素大小的空间。如果这时候,用:
ArrayList List = new ArrayList(40);
那么一切都解决了。
所以说,正确的预估可能的元素,并且在适当的时候调用TrimSize方法是提高ArrayList使用效率的重要途径。
4)频繁的调用IndexOf、Contains等方法(Sort、BinarySearch等方
法经过优化,不在此列)引起的效率损失
首先,我们要明确一点,ArrayList是动态数组,它不包括通过Key或者Value快速访问的算法,所以实际上调用IndexOf、Contains等方法是执行的简单的循环来查找元素,所以频繁的调用此类方法并不比你自己写循环并且稍作优化来的快,如果有这方面的要求,建议使用Hashtable或SortedList等键值对的集合。
3)数组扩容
这是对ArrayList效率影响比较大的一个因素。
每当执行Add、AddRange、Insert、InsertRange等添加元素的方法,都会检查内部数组的容量是否不够了,如果是,它就会以当前容量的两倍来重新构建一个数组,将旧元素Copy到新数组中,然后丢弃旧数组,在这个临界点的扩容操作,应该来说是比较影响效率的。
例1:比如,一个可能有200个元素的数据动态添加到一个以默认16个元素大小创建的ArrayList中,将会经过:
16*2*2*2*2 = 256
四次的扩容才会满足最终的要求,那么如果一开始就以:
ArrayList List = new ArrayList( 210 );
的方式创建ArrayList,不仅会减少4次数组创建和Copy的操作,还会减少内存使用。
例2:预计有30个元素而创建了一个ArrayList:
ArrayList List = new ArrayList(30);
在执行过程中,加入了31个元素,那么数组会扩充到60个元素的大小,而这时候不会有新的元素再增加进来,而且有没有调用TrimSize方法,那么就有1次扩容的操作,并且浪费了29个元素大小的空间。如果这时候,用:
ArrayList List = new ArrayList(40);
那么一切都解决了。
所以说,正确的预估可能的元素,并且在适当的时候调用TrimSize方法是提高ArrayList使用效率的重要途径。
4)频繁的调用IndexOf、Contains等方法(Sort、BinarySearch等方
法经过优化,不在此列)引起的效率损失
首先,我们要明确一点,ArrayList是动态数组,它不包括通过Key或者Value快速访问的算法,所以实际上调用IndexOf、Contains等方法是执行的简单的循环来查找元素,所以频繁的调用此类方法并不比你自己写循环并且稍作优化来的快,如果有这方面的要求,建议使用Hashtable或SortedList等键值对的集合。
发表评论
-
文件上传
2017-02-05 09:47 413文件上传模块 -
@ModelAttribute注解的使用
2017-01-09 23:13 542https://my.oschina.net/u/176085 ... -
数组合并和判断数组包含某个元素
2017-01-09 23:10 540http://www.iteye.com/news/28296 ... -
项目创建流程
2017-01-09 23:06 405http://lion.newtouch.com/pages/ ... -
mysql 出现很多连接 sleep 问题
2017-01-09 23:00 715http://blog.csdn.net/lin_credib ... -
spring boot 学习
2016-11-28 17:05 385http://412887952-qq-com.iteye.c ... -
jxls excel上传数据
2016-11-22 15:27 557http://jxls.sourceforge.net/ref ... -
veloctiyengine gettemplate jsonobject.fromobject
2016-11-18 10:41 0/** 53. * test User 54. ... -
HDFS客户端的权限错误:Permission denied
2016-08-09 01:55 632http://www.linuxidc.com/Linux/2 ... -
java map中的key为object
2016-08-08 11:18 532http://zhidao.baidu.com/link?ur ... -
jdbc pool
2016-07-26 14:50 411[url]C:\Users\lwx328240\Desktop ... -
java 域是指什么
2016-07-15 15:36 542http://blog.csdn.net/iaiti/arti ... -
java jdbc/ojdbc 链接oracle的三种方式
2016-07-12 14:50 584http://blog.itpub.net/22664653/ ... -
java 编译器 解释器
2016-06-28 14:45 7180) javac 编译器 用于将java源代码文件编译成字节码 ... -
linux查看cpu、内存、版本信息
2016-06-24 21:44 544http://blog.chinaunix.net/uid-2 ... -
重定向控制台System.out.println输出到文件,再重定向回控制台
2016-06-24 20:18 514http://blog.csdn.net/jason_deng ... -
java 代码点 代码单元
2016-06-24 09:38 728http://blog.csdn.net/weizhaozhe ... -
java 日期
2016-06-24 09:39 352http://kingquake21.iteye.com/bl ... -
jdbc addBatch
2016-06-23 22:08 407http://www.360sdn.com/java/2014 ... -
你真的会用Gson吗?Gson使用指南
2016-06-20 16:26 0http://www.jianshu.com/p/e74019 ...
相关推荐
动态数组与静态数组相比最大的特点是其大小可以在运行时改变。在Java中,原始数组是固定长度的,一旦声明后就无法改变其大小。而动态数组则可以通过特定的数据结构或类(如`ArrayList`)来实现。 #### 二、Java动态...
9. **Java集合框架与数组的关系**:虽然数组是基础,但Java集合框架提供了更灵活的数据结构,如ArrayList和LinkedList,它们在某些场景下比数组更具优势。 10. **性能考虑**:数组在内存分配上是静态的,一旦创建,...
与静态数组不同,静态数组在编译时必须指定大小,而动态数组可以在运行时根据实际需求进行扩展或收缩。动态数组主要通过`malloc()`、`calloc()`、`realloc()`和`free()`等函数来实现。下面我们将深入探讨这些函数...
ArrayList 是 Java 中的一种动态数组,它提供了很多有用的特性,例如动态地增加和减少元素,实现了 ICollection 和 IList 接口,灵活的设置数组的大小等。下面我们将详细介绍 ArrayList 的使用方法,以及与 Vector ...
八、数组与集合框架的关系 虽然数组是Java的基础,但集合框架(如ArrayList、LinkedList等)在实际开发中更为灵活。数组不能动态改变大小,而集合框架的类可以。同时,集合框架提供了丰富的功能,如迭代、查找、排序...
ArrayList 是 Java 中的一种动态数组,提供了动态的增加和减少元素的功能,实现了 ICollection 和 IList 接口,灵活地设置数组的大小。下面是 ArrayList 的一些重要的方法和属性: 1. 构造器 ArrayList 提供了三个...
动态数组是一种可以在运行时改变其大小的数组,它与静态数组不同,静态数组在声明时就需要指定固定的大小。动态数组通常通过指针和内存管理函数(如C++中的`new`和`delete`,Java中的`ArrayList`)来实现,允许我们...
与静态数组不同,静态数组在声明时就需要指定固定的大小,而动态数组可以在需要时进行扩展或收缩,以适应不断变化的数据需求。下面将详细讨论动态数组的创建、操作及其在编程中的应用。 1. **内存分配与释放** - *...
四、动态数组与ArrayList Java的ArrayList类(位于java.util包中)提供了一种动态增加数组大小的能力,使得在数组满时仍能添加元素。ArrayList底层使用了动态数组实现,可以通过add()方法添加元素。 ```java import...
5. **集合与数组**:Java集合框架(如ArrayList)提供了一种更灵活的方式来存储和操作数据,但与数组相比,它们在内存使用和访问速度上有所不同。 了解了这些基本概念和操作后,开发者就可以有效地利用Java一维数组...
在Java等语言中,静态数组和动态数组有明显的区别。例如: ```java // Java中的静态数组 int[] ary1 = {1, 3, 6, 9}; // 数组长度固定为4 // Java中的动态数组(使用ArrayList实现) List<Integer> ary2 = new ...
6. **数组与ArrayList对比**:虽然数组在内存中连续存储,但不支持动态扩容。`ArrayList`是Java集合框架的一部分,它允许动态增加或减少元素数量,提供了更灵活的处理方式,但相比数组,其在访问速度上稍逊一筹。 7...
在某些情况下,我们可能需要在运行时动态地向已存在的字符串数组中添加元素,而非仅仅在XML资源文件中静态定义。这就涉及到了Android String字符串数组的动态增加技术。 Android中的String数组通常在res/values/...
在Java中,ArrayList与数组之间的转换可以通过以下方法实现: 1. **ArrayList转数组**: 当你需要将ArrayList中的元素保存到数组中时,可以直接使用ArrayList的`toArray()`方法。如示例所示,可以创建一个指定类型...
在 Java 语言中,ArrayList 是一个非常常用的集合类,它的底层实现是一个动态扩容的数组。当我们向 ArrayList 中添加元素时,如果数组的容量不足以容纳所添加的元素,那么 ArrayList 就会扩容以容纳新的元素。在 JDK...
在Java编程语言中,"Java的常用包"和"数组的复制与排序"是学习的基础且重要的部分。这里,我们主要探讨的是Java的核心库包以及如何处理数组,特别是复制和排序的操作。 首先,让我们深入了解Java的常用包。Java标准...
在传统的静态数组中,一旦创建,其大小就固定不变。然而,动态数组则允许我们根据需要动态地调整大小。在C++中,这通常通过`new`运算符和指针来实现;在Python中,列表就是一种内置的动态数组;而在Java中,...
### Java中数组列表ArrayList的使用详解 #### 一、ArrayList简介 `ArrayList`是Java集合框架中的一个重要组成部分,属于`List`接口的一种实现。它提供了一种动态调整大小的数组,能够有效地解决传统数组大小固定...
Java标准库中的`java.util.Arrays`类提供了一系列静态方法,用于数组的排序、复制、填充等操作。例如,排序一个整数数组: ```java Arrays.sort(numbers); // 对numbers数组进行升序排序 ``` 八、数组的拷贝 `System...
在Java编程中,对象的容纳主要分为两种方式:数组和容器。这里我们将详细讨论这两种方式。 **一、数组** 数组是一种基础的存储结构,它允许我们存储相同类型的对象引用。在Java中,数组的创建和使用可以通过以下...