1. java中LinkedList是单链表实现还是双链表实现?
2. java中LinkedList节点元素的结构是怎样的?
3. java中LinkedList的get(int index)方法是如何实现的?以及add()方法是如何实现的?
java中LinkedList是单链表实现还是双链表实现?
java中LinkedList节点元素的结构是怎样的?
1 | private static class Node<E> { |
以上diamante截取自jdk8的LinkedList类,它是LinkedList类中节点元素,可以看出java中LinkedList是双链表实现的,因为静态内部类Node有两个指针,一个指向父节点,一个指向子节点(问题1,2自解)
java中LinkedList的get(int index)方法是如何实现的?以及add()方法是如何实现的?
1 | public boolean add(E e) { |
从上面这段代码可以看出,当调用LinkedList的add(E)方法插入元素时,默认插入链表的末尾;当调用LinkedList的add(int, E)方法在指定位置插入元素时,通过node(int index)方法遍历链表,找到该索引位置的元素节点(在查找时用到了折半的思想,当索引小于size的一半时从前向后遍历,否则从后向前遍历),然后做节点的插入
1 | public E get(int index) { |
从上面这段代码可以看出,java中LinkedList的get(int index)方法查询元素时,会通过node(int index)方法遍历链表找到对应位置的元素节点(上一段代码有给出node方法的源码),并返回其值
Java中LinkedList的UML类图