简单实现一个LinkedList的增删改查
2019-06-19 11:36
246 查看
简单实现一个LinkedList的增删改查
LinkedList简介
LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。
LinkedList 实现 List 接口,能对它进行队列操作。
LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。
LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。
LinkedList 实现java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。
LinkedList 是非同步的。
LinkedList底层用双向链表实现的存储,特点是查询效率低,增删效率高,线程不安全。
LinkedList代码实现:
Node.java
package LLT;
public class Node {
Node pre;
Node next;
Object obj;
public Node(Node pre, Node next, Object obj) { super(); this.pre = pre; this.next = next; this.obj = obj; } public Node(Object obj) { super(); this.obj = obj; }
}
TLinkedList.java
package LLT;
public class TLinkedList {
private Node first;
private Node last;
private int size;
public void add(Object obj) { Node node = new Node(obj); if (first == null) { node.pre = null; node.next = null; first = node; last = node; } else { node.pre = last; node.next = null; last.next = node; last = node; } size++; } public Object get(int index) { if (index < 0 || index > size - 1) { throw new RuntimeException("索引数字不合法" + index); } Node temp = null; if (index <= (size >> 1)) { temp = first; for (int i = 0; i < index; i++) { temp = temp.next; } } else { temp = last; for (int i = size - 1; i > index; i--) { temp = temp.pre; } } return temp.obj; } public Node getNode(int index) { Node temp = null; if (index <= (size >> 1)) { temp = first; for (int i = 0; i < index; i++) { temp = temp.next; } } else { temp = last; for (int i = size - 1; i > index; i--) { temp = temp.pre; } } return temp; } public void remove(int index) { Node temp = getNode(index); if (temp != null) { Node up = temp.pre; Node down = temp.next; if (up != null) { up.next = down; } if (down != null) { down.pre = up; } if (index == 0) { first = down; } if (index == size - 1) { last = up; } size--; } } public int size() { return size; } public void add(int index, Object obj) { Node node = new Node(obj); Node temp = getNode(index); if (temp != null) { Node up = temp.pre; up.next = node; node.pre = up; temp.pre = node; node.next = temp; size++; } } public void set(int index, Object obj) { Node temp = getNode(index); temp.obj = obj; }
}
相关文章推荐
- 如何实现Java中一个简单的LinkedList
- 自己动手系列——实现一个简单的LinkedList
- 数据结构: Java中LinkedList的简单实现
- 使用list实现一个简单的Listener管理
- Java中的LinkedList简单实现
- Java 集合的简单实现 (ArrayList & LinkedList & Queue & Stack)
- 数据结构之LinkedList的简单实现
- 一个LinkedList的简单体现(用户缓存手机通话记录)
- LinkedList 实现栈与队列,比较简单
- 数据结构(Java语言)——LinkedList简单实现
- 一个简单的WeakList的实现
- 实现一个快速简单的SimpleListDialog<T>
- 自己动手系列——实现一个简单的LinkedLis
- 【讨论思考】可不可以不用pointer而实现一个linked list?
- 简单实现 linkedList 双向链表
- 自己动手系列——实现一个简单的LinkedLis
- LinkedList双链表简单分析,及单链表的实现代码
- Android实现一个简单的SQLite数据库的增删改查
- 根据链表的原理,自己实现一个简易版的LinkedList
- ArrayList和LinkedList的简单实现