ArrayList数组列表
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数组列表的更多相关文章
- 泛型数组列表 ArrayList
为什么使用泛型数组列表而不使用普通数组? 1.普通数组经常会发生容量太大以致浪费的情况 2.普通数组无法动态更改数组 基本概念: 1.采用[类型参数]的[类]---->[泛型类] 2.[泛型类型 ...
- 变长数组列表ArrayList
简介:此数据结构定义为一个ArrayList结构体类型,维护了一个内部堆数组.通过realloc函数实现了数组容量自动扩充,每次扩充到原来的2倍. 通过函数指针实现了使用者根据自己的需求按条件按查找目 ...
- java中把list列表转为arrayList以及arraylist数组截取的简单方法
java中把list列表转为arrayList以及arraylist数组截取的简单方法 package xiaobai; import java.util.ArrayList; import java ...
- Java基础(七)泛型数组列表ArrayList与枚举类Enum
一.泛型数组列表ArrayList 1.在Java中,ArrayList类可以解决运行时动态更改数组的问题.ArrayList使用起来有点像数组,但是在添加或删除元素时,具有自动调节数组容量的功能,而 ...
- 数组列表(ArrayList)
2020-10-20 longzqa@163.com stronglzq [摘要]针对数组容量固定无法扩展的问题,引入数组列表(ArrayList).主要对数组列表的声明及 ...
- Java数组列表反转
在Java中,如何反转数组列表中的元素? 以下示例使用Collections.reverse(ArrayList)方法反转数组列表中的元素. package com.yiibai; public cl ...
- java 泛型数组列表
如下代码: package com.company; import java.lang.reflect.Array; import java.util.ArrayList; public class ...
- 「JavaSE 重新出发」05.02 泛型数组列表、包装类
泛型数组列表 ArrayList 是一个采用类型参数(type parameter)的泛型类(generic class). java ArrayList<Employee> staff ...
- .NET重思(三)-数组列表与数组的区别,栈集合和队列结合的区别
数组列表和数组十分相似,区别在于数组列表的容量是可以动态变化的,而数组的容量是固定的.数组即Array类,数组列表即ArrayList类,两者十分相似.不过,Array类在System命名空间下,Ar ...
随机推荐
- 迭代器学习之一:使用IEnumerable和IEnumerator接口
写博客是检验我学习的成果之一以及自我总结的一种方式,以后会经常利用这种方式进行技术交流和自我总结,其中认识不深难免会有错误,但是一直懂得不懂就问,不懂就学的道理! 1.首先看一个简单的列子 , , , ...
- 第二轮冲刺-Runner站立会议04
今天:查看gridview与baseadapter的连接 明天准备做什么:继续gridview与baseadapter适配器 遇到的困难:暂无
- c++11 中成员变量初始化的顺序
参考C++11FAQ https://www.chenlq.net/cpp11-faq-chs 11以后可以直接在类里面初始化成员变量,类似这样 class A { int a=1; const in ...
- [Unity] Shader(着色器)之固定管线
在Unity中,固定管线Shader的性能是最好的. 什么是固定管线呢? 固定渲染管线 —— 这是标准的几何&光照(T&L)管线,功能是固定的,它控制着世界.视.投影变换及固定光照控制 ...
- html5中新增非主体结构元素
1.header元素 定义HTML文档的页眉,是一种具有引导和导航作用的结构元素 <header> <h1>header元素</h1> <nav> &l ...
- UI第十一节——UIActivityIndicatorView
- (void)viewDidLoad { [super viewDidLoad]; // 创建一个UIActivityIndicatorView,大小是固定的 UIActi ...
- 微信网页版APP - 网页微信客户端电脑版体验
微信网页版很早就出来了,解决了很多人上班不能玩手机的问题.微信电脑版-网页微信客户端,直接安装在桌面的微信网页版,免去了开浏览器的麻烦.双击就启动了,和其他的应用程序一样:运行过程中可以隐藏在桌面右下 ...
- Linux启动新进程的几种方法汇总
有时候,我们需要在自己的程序(进程)中启动另一个程序(进程)来帮助我们完成一些工作,那么我们需要怎么才能在自己的进程中启动其他的进程呢?在Linux中提供了不少的方法来实现这一点,下面就来介绍一个这些 ...
- Linux进程间通信(一): 信号 signal()、sigaction()
一.什么是信号 用过Windows的我们都知道,当我们无法正常结束一个程序时,可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢?同样的功能在Linux上是通过生成信号和捕获信号来实现的,运行中 ...
- C和指针 第五章 习题
下列输出的值: #include <stdio.h> int func(){ static int count = 1; return ++count; } int main() { in ...