ArrayList
ArryList 的底层实现是数组队列。与 Java 中数组不同的是,它的容量能够动态的增长。
继承自 AbstractList, 实现了 List,RandomAccess,Cloneable,Serializable 这些接口。
在 ArrayList 中,很多地方使用了 System.arraycopy()
和 Arrays.copyOf()
这两个方法来复制数组。
比如在 add(int index, E element)
在指定位置插入元素的方法中就巧妙的使用了 arraycopy()
这个方法来复制数组。
1 | /** |
在 toArray()
方法中又使用了 copyOf()
方法
1 | /** |
copyOf()
实际上是调用了 arraycopy()
方法的
arraycopy()
方法是需要实现创建一个目标数组,再将原数组拷贝至目标数组copyOf()
方法不需要实现创建一个目标数组,在方法内部自动创建一个数组,并返回该数组.
另外需要注意的是:
- Java 中的length 属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了 length 这个属性.
- Java 中的length()方法是针对字 符串String说的,如果想看这个字符串的长度则用到 length()这个方法.
- Java 中的size()方法是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看!
LinkedList
LinkedList 是一个实现了 List 接口和 Deque 的双端接口。底层实现是双向链表,支持高效的插入删除操作。
LinkedList 不是线程安全的
add方法
1 | public boolean add(E e) { |
根据索引位置得到数据的方法
1 | public E get(int index) { |