-
List集合类中元素有序(添加顺序和取出顺序一致),并且元素可以重复
-
List集合的每个元素都有对应的顺序索引。
-
常用方法
List list = new ArrayList(); list.add(1,"sd"); //第二个可以加加元素也可以加集合 list.indexof(Object obj);//返回obj在集合中首次出现的位置 list.lastindexof(Object obj); list.remove(index); //删除 list.set(int index,Object obj); //相当于替换 list.subList(0,2);//前闭后开获取数组对象
-
List遍历
- 迭代器
- 增强 for
- 普通 for 循环 //看作数组
-
ArrayList
- 可以存放 null
- 底层用数组实现
- 基本等同于Vector, 但是
ArrayList
是线程不安全的,多线程情况下,不建议使用Arraylist
ArrayList
底层结构和源码分析:ArrayList
中维护了一个Object类型的数组elementDate
- 当创建
ArrayList
的时候,如果使用无参构造器,刚创建时的数组长度为0,当插入元素的时候数组扩容到10,如需要再次扩容,扩容到当前容量的1.5倍。Arrays.copyof()
函数扩容 - 当创建
ArrayList
的时候使用的是指定大小的构造器,需要扩容时,直接扩容到当前容量的1.5倍。
-
Vector
- 定义说明:
public class Vector<E>
- Vector底层也是一个对象数组, protected Object[] elementData;
- Vector 是线程同步的,即线程安全,Vector类的操作方法带有 synchronized
- ArrayList和 Vector的区别
底层结构 版本 线程安全效率 扩容倍数 ArratList 可变数组 jdk1.2 不安全,效率高 有参构造器 1.5倍无参构造器 第一次 10 后面 扩容 1.5倍 Vector 可变数组 jdk1.0 安全,效率不高 无参,默认10,以后按两倍扩容, 有参按2倍扩容 - 定义说明:
-
linkedlist
LinkedList
底层实现了双向链表,维护了两个属性 first首字节 last尾字节。linkedList
的元素添加和删除不是通过数组来完成的,相对来说效率较高。
底层结构 | 增删效率 | 改查效率 | |
---|---|---|---|
ArrayList | 可变数组 | 较低 数组扩容 | 较高 |
LinkedList | 双向链表 | 较高 链表追加 | 较低 |