ArrayList数组列表

Collection接口和List接口的区别

  • List接口扩充了Collection接口,添加了索引相关的方法。
  • code example

    Object get(int index)
    Object set(int index,Object element)
    int indexOf(Object elem)
    void add(int index,Object element)
    Object remove(int index)
  • List接口中的大多数方法是基于索引的。

ArrayList类

1、可以看成一维数组的改良版,支持随机访问,ArrayList对象的大小自动调整。 2、ArrayList对象中每个元素的相对位置都是利用索引表示,索引范围0~n-1 3、给定一个索引,访问这个索引位置上的元素时间是常数级别。 4、删除元素,最坏情况是O(n-index),所以删除靠后面的元素花费的时间越少。 5、插入元素,最坏情况是O(n-index),所以插入末尾操作花费时间越少。

源码方法分析(具体可以看java documnet)

public ArrayList Object(int initialCapacity);
指定初始化容量的大小
public boolean add(Object o);
在末尾插入元素
public int size();
返回容器的有效元素个数

......

ArrayList对象的可串行化

ObjectOutputStream

ArrayList对象的可克隆性

实现了Clonable接口 方法:

public Object clone();

复制的是ArrayList对象中元素的引用,并不是对象,所以称为“浅复制”。

public class ArrayListDemo {

    public static void main(String[] args) {
ArrayList<Integer> list=new ArrayList<Integer>(3);
list.add(1);
list.add(2);
System.out.println("list size="+list.size());
ArrayList<Integer> temp=(ArrayList<Integer>) list.clone();
System.out.println("temp size="+temp.size());
//www.90168.org不改变克隆对象
list.add(3);
System.out.println("list result size="+list.size());
System.out.println("temp result size="+temp.size());
} } /*
*list size=2
*temp size=2
*list result size=3
*temp result size=2
*/

ArrayList的扩充,分摊时间

1、数组一般扩充50% 2、add()方法将newCapacity设置成(oldCapacity*3)/2+1并没有实际的意义,只是为了时间和空间的平衡。

Fail-First迭代器

1、继承了AbstractList的modCount字段 add()、remove()modCount加1 一旦next()方法激活,就不能修改ArrayList。

public class ArrayListDemo2 {

    public static void main(String[] args) {
ArrayList<Integer> list=new ArrayList<Integer>();
list.add(2);
list.add(3); Iterator it=list.iterator();
while(it.hasNext()){
int ele=(int) it.next();
//进行修改,会抛异常
list.add(1, 4);
System.out.println(ele);
}
} }

与Vector类的区别

1、Vector类也是基于数组实现 2、Vector类的方法大都是同步的。

ArrayList数组列表的更多相关文章

  1. 泛型数组列表 ArrayList

    为什么使用泛型数组列表而不使用普通数组? 1.普通数组经常会发生容量太大以致浪费的情况 2.普通数组无法动态更改数组 基本概念: 1.采用[类型参数]的[类]---->[泛型类] 2.[泛型类型 ...

  2. 变长数组列表ArrayList

    简介:此数据结构定义为一个ArrayList结构体类型,维护了一个内部堆数组.通过realloc函数实现了数组容量自动扩充,每次扩充到原来的2倍. 通过函数指针实现了使用者根据自己的需求按条件按查找目 ...

  3. java中把list列表转为arrayList以及arraylist数组截取的简单方法

    java中把list列表转为arrayList以及arraylist数组截取的简单方法 package xiaobai; import java.util.ArrayList; import java ...

  4. Java基础(七)泛型数组列表ArrayList与枚举类Enum

    一.泛型数组列表ArrayList 1.在Java中,ArrayList类可以解决运行时动态更改数组的问题.ArrayList使用起来有点像数组,但是在添加或删除元素时,具有自动调节数组容量的功能,而 ...

  5. 数组列表(ArrayList)

    2020-10-20        longzqa@163.com        stronglzq [摘要]针对数组容量固定无法扩展的问题,引入数组列表(ArrayList).主要对数组列表的声明及 ...

  6. Java数组列表反转

    在Java中,如何反转数组列表中的元素? 以下示例使用Collections.reverse(ArrayList)方法反转数组列表中的元素. package com.yiibai; public cl ...

  7. java 泛型数组列表

    如下代码: package com.company; import java.lang.reflect.Array; import java.util.ArrayList; public class ...

  8. 「JavaSE 重新出发」05.02 泛型数组列表、包装类

    泛型数组列表 ArrayList 是一个采用类型参数(type parameter)的泛型类(generic class). java ArrayList<Employee> staff ...

  9. .NET重思(三)-数组列表与数组的区别,栈集合和队列结合的区别

    数组列表和数组十分相似,区别在于数组列表的容量是可以动态变化的,而数组的容量是固定的.数组即Array类,数组列表即ArrayList类,两者十分相似.不过,Array类在System命名空间下,Ar ...

随机推荐

  1. C# winform开发:Graphics、pictureBox同时画多个矩形

    C#的System.Drawing 命名空间提供了对 GDI+ 基本图形功能的访问 重点在于获取Graphics对象,例如: Graphics g = panel1.CreateGraphics 事实 ...

  2. Confuser.crproj

    <?xml version="1.0" encoding="utf-8"?> <project baseDir="bin\Relea ...

  3. [Head First设计模式]生活中学设计模式——外观模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...

  4. JavaScript 快速排序(Quicksort)

    "快速排序"的思想很简单,整个排序过程只需要三步: (1)在数据集之中,选择一个元素作为"基准"(pivot). (2)所有小于"基准"的元 ...

  5. Codeforces#262_1002

    Codeforces#262_1002 B. Little Dima and Equation time limit per test 1 second memory limit per test 2 ...

  6. PHP的大括号(花括号{})使用详解

    一.不管什么程序,function name(){}, for(){}, ….这太多了,不说也知道什么用了. 二.$str{4}在字符串的变量的后面跟上{}大括号和中括号[]一样都是把某个字符串变量当 ...

  7. .htaccess 基础教程(一)

    .htaccess是什么? .htaccess叫分布式配置文件,它提供了针对目录改变配置的方法——在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.并且子目录中的 ...

  8. CentOS下安装JDK1.7

    1.安装包准备: 首先到官网下载jdk,http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.h ...

  9. eclipse导入重复的项目、eclipse设置默认注释

  10. phpcms中的RBAC权限系统

    PHPCMS中的RBAC权限系统主要用到了4张数据表:管理员表,角色表,菜单表,菜单权限表.先来看看数据库的数据表结构: admin 管理员表 ID 字段 类型 Null 默认 索引 额外 注释 1 ...