1、ArrayList
- 数据结构:ArrayList 底层数据结构是 Object[] 数组,默认初始容量是 10。
- 扩容机制:按照原来的 1.5 倍扩容,源码中采用的算法是 newCapacity = oldCapacity + (oldCapacity >> 1) ,也就是老容量+老容量/2。
- 安全性:线程不安全。
- 优缺点:数组具有随机访问的特性,所以查询和修改快,但是增删效率低。
遍历操作示例:
public static void main(String[] args) {
ArrayList<String> list = new ArrayList();
list.add("Hello");
list.add("World ");
// forEach 遍历
list.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
// Lambda 表达式遍历
list.forEach((s)-> System.out.println(s));
// 迭代器遍历
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
// Lambda 表达式+Iterator
Iterator<String> iterator2 = list.iterator();
iterator2.forEachRemaining(s -> System.out.println(s));
// for 循环
for (String s : list) {
System.out.println(s);
}
}
2、LinkedList
- 数据结构:LinkedList 底层数据结构是 双向链表。
- 安全性:线程不安全。
- 优缺点:链表查询和修改慢,但是增删效率高。
遍历操作:
@Test
public void test(){
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("Hello ");
linkedList.add("world");
// forEach
linkedList.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
// forEach + Lambda
linkedList.forEach(s -> System.out.println(s));
// 迭代器
Iterator<String> iterator = linkedList.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
// Lambda+迭代器
Iterator<String> iterator1 = linkedList.iterator();
iterator1.forEachRemaining(s-> System.out.println(s));
// for
for (String s : linkedList) {
System.out.println(s);
}
}