以下情况使用 ArrayList :
频繁访问列表中的某一个元素。
只需要在列表末尾进行添加和删除元素操作。
以下情况使用 LinkedList :
你需要通过循环迭代来访问列表中的某些元素。
需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。
LinkedList 继承了 AbstractSequentialList 类。
LinkedList 实现了 Queue 接口,可作为队列使用。
LinkedList 实现了 List 接口,可进行列表的相关操作。
LinkedList 实现了 Deque 接口,可作为队列使用。
LinkedList 实现了 Cloneable 接口,可实现克隆。
LinkedList 实现了 java.io.Serializable 接口,即可支持序列化,能通过序列化去传输。
LinkedList 可以直接打印所有元素。
public class Test04 {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<String>();
list.add("hi");
list.add("this");
list.add("is");
System.out.println(list);
}
}
result
[hi, this, is]
可以直接操作队头队尾进行增删。
public class Test04 {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<String>();
list.add("hi");
list.add("this");
list.add("is");
System.out.println(list);
System.out.println(list.getFirst());
System.out.println(list.getLast());
list.addFirst("first");
System.out.println(list);
list.addLast("Last");
System.out.println(list);
list.removeFirst();
System.out.println(list);
list.removeLast();
System.out.println(list);
}
}
[hi, this, is]
hi
is
[first, hi, this, is]
[first, hi, this, is, Last]
[hi, this, is, Last]
[hi, this, is]
依然用get()获取下标元素。添加的add() 也可以用 offer() ,两个貌似一样offer() 也执行add(),jdk9。
poll 和 remove 作用一样;poll() 遇到空指针会返回null;remove()删除队头元素并返回,遇到空指针会异常。
返回元素一开始出现的下标/最后出现的下标。
System.out.println(list);
System.out.println(list.indexOf("hi"));
System.out.println(list.lastIndexOf("hi"));
[hi, this, is, hi]
0
3
获取队头元素peek() 或 element() 区别在于是否抛出异常;
System.out.println(list.peek());
list.clear();
System.out.println(list.peek());
System.out.println(list.element());
hi
null
Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.LinkedList.getFirst(LinkedList.java:248)
at java.base/java.util.LinkedList.element(LinkedList.java:667)
at test.Test04.main(Test04.java:47)
注意 集合类需要继承 List 类才能使用迭代器父类方法 iterator()
List<String> list = new LinkedList<String>();
.........
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
hi
this
is