精华内容
下载资源
问答
  • Array与ArrayList

    2019-12-09 14:26:00
    ArrayList的特点: ArrayList自己实现了序列化和反序列化的方法,因为它自己实现了private void writeObject(java.io.ObjectOutputStream s)和 private void readObject(java.io.ObjectInputStream s) 方法 ...

    目录

    ArrayList的特点:

    • ArrayList自己实现了序列化和反序列化的方法,因为它自己实现了 private void writeObject(java.io.ObjectOutputStream s)和 private void readObject(java.io.ObjectInputStream s) 方法
    • ArrayList基于数组方式实现,无容量的限制(会扩容)
    • 添加元素时可能要扩容(所以最好预判一下),删除元素时不会减少容量(若希望减少容量,trimToSize()),删除元素时,将删除掉的位置元素置为null,下次gc就会回收这些元素所占的内存空间。
    • 线程不安全
    • add(int index, E element):添加元素到数组中指定位置的时候,需要将该位置及其后边所有的元素都整块向后复制一位
    • get(int index):获取指定位置上的元素时,可以通过索引直接获取(O(1))
    • remove(Object o)需要遍历数组
    • remove(int index)不需要遍历数组,只需判断index是否符合条件即可,效率比remove(Object o)高
    • contains(E)需要遍历数组
    • 使用iterator遍历可能会引发多线程异常

    1 简介

    ArrayList结构

    public class ArrayList<E> extends AbstractList<E>
            implements List<E>, RandomAccess, Cloneable, java.io.Serializable
    

    1、AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。

    2、ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。

    3、ArrayList 实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在ArrayList中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。

    4、ArrayList 实现了Cloneable接口,即覆盖了函数clone(),能被克隆。

    5、ArrayList 实现java.io.Serializable接口,这意味着ArrayList支持序列化,能通过序列化去传输

    注意:

    和Vector不同,ArrayList中的操作不是线程安全的!所以,建议在单线程中才使用ArrayList,而在多线程中可以选择Vector或者CopyOnWriteArrayList,或者使用Collections工具类的synchronizedList方法将其包装

    源码分析

    属性:

       //序列化id
        private static final long serialVersionUID = 8683452581122892189L;
        //默认初始容量
        private static final int DEFAULT_CAPACITY = 10;
        //一个空数组,当用户指定ArrayList容量为0时,返回该数组
        private static final Object[] EMPTY_ELEMENTDATA = {};
        /**
         * 一个空数组实例,当用户没有指定 ArrayList 的容量时(即调用无参构造函数),返回的是该数组
         * - 当用户第一次添加元素时,该数组将会扩容,变成默认容量为 10(DEFAULT_CAPACITY) 的一个数组
         * 它与 EMPTY_ELEMENTDATA 的区别就是:该数组是默认返回的,而后者是在用户指定容量为 0 时返回
         */
        private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
        //当前数据对象存放地方,当前对象不参与序列化
        //这个关键字最主要的作用就是当序列化时,被transient修饰的内容将不会被序列化
        transient Object[] elementData; // non-private to simplify nested class access
        //ArrayList实际存储的数据数量
        private int size;
    

    构造方法:

        /**
         * 创建一个初始容量的、空的ArrayList
         */
        public ArrayList(int initialCapacity) {
            if (initialCapacity > 0) {
                this.elementData = new Object[initialCapacity];
            } else if (initialCapacity == 0) {
                this.elementData = EMPTY_ELEMENTDATA;
            } else {
                throw new IllegalArgumentException("Illegal Capacity: "+
                        initialCapacity);
            }
        }
    
        /**
         * 无参构造函数:
         * - 创建一个 空的 ArrayList,此时其内数组缓冲区 elementData = {}, 长度为 0
         * - 当元素第一次被加入时,扩容至默认容量 10
         */
        public ArrayList() {
            this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
        }
    
        /**
         * 建一个包含collection的ArrayList
         * 方法:Arrays.copyOf(elementData, size, Object[].class)
         *     根据class的类型来决定是new 还是反射去构造一个泛型数组,同时利用native函数,批量赋值元素至新数组中
         */
        public ArrayList(Collection<? extends E> c) {
            //把集合转化成Object[]数组
            elementData = c.toArray();
            //转化后的数组长度赋给当前ArrayList的size,并判断是否为0
            if ((size = elementData.length) != 0) {
                if (elementData.getClass() != Object[].class)
                    // 若 c.toArray() 返回的数组类型不是Object[],则利用Arrays.copyOf(); 来构造一个大小为 size 的 Object[] 数组
                    elementData = Arrays.copyOf(elementData, size, Object[].class);
            } else {
                //当长度为0是用空数组进行替换
                this.elementData = EMPTY_ELEMENTDATA;
            }
        }
    

    方法分析:

    1、add(E e)方法

    0

    展开全文
  • Array ArrayList

    2011-09-23 10:27:45
    Array type[] typename = new type[size]; array数组并不提供add,clear,addRange..方法,而是直接设置或获取值 ArrayList using System.Collections 声明对象
    Array

    type[] typename = new type[size];
    array数组并不提供add,clear,addRange..方法,而是直接设置或获取值


    ArrayList
    using System.Collections

    声明对象
    ArrayList al = new ArrayList();
    ArrayList al = new ArrayList(3);

    Capacity 与 Count
    Capacity 表示可包含的元素数,可读可写
    Count 表示实际包含的元素数,只读

    Add 方法
    添加一个元素到当前列表的末尾
    al.Add(100);    //单个添加

    AddRange 方法
    添加一批元素到当前列表的末尾
    int[] number2 = new int[2] { 11, 12 };
    al.AddRange(number2);

    Remove 方法
    删除一个元素,通过元素本身的引用来删除
    al.Remove(3);    //移除值为3的元素 

    RemoveAt 方法
    删除一个元素,通过索引值来删除
    al.RemoveAt(3);    //移除第3个元素

    RemoveRange 方法
    删除一批元素,通过指定开始的索引和删除的数量来删除

    Insert 方法
    添加一个元素到指定位置,列表后面的元素依次往后移动

    InsertRange 方法
    从指定位置开始添加一批元素,列表后面的元素依次往后移动  

    Clear 方法
    清除现有所有的元素

    Contains 方法
    查找某个对象在不在列表之中


    展开全文
  • 主要介绍了Java Array与ArrayList区别详解的相关资料,需要的朋友可以参考下
  • Array与Arraylist

    2009-02-06 17:40:00
    Array在声明的时候必须要实例化,指定固定大小。而Arraylist可以只用声明(它的空间大小可以任意添加)。int[] array = new array[3];...Array存储的是类型相同的数据,而Arraylist可以存储不相同的类型数据。Array不能

     Array在声明的时候必须要实例化,指定固定大小。而Arraylist可以只用声明(它的空间大小可以任意添加)。

    int[] array = new array[3];
     或 int[] array = {1,2,3};
     或 ArrayList myList = new ArrayList();

    Array存储的是类型相同的数据,而Arraylist可以存储不相同的类型数据。

    Array不能随意删除和添加里面的项,而Arraylist可以在任何位置插入和删除项。

     

    展开全文
  • C#中Array与ArrayList用法及转换的方法,需要的朋友可以参考一下
  • Array与ArrayList的区别

    2016-06-22 08:53:42
    Array与ArrayList的区别Array的用法与数组几乎一样,可以看做是数组。在定义的时候需要指定长度;ArrayList的用法与普通集合一样,定义的时候不需要指定长度;Array[] animalArray = new Array[2];ArrayList animal...
  • Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。 ②Array大小是固定的,ArrayList的大小是动态变化的。 ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。 ...
  • array与arraylist的区别

    2014-12-24 09:40:21
    array与arraylist的区别 array是数组的英文名,ArrayList可以想象成一种“会自动扩增容量的array”。 array:高效;但是其容量固定且无法动态改变; ArrayList:容量可动态增长;但牺牲效率; 基于...
  • c#中Array与ArrayList的区别 Array 针对任意类型,固定长度 通过存储 object 实现任意类型的,所以使用时要转换。 在C#中的数组也是对象,实际上就是Array类的实例 是一个抽象类 在CLR托管对中的存放方式始终是...
  • Java中Array与ArrayList的区别整理自:JavaHungry在Java中,Array和ArrayList主要有以下五点区别:1.能否调整大小Array是静态的数据结构,在创建Array对象后不能改变其大小。 ArrayList是动态的,当元素被加入...
  • Java中Array与ArrayList之间的转换 ArrayList是一个数组队列,可以理解为是一个动态数组,即它的容量能动态增加。 Array也是一个数组队列,是一个静态数组,长度是固定的,不能更改。 很多情况下,我们需要在...
  • Array与ArrayList对比

    2019-10-03 20:45:39
    1.精辟阐述可以将ArrayList想象成一种“会自动扩增容量的Array”。2.简介Array([]):最高效,但其容量固定且无法动态改变;ArrayList:容量可动态增长,但牺牲效率。3.建议基于效率和类型检验,应尽可能使用Array...
  • C#中经常用到的集合类Array与ArrayList是许多刚接触C#语言的人比较困惑的。这两个对象是比较有用的,而且是在很多地方适用的。这里我把自己对Array与ArrayList对象的区别总结一下,与大家分享。 主要区别: 一、...
  • Java中Array与ArrayList的主要区别 1)精辟阐述: 可以将 ArrayList想象成一种“会自动扩增容量的Array”。 2)Array([]):最高效;但是其容量固定且无法动态改变;  ArrayList: 容量可动态增长;但...
  •  C#中经常用到的集合类Array与ArrayList是许多刚接触C#语言的人比较困惑的。这两个对象是比较有用的,而且是在很多地方适用的。这里我把自己对Array与ArrayList对象的区别总结一下,与大家分享。 主要区别: 一、...
  • C#中经常用到的集合类Array与ArrayList是许多刚接触C#语言的人比较困惑的。这两个对象是比较有用的,而且是在很多地方适用的。这里我把自己对Array与ArrayList对象的区别总结一下,与大家分享。 主要区别: 一...
  • Array与ArrayList的转换

    2020-07-18 11:04:47
    Array public class Test { public static void main(String[] args) { List<String> list=new ArrayList<String>(); list.add("王利虎"); list.add("张三"); list.add("李四"); int size=...
  • Array ArrayList 的区别,以及应用场景的不同之处 ArrayList 可以理解为能够自动扩容的 array ,也就是两者的第一个区别: 1. 存储空间大小的区别 Array 的空间大小是固定的,空间不够时也不能再次申请,所以...
  • 如果你知道arrayArrayList的相似点和不同点,就可以选择什么时候用array 或者使用ArrayListarray提供 O(1)的查找性能和很基本的方式去存储数据。 ArrayList是Java集合框架类的一员,可以称它为一个动态数组。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 969
精华内容 387
关键字:

array与arraylist