文章目录
- [Ⅰ. ArrayList](#Ⅰ. ArrayList)
- [Ⅱ. LinkedList](#Ⅱ. LinkedList)
- [ArrayList 与 LinkedList 的区别](#ArrayList 与 LinkedList 的区别)

Ⅰ. ArrayList

构造函数有以下泛型参数:(其它有该构造函数的集合类均可这样子处理)

注意事项:
- 长度方法的区别:
- 数组用
.length获取元素长度 String用.length()获取元素长度- 集合类用
.size()获取元素长度
- 数组用
ArrayList不是线程安全的 ,在单线程下可以使用,在多线程中可以选择CopyOnWriteArrayList。ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表。

注意事项:
subList()中拿到的List对象是原来List对象中的一部分,对这部分进行修改,是会影响到原对象的!- 要使用迭代器,必须要实现
Iterator接口,并且重写iterator方法! - 注意
List<Integer> tmp = null表示tmp是没有引用任何对象 ,而List<Integer> tmp = new ArrayList<>()表示有引用对象,但只是一个空盒子! List.copyOf()方法返回的List是不可变的!- 下图是两个拷贝函数的区别:

遍历
java
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(10);
list.add(20);
list.add(30);
list.add(40);
list.add(50);
// 1. 下标遍历(推荐⭐)
for(int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
// 2. for-each遍历(推荐⭐)
for(Integer e: list) {
System.out.println(e);
}
// 3. 迭代器遍历:使用Iterator的hasNext()和next()方法
Iterator<Integer> iter = list.iterator();
while(iter.hasNext()) {
System.out.println(iter.next());
}
}
Ⅱ. LinkedList

LinkedList 的底层是双向链表结构,由于链表没有将元素存储在连续的空间中,元素存储在单独的节点中,然后通过引用将节点连接起来了,因此在任意位置插入或者删除元素时,不需要搬移元素,效率比较高。
LinkedList 没有实现 RandomAccess 接口,因此 LinkedList 不支持随机访问。
对于 LinkedList 来说,它的接口和 ArrayList 的接口基本是一样的,只是逻辑和物理存储上面的区别,所以具体接口可以参考 ArrayList 的笔记或者直接翻看官方文档!
遍历方式
go
public static void main(String[] args) {
List<Integer> list = new LinkedList<>();
list.add(1);
list.add(2);
list.add(3);
// 遍历方式一:使用自带的重写的toString()方法
System.out.println(list);
// 遍历方式二:for-each循环
for (int e : list) {
System.out.print(e + " ");
}
System.out.println();
// 遍历方式三:普适的迭代器
Iterator<Integer> it1 = list.iterator();
while(it1.hasNext()) {
System.out.print(it1.next() + " ");
}
System.out.println();
// 遍历方式四:使用LinkedList专用的迭代器
ListIterator<Integer> it2 = list.listIterator();
while(it2.hasNext()) {
System.out.print(it2.next() + " ");
}
System.out.println();
// 遍历方式五:反向迭代器
ListIterator<Integer> rit = list.listIterator(list.size());
while(rit.hasPrevious()) {
System.out.print(rit.previous() + " ");
}
System.out.println();
}
ArrayList 与 LinkedList 的区别

