LinkedList:链表。
package com.bjsxt.collection0910;
import java.util.ArrayList;
import java.util.LinkedList;
/**
* LinkedList 和 ArrayList 性能比较
*
* @author yhl
*
*/
public class LinkedListTest {
public static void main(String[] args) {
final int COUNT = 10000;
//尾部添加
long time = System.currentTimeMillis();
ArrayList<String> list1 = new ArrayList<>();
for (int i = 0; i < COUNT; i++) {
list1.add("1");
}
//8ms
System.out.println("cost = " + (System.currentTimeMillis() - time));
time = System.currentTimeMillis();
LinkedList<String> list2 = new LinkedList<>();
for (int i = 0; i < COUNT; i++) {
list2.add("1");
}
//15ms
System.out.println("cost = " + (System.currentTimeMillis() - time));
//遍历
time = System.currentTimeMillis();
for (int i = 0; i < COUNT; i++) {
list1.get(i);
}
//0ms
System.out.println("cost = " + (System.currentTimeMillis() - time));
time = System.currentTimeMillis();
for (int i = 0; i < COUNT; i++) {
list2.get(i);
}
//10816ms
System.out.println("cost = " + (System.currentTimeMillis() - time));
//插入元素 头部
time = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
list1.add(0, "2");
}
//2370ms
System.out.println("cost = " + (System.currentTimeMillis() - time));
time = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
list2.add(0, "2");
}
//11ms
System.out.println("cost = " + (System.currentTimeMillis() - time));
//中间插入
time = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
list1.add(list1.size()>>1, "2");
}
//3274ms
System.out.println("cost = " + (System.currentTimeMillis() - time));
time = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
list2.add(list2.size()>>1, "2");
}
//42491ms
System.out.println("cost = " + (System.currentTimeMillis() - time));
}
}
ListIterator:
是 java.util.Iterator 的子接口。
是List 的专有迭代器 Set 是不能使用的。
是一个功能更加强大的迭代器。
Iterator 对象,一次失效。只能实现单向遍历,可以删除 next 返回的元素对象。
ListIterator特点:
主要增加了 修改 添加元素的方法。 还增加了从后往前遍历的方法。
可以实现双向的遍历。
我们可以认为ListIterator 不是一次性失效。
package com.bjsxt.collection0910;
import java.util.LinkedList;
import java.util.ListIterator;
public class ListIteratorTest {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");
list.add("7");
//得到 容器对象上的ListIterator 对象
ListIterator<String> iterator = list.listIterator();
while (iterator.hasNext()) {
String str = iterator.next();
// iterator.remove();
//增加的功能
if(str.equals("2")){
//将指定的元素添加到 next 方法返回的元素的后面
//插入到 游标当前的位置。
iterator.add("77");
}
if(str.equals("3")){
//将next 方法返回的元素修改为指定的值
iterator.set("33");
}
//判断 游标的前面是否有没有遍历的元素
// iterator.hasPrevious()
//让游标往前移动一个元素的位置,并返回被跨过的元素
// iterator.previous();
// iterator.nextIndex()
// iterator.previousIndex()
System.out.println(str);
}
//从尾部往前遍历
while (iterator.hasPrevious()) {
String str = iterator.previous();
System.out.println(str);
}
System.out.println(list);
}
}