Java中的LinkedList的方法的应用
2016-12-17 17:10
447 查看
LinkedList其实也就是我们在数据结构中的链表,这种数据结构有这样的特性:
分配内存空间不是必须是连续的;
插入、删除操作很快,只要修改前后指针就OK了,时间复杂度为O(1);
访问比较慢,必须得从第一个元素开始遍历,时间复杂度为O(n);
在Java中,LinkedList提供了丰富的方法,可以模拟链式队列,链式堆栈等数据结构,为用户带来了极大的方便,下面看看这些方法的用法:
void addFirst(E e):在链表头部插入一个元素;
addLast(E e):在链表尾部添加一个元素;
void add(int index, E element):在指定位置插入一个元素。
下面是代码演示:
输出:
boolean remove(Object o):移除链表中指定的元素;
E remove(int index):移除链表中指定位置的元素;
E removeFirst():移除链表中第一个元素,与remove类似;
E removeLast():移除链表中最后一个元素;
boolean removeFirstOccurrence(Object o):移除链表中第一次出现所在位置的元素;
boolean removeLastOccurrence(Object o):移除链表中最后一次出现所在位置的元素;
输出:
E getFirst():获取第一个元素;
E getLast():获取第二个元素;
输出:
注意到了,链表前后没有产生变化。
E pop():与removeFirst一样,实际上它就是removeFirst;
E poll():查询并移除第一个元素;
输出:
通过代码示例可以看出:push,pop的操作已经很接近stack的操作了。
如果链表为空的时候,看看poll与pop是啥区别:
输出:
可以看出poll返回null,而pop则产生异常。
E peekFirst():获取第一个元素,但是不移除;
E peekLast():获取最后一个元素,但是不移除;
输出:
如果没找到对应的元素,统统输出null:
输出:
boolean offerFirst(E e):与addFirst一样,实际上它就是addFirst;
boolean offerLast(E e):与addLast一样,实际上它就是addLast;
输出:
输出:
从输出可以看出,除了set改变原linkedlist,其他几个方法都不改变原链表。
分配内存空间不是必须是连续的;
插入、删除操作很快,只要修改前后指针就OK了,时间复杂度为O(1);
访问比较慢,必须得从第一个元素开始遍历,时间复杂度为O(n);
在Java中,LinkedList提供了丰富的方法,可以模拟链式队列,链式堆栈等数据结构,为用户带来了极大的方便,下面看看这些方法的用法:
add
boolean add(E e):在链表后添加一个元素,如果成功,返回true,否则返回false;void addFirst(E e):在链表头部插入一个元素;
addLast(E e):在链表尾部添加一个元素;
void add(int index, E element):在指定位置插入一个元素。
下面是代码演示:
public class LinkedListMethodsDemo { public static void main(String[] args) { LinkedList<String> linkedList = new LinkedList<>(); linkedList.add("first"); linkedList.add("second"); linkedList.add("third"); System.out.println(linkedList); linkedList.addFirst("addFirst"); System.out.println(linkedList); linkedList.addLast("addLast"); System.out.println(linkedList); linkedList.add(2, "addByIndex"); System.out.println(linkedList); } }
输出:
[first, second, third] [addFirst, first, second, third] [addFirst, first, second, third, addLast] [addFirst, first, addByIndex, second, third, addLast]
remove
E remove();移除链表中第一个元素;boolean remove(Object o):移除链表中指定的元素;
E remove(int index):移除链表中指定位置的元素;
E removeFirst():移除链表中第一个元素,与remove类似;
E removeLast():移除链表中最后一个元素;
boolean removeFirstOccurrence(Object o):移除链表中第一次出现所在位置的元素;
boolean removeLastOccurrence(Object o):移除链表中最后一次出现所在位置的元素;
public class LinkedListMethodsDemo { public static void main(String[] args) { LinkedList<String> linkedList = new LinkedList<>(); linkedList.add("first"); linkedList.add("second"); linkedList.add("second"); linkedList.add("third"); linkedList.add("four"); linkedList.add("five"); System.out.println(linkedList); linkedList.remove(); System.out.println("remove: " + linkedList); linkedList.remove("second"); System.out.println("remove(Object): " + linkedList); linkedList.remove("six"); System.out.println("remove(Object) not exist: " + linkedList); linkedList.remove(2); System.out.println("remove(index): " + linkedList); linkedList.removeFirst(); System.out.println("removeFirst: " + linkedList); linkedList.removeLast(); System.out.println("removeLast:" + linkedList); System.out.println("----------------------------------"); linkedList.clear(); linkedList.add("first"); linkedList.add("second"); linkedList.add("first"); linkedList.add("third"); linkedList.add("first"); linkedList.add("five"); System.out.println(linkedList); linkedList.removeFirstOccurrence("first"); System.out.println("removeFirstOccurrence: " + linkedList); linkedList.removeLastOccurrence("first"); System.out.println("removeLastOccurrence: " + linkedList); } }
输出:
[first, second, second, third, four, five] remove: [second, second, third, four, five] remove(Object): [second, third, four, five] remove(Object) not exist: [second, third, four, five] remove(index): [second, third, five] removeFirst: [third, five] removeLast:[third] ---------------------------------- [first, second, first, third, first, five] removeFirstOccurrence: [second, first, third, first, five] removeLastOccurrence: [second, first, third, five]
get
E get(int index):按照下边获取元素;E getFirst():获取第一个元素;
E getLast():获取第二个元素;
public class LinkedListMethodsDemo { public static void main(String[] args) { LinkedList<String> linkedList = new LinkedList<>(); linkedList.add("first"); linkedList.add("second"); linkedList.add("second"); linkedList.add("third"); linkedList.add("four"); linkedList.add("five"); System.out.println(linkedList); linkedList.get(3); System.out.println("get(index): " + linkedList.get(3)); linkedList.getFirst(); System.out.println("getFirst: " + linkedList.getFirst()); linkedList.getLast(); System.out.println("getLast: " + linkedList.getLast()); System.out.println(linkedList); } }
输出:
[first, second, second, third, four, five] get(index): third getFirst: first getLast: five [first, second, second, third, four, five]
注意到了,链表前后没有产生变化。
push、pop、poll
void push(E e):与addFirst一样,实际上它就是addFirst;E pop():与removeFirst一样,实际上它就是removeFirst;
E poll():查询并移除第一个元素;
public class LinkedListMethodsDemo { public static void main(String[] args) { LinkedList<String> linkedList = new LinkedList<>(); linkedList.push("first"); linkedList.push("second"); linkedList.push("second"); linkedList.push("third"); linkedList.push("four"); linkedList.push("five"); System.out.println("linkedList: " + linkedList); System.out.println("pop: " + linkedList.pop()); System.out.println("after pop: " + linkedList); System.out.println("poll: " + linkedList.poll()); System.out.println("after poll: " + linkedList); } }
输出:
linkedList: [five, four, third, second, second, first] pop: five after pop: [four, third, second, second, first] poll: four after poll: [third, second, second, first]
通过代码示例可以看出:push,pop的操作已经很接近stack的操作了。
如果链表为空的时候,看看poll与pop是啥区别:
public class LinkedListMethodsDemo { public static void main(String[] args) { LinkedList<String> linkedList = new LinkedList<>(); System.out.println("poll: " + linkedList.poll()); System.out.println("pop: " + linkedList.pop()); } }
输出:
poll: null Exception in thread "main" java.util.NoSuchElementException at java.util.LinkedList.removeFirst(LinkedList.java:270) at java.util.LinkedList.pop(LinkedList.java:801) at org.ks.algorithm.LinkedListMethodsDemo.main(LinkedListMethodsDemo.java:13) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
可以看出poll返回null,而pop则产生异常。
peek
E peek():获取第一个元素,但是不移除;E peekFirst():获取第一个元素,但是不移除;
E peekLast():获取最后一个元素,但是不移除;
public class LinkedListMethodsDemo { public static void main(String[] args) { LinkedList<String> linkedList = new LinkedList<>(); linkedList.push("first"); linkedList.push("second"); linkedList.push("second"); linkedList.push("third"); linkedList.push("four"); linkedList.push("five"); System.out.println("linkedList: " + linkedList); System.out.println("peek: " + linkedList.peek()); System.out.println("peekFirst: " + linkedList.peekFirst()); System.out.println("peekLast: " + linkedList.peekLast()); System.out.println("linkedList: " + linkedList); } }
输出:
linkedList: [five, four, third, second, second, first] peek: five peekFirst: five peekLast: first linkedList: [five, four, third, second, second, first]
如果没找到对应的元素,统统输出null:
public class LinkedListMethodsDemo { public static void main(String[] args) { LinkedList<String> linkedList = new LinkedList<>(); System.out.println("linkedList: " + linkedList); System.out.println("peek: " + linkedList.peek()); System.out.println("peekFirst: " + linkedList.peekFirst()); System.out.println("peekLast: " + linkedList.peekLast()); } }
输出:
linkedList: [] peek: null peekFirst: null peekLast: null
offer
boolean offer(E e):在链表尾部插入一个元素;boolean offerFirst(E e):与addFirst一样,实际上它就是addFirst;
boolean offerLast(E e):与addLast一样,实际上它就是addLast;
public class LinkedListMethodsDemo { public static void main(String[] args) { LinkedList<String> linkedList = new LinkedList<>(); linkedList.push("first"); linkedList.push("second"); linkedList.push("second"); linkedList.push("third"); linkedList.push("four"); linkedList.push("five"); System.out.println("linkedList: " + linkedList); linkedList.offer("six"); System.out.println("linkedList: " + linkedList); linkedList.offerFirst("zero"); System.out.println("linkedList: " + linkedList); linkedList.offerLast("seven"); System.out.println("linkedList: " + linkedList); } }
输出:
linkedList: [five, four, third, second, second, first] linkedList: [five, four, third, second, second, first, six] linkedList: [zero, five, four, third, second, second, first, six] linkedList: [zero, five, four, third, second, second, first, six, seven]
其他
LinkedList中常用的方法基本都列出来了,当然还有一些其他的例子,这里就一起演示了:public class LinkedListMethodsDemo { public static void main(String[] args) { LinkedList<String> linkedList = new LinkedList<>(); linkedList.push("first"); linkedList.push("second"); linkedList.push("second"); linkedList.push("third"); linkedList.push("four"); linkedList.push("five"); System.out.println("linkedList: " + linkedList); System.out.println("linkedList.contains(\"second\"): " + linkedList.contains("second")); System.out.println("linkedList.contains(\"six\"): " + linkedList.contains("six")); System.out.println("linkedList.element(): " + linkedList.element()); System.out.println("linkedList: " + linkedList); System.out.println("linkedList.set(3, \"set\"): " + linkedList.set(3, "set")); System.out.println("linkedList: " + linkedList); System.out.println("linkedList.subList(2,4): " + linkedList.subList(2,4)); System.out.println("linkedList: " + linkedList); } }
输出:
linkedList: [five, four, third, second, second, first] linkedList.contains("second"): true linkedList.contains("six"): false linkedList.element(): five linkedList: [five, four, third, second, second, first] linkedList.set(3, "set"): second linkedList: [five, four, third, set, second, first] linkedList.subList(2,4): [third, set] linkedList: [five, four, third, set, second, first]
从输出可以看出,除了set改变原linkedlist,其他几个方法都不改变原链表。
相关文章推荐
- Java学习笔记(七)——获取类中方法的信息,java的LinkedList
- java 程序语言中的LinkedList 集合基本方法演示
- java 集合之实现类ArrayList和LinkedList的方法
- JAVA学习中的一点小发现:LinkedList中.poll()方法在输出时使用应注意的小点
- java中unmodifiableList方法的应用场景
- Java 深入学习(2) —— ArrayList、LinkedList、Vector 应用场景与性能分析
- Java 用Collections.addAll()方法给Stack和LinkedList添加元素,结果不同
- java LinkedList的使用方法介绍
- Java中应用Collections工具类的Sort()方法对List进行排序
- Java LinkedList特有方法程序小解 && 使用LinkedList 模拟一个堆栈或者队列数据结构。
- Java中list接口的方法和list接口的实现类LinkedList,Vecotr以及队列和栈结构
- [bxd学习java基本点]7.linkedList方法,remove移走的要显示元素
- Java基础 集合框架 共性方法 迭代器 ArrayList LinkedList Vector HashSet TreeSet
- JAVA Linkedlist易混淆的方法
- Java之集合框架 List接口的特有方法、迭代器的并发修改异常以及LinkedList特有方法
- Java学习笔记之集合(四):LinkedList集合的特点和常用方法
- 浅谈java中unmodifiableList方法的应用场景
- 解析Java中的队列和用LinkedList集合模拟队列的方法
- [Java] LinkedList 的简单使用方法
- java LinkedList的使用方法介绍