ArrayList总结

2018-12-08  本文已影响0人  ZalleDay

首先,我们要知道Java 集合主要分为两个派系,一个是 Collection 系列,一个是 Map 系列。

我们今天的主角是ArrayList,它属于Collection。

使用idea的话,使用F4就可以看到源代码

public class ArrayListextends AbstractList

implements List, RandomAccess, Cloneable, java.io.Serializable

{

private static final long serialVersionUID =8683452581122892189L;

/**

* Default initial capacity.初始化为的容量为10

*/

    private static final int DEFAULT_CAPACITY =10;

/**

* 这个是动态数组

*/

    transient Object[]elementData;// non-private to simplify nested class access

我们这里讲解这个常用的方法

/**

* Returns the element at the specified position in this list.

*

* @param  index index of the element to return

* @return the element at the specified position in this list

* @throws IndexOutOfBoundsException {@inheritDoc}

*/

public E get(int index) {

Objects.checkIndex(index,size);

return elementData(index);

}

这说明的get方法会对范围的合法性进行检查

    public E set(int index,E element) {

Objects.checkIndex(index,size);

E oldValue = elementData(index);

elementData[index] = element;

return oldValue;

}

set方法也是如此,set方法和get方法一样,必须要对ArrayList里面已经有的元素才能操作,不然会报IndexOutOfBoundsException错误

当时小编就遇到了相关问题...

遇到一篇好博文

http://www.cnblogs.com/java-zhao/p/5102342.html

附上他所提示的重难点:

ArrayList基于数组方式实现,无容量的限制(会扩容)

添加元素时可能要扩容(所以最好预判一下),删除元素时不会减少容量(若希望减少容量,trimToSize()),删除元素时,将删除掉的位置元素置为null,下次gc就会回收这些元素所占的内存空间。

线程不安全

add(int index, E element):添加元素到数组中指定位置的时候,需要将该位置及其后边所有的元素都整块向后复制一位

get(int index):获取指定位置上的元素时,可以通过索引直接获取(O(1))

remove(Object o)需要遍历数组

remove(int index)不需要遍历数组,只需判断index是否符合条件即可,效率比remove(Object o)高

contains(E)需要遍历数组

上一篇下一篇

猜你喜欢

热点阅读