Java_容器2-2_LinkedList源码编写
2018-08-04 21:48
316 查看
LinkeList底层是由链表实现的,查询慢,但增删改比较方便
以下是本人画的链表草图(滑稽脸):
1、加元素
[code]/* * 测试加元素 重点!!! */ public void add(Object obj) { if(first == null) { //第一个为空 Node n = new Node(); n.previous = null; n.next = null; first = n; last = n; }else { //直接往last后面增加新的节点 Node n = new Node(); //new一个新的节点 n.setPrevious(last); //新节点的头连接的是是最后一个 n.setObj(obj); //n 为值 n.setNext(null); //新节点的尾连接的是是空 last.setNext(n); //last的下一个是 n last = n; //最后一个为 n } size++; //每增加一个,size就多加一个 } public int size() { return size; }
分析:①如果链表为空,即第一个链表的内容是空,则说明n.next和n.previous的内容为空,所以第一个和最后一个都是n;
②如果链表里面有内容,则第一个链表的内容不为空,则需要往last后面添加新的节点:新节点的头连接的是最后一个,内容是新家的元素,新节点的尾是空,同时,last的下一个是n。
2、在指定位置加元素
[code]/* * 在指定位置添加元素 重点!! */ public void add(int index,Object obj) { Node temp = null; //指针,所在的节点 if(first != null) { temp = first; //temp遍历的对象,从第一个开始遍历。 for(int i = 0;i<index;i++) { temp = temp.next; //把下一个赋给自己 } } Node newNode = new Node(); newNode.obj = obj; if(temp !=null ) { Node up = temp.previous; //temp为原节点 up.next = newNode; newNode.previous = up; newNode.next = temp; temp.previous = newNode; size++; } }
分析:遍历,寻找为index的索引;
原节点的上一个节点(up)的下一个是新节点(newNode),新节点的上一个是up;
新节点的下一个节点是原节点,原节点的上一个是新节点。
3、get方法
[code]/* * 测试get */ public Object get(int index) { rangeCheck1(index); Node temp = null; //指针,所在的节点 if(first != null) { temp = first; //temp遍历的对象,从第一个开始遍历。 for(int i = 0;i<index;i++) { temp = temp.next; //把下一个赋给自己 } } return temp.obj; }
比较简单,在此就不分析了
4、删除指定位置的元素
[code]/* * 删除指定位置的对象 */ public void remove(int index) { Node temp = null; //指针,所在的节点 if(first != null) { temp = first; //temp遍历的对象,从第一个开始遍历。 for(int i = 0;i<index;i++) { temp = temp.next; //把下一个赋给自己 } } if(temp != null) { Node up = temp.previous; Node down = temp.next; up.next = down; down.previous = up; } size--; }
分析:遍历找出为index的索引
原节点的上一个(up)的下一个是连接下一个(down);
原节点得下一个节点连接上一个
阅读更多相关文章推荐
- java非并发容器ArrayList 和 LinkedList 优缺点比较及其实现源码分析
- java容器源码分析--LinkedList(JDK1.8)
- Java集合源码分析(三)LinkedList
- 浅析Java源码之LinkedList
- JDK1.8源码(二)——java.util.LinkedList
- JDK源码走读(4):容器之LinkedList
- Java中arraylist和linkedlist源码分析与性能比较
- java源码分析之LinkedList
- Java -- 基于JDK1.8的LinkedList源码分析
- java ArrayList 和 LinkedList 源码解析比较
- Java记录 -49- LinkedList源码剖析
- Java 集合体系之 LinkedList 源码分析
- LinkedList源码解析 给jdk写注释系列之jdk1.6容器(2)
- 深入Java源码解析容器类List、Set、Map
- java集合(3):LinkedList源码分析
- linkedlist源码解析(java)
- Java LinkedList详解源码研究
- java双向链接表LinkedList的编写模拟实现
- java集合源码分析之Linkedlist
- Java之LinkedList源码解读(JDK 1.8)