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. [转]eclipse重新编译

    Eclipse打开时并不重新生成class文件,这就造成了eclipse找不到需要的class文件从而不能正常编译工程中的其他代码.此时就需要重新编译工程. 单击Project菜单,选择Clean菜单 ...

  2. CRM(客户关系管理)

    CRM最初是由Gartner Group提出的. CRM定义:"客户关系管理(CRM),是代表增进赢利.收入和客户满意度而设计的,企业范围的商业战略." 我们可以看出,Gartne ...

  3. BZOJ4285: 使者

    搞出dfs序,转化为查询矩形点数,树套树搞定. #include<cstdio> #include<cstdlib> #define N 100005 #define IF e ...

  4. HTML5新标签 w3c

    w3c标准下的HTML5新标签 ,做个归纳总结: H5标签 定义和用法 兼容性 <artical> 规定独立的自包含内容, 支持html中的全局属性, 支持html中的事件属性 IE: 支 ...

  5. grunt安装和使用教程

    grunt的安装 npm intall -g grunt-cli 新建文件夹grunt,在本地文件中添加package.json和Gruntfile.js文件,其中package.json文件的配置如 ...

  6. zabbix注入过程分析

    Zabbix jsrpc.php sql 注入过程分析 漏洞公开详情(https://support.zabbix.com/browse/ZBX-11023)中提示在insertDB() 中的inse ...

  7. Python调用服务接口

    #! /usr/bin/env python # coding=utf-8 ############################################################## ...

  8. Silicon C8051F340之时钟系统

    一.背景 做个记录,以备下次快速开发. 二.正文 C8051F340有一个可编程内部高频振荡器.一个可编程内部低频振荡器.一个外部振荡器驱动电路 和一个4倍时钟乘法器.其中可编程内部高频振荡器在系统复 ...

  9. (PPT)Linux服务器基础

  10. js前端实现模糊查询

    对于模糊查询,一般都是传关键字给后端,由后端来做.但是有时候一些轻量级的列表前端来做可以减少ajax请求,在一定程度上提高用户体验.废话不多说,直接上代码. //字符串方法indexOfvar len ...