LinkedList一样实现了list接口但是和ArrayList又有所不同。下边先解读一下LinkedList
实习了List接口,就有了add,remove等方法具体参考ArrayList。但是LinkedList还实现了Deque接口,双向链表结构,这是链表结构的根本,下边上代码,展示其用法。
package collection;
import java.util.LinkedList;
import charactor.User;
public class TestCollection {
public static void main(String[] args) {
//LinkedList是一个双向链表结构的list
LinkedList<User> ll =new LinkedList<User>();
//可以很方便的在头部和尾部插入数据
//在尾部插入新的元素
ll.addLast(new User("User1"));
ll.addLast(new User("User2"));
ll.addLast(new User("User3"));
System.out.println(ll);
//在头部插入新的元素
ll.addFirst(new User("UserX"));
System.out.println(ll);
//查看头部的元素
System.out.println(ll.getFirst());
//查看尾部的元素
System.out.println(ll.getLast());
//查看不会导致元素被删除
System.out.println(ll);
//取出头部的元素
System.out.println(ll.removeFirst());
//取出尾部的元素
System.out.println(ll.removeLast());
//取出会导致元素被删除
System.out.println(ll);
}
}
不仅实现了List和Deque,还实现了接口Queue(先进先出的队列)。
offer:在尾部添加元素
poll:取出头部的元素
peek:查看头部的元素
代码如下:
package collection;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import charactor.User;
public class TestCollection {
public static void main(String[] args) {
//Queue代表FIFO 先进先出的队列
Queue<User> q= new LinkedList<User>();
//加在队列的最后面
System.out.print("初始化队列:\t");
q.offer(new User("User1"));
q.offer(new User("User2"));
q.offer(new User("User3"));
q.offer(new User("User4"));
System.out.println(q);
System.out.print("把第一个元素取poll()出来:\t");
//取出第一个User
User h = q.poll();
System.out.println(h);
System.out.print("取出第一个元素之后的队列:\t");
System.out.println(q);
//把第一个拿出来看一看,但是不取出来
h=q.peek();
System.out.print("查看peek()第一个元素:\t");
System.out.println(h);
System.out.print("查看并不会导致第一个元素被取出来:\t");
System.out.println(q);
}
}
链表结构定位查询很慢,需要从头慢慢执行直到找到目标,但是增删的时候只需要改动增删位置两边的数据就可以了。
ArrayList相反,因为元素都有下标所以定位查询快,而只要改动其中的元素就需要改动目标元素后边所有的元素,所以增删是慢的。
总结起来LinkedList是增删快,查询慢
LinkedList是增删慢,查询快。