java提高篇之LinkedList的实现
2017-05-12 11:34
239 查看
本篇的目的主要是自己去实现双向链表以能够更好的理解LinkedList。
首先定义一个Node类
具体实现
首先定义一个Node类
package com.wonglar.linkedlist; public class Node { //前一个结点 private Node previous; //结点中的对象 private Object obj; //后一个结点 private Node next; public Node() { } public Node(Node previous, Object obj, Node next) { this.previous = previous; this.obj = obj; this.next = next; } public Node getPrevious() { return previous; } public void setPrevious(Node previous) { this.previous = previous; } public Object getObj() { return obj; } public void setObj(Object obj) { this.obj = obj; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } }
具体实现
package com.wonglar.linkedlist; public class ImplLinkedList { // 第一个结点 private Node first; // 最后一个结点 private Node last; // 链表中元素个数 private int size; /** * 向链表中添加元素 * * @param obj * :待添加的元素 */ public void add(Object obj) { Node n = new Node(); if (first == null) { n.setPrevious(null); n.setObj(obj); n.setNext(null); // 当链表中一个元素都没有的时候 // 添加一个元素,这个元素即是第一个元素,又是最后一个元素 first = n; last = n; } else { // 当链表中有元素了,即往last后面添加 n.setPrevious(last); n.setObj(obj); n.setNext(null); // 此时last已不是最后一个元素 last.setNext(n); // 将新添加的元素置为last last = n; } size++; } /** * 通过索引得到元素 * * @param index * :待得到元素的索引 * @return */ public Object get(int index) { rangeCheck(index); Node temp = first; for (int i = 0; i < index; i++) { temp = temp.getNext(); } return temp.getObj(); } /** * 根据索引,修改元素的值 * * @param index * :待修改元素索引 * @param element * :修改后的元素的值 */ public void set(int index, Object element) { rangeCheck(index); Node temp = first; for (int i = 0; i < index; i++) { temp = temp.getNext(); } temp.setObj(element); } /** * 根据索引删除链表中的元素 * * @param index * :待删除元素的索引 * @return :删除掉的元素值 */ public Object remove(int index) { rangeCheck(index); Node temp = this.first; Node last = this.last; // 如果删除第一个元素,需要将第一个元素的指向后一个结点的值设为null // 将它的下一个元素的指向头一个结点的值设为null,然后将第二个元素赋于first if (index == 0) { Node down = temp.getNext(); down.setPrevious(null); first.setNext(null); first = down; } else if (index == size - 1) { temp = last; Node up = last.getPrevious(); last.setPrevious(null); up.setNext(null); this.last = up; } else { for (int i = 0; i < index; i++) { temp = temp.getNext(); } Node up = temp.getPrevious(); Node down = temp.getNext(); up.setNext(down); down.setPrevious(up); } size--; return temp.getObj(); } /** * 根据元素值删除链表中的元素 * @param o :待删除的元素 * @return :是否删除成功 */ public boolean remove(Object o){ Node temp = this.first; if(o==null){ for (int index = 0; index < this.size; index++) { if(temp.getObj()==null){ //执行删除操作 remove(index); return true; } temp = temp.getNext(); } }else{ for (int index = 0; index < this.size; index++) { if(temp.getObj().equals(o)){ remove(index); return true; } temp = temp.getNext(); } } return false; } /** * 检查索引是否越界 * * @param index */ private void rangeCheck(int index) { if (index < 0 || index >= size) { throw new IndexOutOfBoundsException("索引越界异常:index:" + index + ",size:" + size); } } /** * 返回链表中元素个数 * * @return */ public int size() { return size; } }
相关文章推荐
- 用java.util.*中的LinkedList实现stack
- 基于“用java.util.*中的LinkedList实现stack” 2.0版
- Java使用Arrays、ArrayList、LinkedList、Vector实现插入查询性能分析
- 【如何提高Java代码质量:频繁插入和删除时使用LinkedList 】
- JAVA学习笔记(十)基于LinkedList实现栈和队列
- java 利用 LinkedList类实现 数据结构 栈.......
- Java用LinkedList实现栈
- java学习笔记—自定义实现linkedList集合
- Java:基于LinkedList实现栈和队列
- Java:基于LinkedList实现栈和队列
- java 利用 LinkedList类实现 数据结构 栈.......
- Java(LinkedList) 队列的小实现
- java LinkedList类实现 队列
- Java中用LinkedList实现栈和队列
- 数据结构(LinkedList的java实现)
- java LinkedList类实现 队列
- 举例说明如何用java中的LinkedList实现队列
- Doubly linked list的java实现
- Java实现栈一:通过LinkedList实现
- 循环双链表之Java实现(模拟JDK中LinkedList)