LinkedList的底层是基于链表实现的,所以查询慢,增删改快,但是线程不安全,效率较高。
LinkedList类
/**
* remove方法
* add方法
* get方法
* getNode方法
* @author HQ
* @e-mail ahmashq95@gmail.com
* @date 2018/11/2.
*/
public class LinkedList01 {
private Node first;
private Node last;
private int size;
public void remove(int index) {
Node temp = getNode(index);
if (temp != null) {
Node up = temp.previous;
Node down = temp.next;
if (up != null) {
up.next = down;
}
if (down != null) {
down.previous = up;
}
//被删除的元素是第一个元素时
if(index==0){
first=down;
}
//被删除的元素是最后一个元素时
if(index==size-1){
last=up;
}
size--;
}
}
// [ ]
//["a","b"]
public void add(Object object) {
Node node = new Node(object);
if (first == null) {
node.previous = null;
node.next = null;
first = node;
last = node;
} else {
node.previous = last;
node.next = null;
last.next = node;
last = node;
}
size++;
}
@Override
public String toString() {
StringBuilder stringBuilder = new StringBuilder("[");
Node temp = first;
while (temp != null) {
stringBuilder.append(temp.element + ",");
temp = temp.next;
}
stringBuilder.setCharAt(stringBuilder.length() - 1, ']');
return stringBuilder.toString();
}
public Object get(int index) {
if (index < 0 || index > size - 1) {
throw new RuntimeException("索引位置不合法" + index);
}
Node temp = getNode(index);
return temp != null ? temp.element : null;
}
public Node getNode(int index) {
Node temp = null;
//size>>1 相当于除以2
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.previous;
}
}
return temp;
}
public static void main(String[] args) {
LinkedList01 list01 = new LinkedList01();
list01.add("a");
list01.add("b");
list01.add("c");
list01.add("d");
list01.add("e");
list01.add("f");
System.out.println(list01);
System.out.println("------------");
list01.remove(0);
System.out.println(list01);
System.out.println(list01.size);
System.out.println("------------");
list01.remove(0);
System.out.println(list01);
System.out.println(list01.size);
System.out.println("------------");
list01.remove(0);
System.out.println(list01);
System.out.println(list01.size);
}
}
Node类
/**
* @author HQ
* @e-mail ahmashq95@gmail.com
* @date 2018/11/2.
*/
public class Node {
Node previous;//Last Node
Node next;//next Node
Object element;
public Node(Node previous, Node next, Object element) {
super();
this.previous = previous;
this.next = next;
this.element = element;
}
public Node(Object element) {
this.element = element;
}
}