`
jackleechina
  • 浏览: 584582 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

java中的arrayList(动态数组)与静态数组

    博客分类:
  • java
 
阅读更多
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等键值对的集合。
分享到:
评论

相关推荐

    java动态数组的应用

    动态数组与静态数组相比最大的特点是其大小可以在运行时改变。在Java中,原始数组是固定长度的,一旦声明后就无法改变其大小。而动态数组则可以通过特定的数据结构或类(如`ArrayList`)来实现。 #### 二、Java动态...

    accp5.0java第八章 数组(改)

    9. **Java集合框架与数组的关系**:虽然数组是基础,但Java集合框架提供了更灵活的数据结构,如ArrayList和LinkedList,它们在某些场景下比数组更具优势。 10. **性能考虑**:数组在内存分配上是静态的,一旦创建,...

    C语言中动态数组操作实践

    与静态数组不同,静态数组在编译时必须指定大小,而动态数组可以在运行时根据实际需求进行扩展或收缩。动态数组主要通过`malloc()`、`calloc()`、`realloc()`和`free()`等函数来实现。下面我们将深入探讨这些函数...

    Java中ArrayList的使用方法以及与vector的对比

    ArrayList 是 Java 中的一种动态数组,它提供了很多有用的特性,例如动态地增加和减少元素,实现了 ICollection 和 IList 接口,灵活的设置数组的大小等。下面我们将详细介绍 ArrayList 的使用方法,以及与 Vector ...

    Java第5章 数组 含源代码

    八、数组与集合框架的关系 虽然数组是Java的基础,但集合框架(如ArrayList、LinkedList等)在实际开发中更为灵活。数组不能动态改变大小,而集合框架的类可以。同时,集合框架提供了丰富的功能,如迭代、查找、排序...

    java中数组列表ArrayList的使用.doc

    ArrayList 是 Java 中的一种动态数组,提供了动态的增加和减少元素的功能,实现了 ICollection 和 IList 接口,灵活地设置数组的大小。下面是 ArrayList 的一些重要的方法和属性: 1. 构造器 ArrayList 提供了三个...

    用动态数组实现的大数阶乘

    动态数组是一种可以在运行时改变其大小的数组,它与静态数组不同,静态数组在声明时就需要指定固定的大小。动态数组通常通过指针和内存管理函数(如C++中的`new`和`delete`,Java中的`ArrayList`)来实现,允许我们...

    *****关于动态数组的创建****

    与静态数组不同,静态数组在声明时就需要指定固定的大小,而动态数组可以在需要时进行扩展或收缩,以适应不断变化的数据需求。下面将详细讨论动态数组的创建、操作及其在编程中的应用。 1. **内存分配与释放** - *...

    Java 实例 - 往数组中添加元素源代码-详细教程.zip

    四、动态数组与ArrayList Java的ArrayList类(位于java.util包中)提供了一种动态增加数组大小的能力,使得在数组满时仍能添加元素。ArrayList底层使用了动态数组实现,可以通过add()方法添加元素。 ```java import...

    java 一维数组的创建与使用

    5. **集合与数组**:Java集合框架(如ArrayList)提供了一种更灵活的方式来存储和操作数据,但与数组相比,它们在内存使用和访问速度上有所不同。 了解了这些基本概念和操作后,开发者就可以有效地利用Java一维数组...

    JavaScript中的索引数组、关联数组和静态数组、动态数组讲解

    在Java等语言中,静态数组和动态数组有明显的区别。例如: ```java // Java中的静态数组 int[] ary1 = {1, 3, 6, 9}; // 数组长度固定为4 // Java中的动态数组(使用ArrayList实现) List<Integer> ary2 = new ...

    accp5.0java第八章 数组

    6. **数组与ArrayList对比**:虽然数组在内存中连续存储,但不支持动态扩容。`ArrayList`是Java集合框架的一部分,它允许动态增加或减少元素数量,提供了更灵活的处理方式,但相比数组,其在访问速度上稍逊一筹。 7...

    Android String字符串数组动态增加

    在某些情况下,我们可能需要在运行时动态地向已存在的字符串数组中添加元素,而非仅仅在XML资源文件中静态定义。这就涉及到了Android String字符串数组的动态增加技术。 Android中的String数组通常在res/values/...

    Java ArrayList 数组之间相互转换

    在Java中,ArrayList与数组之间的转换可以通过以下方法实现: 1. **ArrayList转数组**: 当你需要将ArrayList中的元素保存到数组中时,可以直接使用ArrayList的`toArray()`方法。如示例所示,可以创建一个指定类型...

    聊一聊jdk1.8中的ArrayList 底层数组是如何扩容的

    在 Java 语言中,ArrayList 是一个非常常用的集合类,它的底层实现是一个动态扩容的数组。当我们向 ArrayList 中添加元素时,如果数组的容量不足以容纳所添加的元素,那么 ArrayList 就会扩容以容纳新的元素。在 JDK...

    Java 的常用包与数组的复制与排序25

    在Java编程语言中,"Java的常用包"和"数组的复制与排序"是学习的基础且重要的部分。这里,我们主要探讨的是Java的核心库包以及如何处理数组,特别是复制和排序的操作。 首先,让我们深入了解Java的常用包。Java标准...

    动态数组程序

    在传统的静态数组中,一旦创建,其大小就固定不变。然而,动态数组则允许我们根据需要动态地调整大小。在C++中,这通常通过`new`运算符和指针来实现;在Python中,列表就是一种内置的动态数组;而在Java中,...

    java中数组列表arraylist的使用.docx

    ### Java中数组列表ArrayList的使用详解 #### 一、ArrayList简介 `ArrayList`是Java集合框架中的一个重要组成部分,属于`List`接口的一种实现。它提供了一种动态调整大小的数组,能够有效地解决传统数组大小固定...

    java数组

    Java标准库中的`java.util.Arrays`类提供了一系列静态方法,用于数组的排序、复制、填充等操作。例如,排序一个整数数组: ```java Arrays.sort(numbers); // 对numbers数组进行升序排序 ``` 八、数组的拷贝 `System...

    Java对象的容纳 数组。容器

    在Java编程中,对象的容纳主要分为两种方式:数组和容器。这里我们将详细讨论这两种方式。 **一、数组** 数组是一种基础的存储结构,它允许我们存储相同类型的对象引用。在Java中,数组的创建和使用可以通过以下...

Global site tag (gtag.js) - Google Analytics