LinkList学习-双向链表机构

for顺序遍历耗时 > iterator迭代器遍历耗时 > 通过removeFirst()或removeLast()遍历耗时 > forach顺序遍历耗时 = 通过pollFirst()或pollLast()来遍历耗时。

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.LinkedList;

public class Test {
    
    public static void main(String[] args) {
        //创建存放int类型的linkedList
        LinkedList linkedList = new LinkedList();
        for(int i = 20;i < 100;i ++) {
            linkedList.add(i);
        }
        //添加元素到列表开头
        linkedList.addFirst(0);
        System.out.println("添加元素到列表开头:"+linkedList);
        //在列表结尾添加元素,同linkedList.add()同inkedList.offer()
        linkedList.addLast(9);
        System.out.println("添加元素到列表结尾:"+linkedList);
        //在指定位置添加元素
        linkedList.add(1, 1);
        System.out.println("在指定位置添加元素:"+linkedList);
        //获得第一个元素
        System.out.println("获得第一个元素:"+linkedList.getFirst());
        //获得第最后一个元素
        System.out.println("获得最后一个元素:"+linkedList.getLast());
        //删除第一个元素并返回删除的元素
        System.out.println("删除第一个元素:"+linkedList.removeFirst());
        //删除最后一个元素并返回删除的元素
        System.out.println("删除第一个元素:"+linkedList.removeLast());
        //判断是否指定元素
        System.out.println("判断是否指定元素:"+linkedList.contains(3));
        //将列表中指定位置的元素替换为指定的元素
        linkedList.set(0, 999);
        System.out.println("将列表中指定位置的元素替换为指定的元素:"+linkedList);
        //获得指定位置的元素
        System.out.println("获得指定位置的元素:"+linkedList.get(0));
        //获取首次出现的指定元素的索引
        System.out.println("获取首次出现的指定元素的索引:"+linkedList.indexOf(999));
        //获取最后一次次出现的指定元素的索引
        System.out.println("获取最后一次出现的指定元素的索引:"+linkedList.lastIndexOf(5));
        //获取第一个元素但不移除此列表的第一个元素
        System.out.println("peek(): " + linkedList.peek());
        System.out.println("element(): " + linkedList.element());
        //移除第一个元素
        System.out.println("poll(): " + linkedList.poll());
        System.out.println("集合: " + linkedList);
        System.out.println("remove():" + linkedList.remove());
        System.out.println("集合: " + linkedList);
        //在此列表的开头插入指定的元素
        linkedList.offerFirst(6); 
        System.out.println("集合: " + linkedList);
        //在此列表末尾插入指定的元素
        linkedList.offerLast(6);
        System.out.println("集合: " + linkedList);
        //获取但不移除此列表的第一个元素
        System.out.println("peekFirst(): " + linkedList.peekFirst());
        //获取但不移除此列表的最后一个元素
        System.out.println("peekLast(): " + linkedList.peekLast());
        //获取并移除此列表的第一个元素
        linkedList.pollFirst(); 
        System.out.println("pollFirst():" + linkedList);
        //获取并移除此列表的最后一个元素
        linkedList.pollLast(); 
        System.out.println("pollLast():" + linkedList);
        //将元素推入此列表所表示的堆栈(插入到列表的头)
        linkedList.push(6);
        System.out.println("push():" + linkedList);
        //从此列表所表示的堆栈处弹出一个元素(获取并移除列表第一个元素)
        linkedList.pop();
        System.out.println("pop():" + linkedList);
        //从此列表中移除第一次出现的指定元素(从头部到尾部遍历列表)
        linkedList.push(999);
        linkedList.push(888);
        linkedList.push(999);
        System.out.println("开始removeFirstOccurrence()前:" + linkedList);
        linkedList.removeFirstOccurrence(999); 
        System.out.println("removeFirstOccurrence():" + linkedList);
        //从此列表中移除最后一次出现的指定元素(从尾部到头部遍历列表)
        linkedList.push(999);
        linkedList.push(888);
        linkedList.push(999);
        System.out.println("开始removeFirstOccurrence()前:" + linkedList);
        linkedList.removeLastOccurrence(888);
        System.out.println("removeFirstOccurrence():" + linkedList);
        //清空所有元素
        linkedList.clear();
        for (int i = 0; i < 10000; i++) {
            linkedList.add(i);
        }
        //迭代器遍历
        Iterator iterator = linkedList.iterator();
        long start = System.currentTimeMillis();
        StringBuffer stringBuffer = new StringBuffer();
        while (iterator.hasNext()) {
            stringBuffer.append(iterator.next());
        }
        long end = System.currentTimeMillis();
        System.out.println("iterator迭代器遍历耗时:" + (end - start) + "ms");
        //顺序遍历
        start = System.currentTimeMillis();
        for (int i = 0; i < linkedList.size(); i++) {
            linkedList.get(i);
        }
        end = System.currentTimeMillis();
        System.out.println("for顺序遍历耗时:" + (end - start) + "ms");
        //顺序遍历
        start = System.currentTimeMillis();
        stringBuffer = new StringBuffer();
        for (Integer integer:linkedList) {
            stringBuffer.append(integer);
        }
        end = System.currentTimeMillis();
        System.out.println("forach顺序遍历耗时:" + (end - start) + "ms");
        //通过pollFirst()或pollLast()来遍历LinkedList
        LinkedList integers = new LinkedList();
        integers.addAll(linkedList);
        start = System.currentTimeMillis();
        stringBuffer = new StringBuffer();
        while (integers.size() != 0) {
            stringBuffer.append(integers.pollFirst());
        }
        end = System.currentTimeMillis();
        System.out.println("通过pollFirst()或pollLast()遍历耗时:" + (end - start) + "ms");
        //通过removeFirst()或removeLast()来遍历LinkedList
        LinkedList integers2 = new LinkedList();
        integers2.addAll(linkedList);
        start = System.currentTimeMillis();
        stringBuffer = new StringBuffer();
        while (integers2.size() != 0) {
            stringBuffer.append(integers2.removeFirst());
        }
        end = System.currentTimeMillis();
        System.out.println("通过removeFirst()或removeLast()遍历耗时:" + (end - start) + "ms");
        
    }
}
View Code

你可能感兴趣的:(LinkList学习-双向链表机构)