java学习 集合之arrayList
说明:
1:ArrayList 其实就是可自动扩容的数组
2:ArrayList 每次扩容会预申请多一点空间(1.5倍+1) 最大容量是 Integer.MAX_VALUE - 8
3:ArrayList 实现了RandomAccess 提供了随机访问功能
1:继承关系:
2:比较重要的类成员
private static final int DEFAULT_CAPACITY = 10; private static final 修饰的成员变量 该变量代表ArrayList 默认的初始大小是10
private static final Object[] EMPTY_ELEMENTDATA = {}; 代表arrayList 没有任何元素
private transient Object[] elementData; 用于存储ArrayList 的元素 这里用上了transient 关键字 表明是常变的
private int size; arrayList 长度
3:构造方法
ArrayList 总共有3个构造方法
1: public ArrayList() 构造含有10个容量的空list
2: public ArrayList(int initialCapacity) 构造含有指定容量的空list 如果参数小于0 则会抛出异常 就是说这里是可以设置等于0 的。但貌似也没有任何意义。
3: public ArrayList(Collection<? extends E> c) 构造包含指定集合长度的非空 list。 如果c 为null 会产生空指针异常
4:深入了解的一些方法
1: public void trimToSize() 修剪ArrayList 到当前元素大小的长度 如容量是150 实际元素是100 那么将去除掉50的容量 感觉平时很少用上
2: public void ensureCapacity(int minCapacity) 保障容量 参数超过当前容量则会扩容
3: public boolean contains(Object o) 判断是否包含某元素 实际上内部调用的 indexOf() 方法
4: 添加方法 有2种添加方式
1: public boolean add(E e) 添加元素到数组末尾 会自动扩容 第一次添加元素的容量是10
public void add(int index, E element) 添加元素到指定位置 同样会扩容 如果超过数组长度 则会抛出异常
主要的实现是调用 System.arraycopy 该方法是System类中的一个JNI方式实现类.(JNI , Java Native Interface 故名思意,就是java 语言调其它语言的一个接口)
详细介绍为: public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
src:源数组; srcPos:源数组要复制的起始位置;
dest:目的数组; destPos:目的数组放置的起始位置;
length:复制的长度.
举个列子: 假设现有数组 {1,2,3,4,5} 现在需要添加元素 {0} 到索引 2 中 .那么执行完arraycopy 方法后 结果应该是 {1,2,3,3,4,5}
2: public boolean addAll(Collection<? extends E> c) 将指定集合的元素添加到列表最后 采用 addAll 的方式会比for 循环添加有效率
public boolean addAll(int index, Collection<? extends E> c) 添加到指定位置 类似上述add 方法
4: 删除方法 总共有2种(删除都不会减少容量大小)
1:public E remove(int index) 删除指定位置元素
public boolean remove(Object o) 删除指定元素 效率比较慢 需要循环比较
2: public boolean removeAll(Collection<?> c) 删除指定列表内的所有元素
5:遍历访问
1:有3种方式可以遍历访问 1.1 Iterator迭代器遍历 1.2 索引随即遍历 1.3 for循环遍历 通过测试证明是 索引访问最快。并且根据JDK 中所说 所有实现了RandomAccess 推荐使用随即遍历。 而linkedList那些未实现该接口的类在使用Iterator进行迭代效率更高.
- JAVA基础学习之String、StringBuffer、StringBuilder、基本数据类型的使用、整形进制转换、集合Collection、Vector、ArrayList、LinkedList、HashSet、TreeSet等(3)
- 深入Java集合学习系列一:ArrayList的实现原理
- 深入Java集合学习系列:ArrayList的实现原理
- 【幻化万千戏红尘】qianfengDay14-java基础学习:集合,ArrayList,Iterator,LinkedList
- java集合学习之:ArrayList和LinkedList
- 【Java学习】去除ArrayList集合中的重复元素
- JAVA学习【7】集合框架与Arraylist、Linkedlist、HashSet的基本用法
- 集合框架ArrayList、List、Vector+JAVA学习笔记-DAY15
- java集合类库学习记录———ArrayList
- 【JAVA学习笔记】16 ArrayList集合 、HashCode和equals判断对象相同、linklist、list接口
- 深入Java集合学习系列:ArrayList的实现原理
- 深入Java集合学习系列:ArrayList的实现原理
- JAVA学习---集合系列---ArrayList
- Java集合源码学习(2):ArrayList和LinkedArrayList(未完待续...)
- 深入Java集合学习系列:ArrayList的实现原理
- Java集合深入学习:ArrayList的实现原理
- Java集合框架学习(五) ArrayList详解
- 深入Java集合学习系列:ArrayList的实现原理
- 深入Java集合学习系列:ArrayList的实现原理
- JAVA学习第三十五课(常用对象API)—Vector、LinkedList、ArrayList集合演示