集合LinkedList的底層是由鏈表來實現的,因此可以根據源碼仿寫個
package sxt.gaoqi.container;
public class JsLinkedList<E>
{
private Node first;
private Node last;
private int size;
public void add(E obj)
{
Node node = new Node(obj);
if(first == null)
{
first = node;
last = node;
}
else
{
node.previous = last;
node.next = null;
last.next = node;
last = node;
}
size++;
}
public void add(int index, E obj)
{
Node newNode = new Node(obj);
Node temp = getNode(index);
if(temp != null)
{
Node up = temp.previous;
up.next = newNode;
newNode.previous = up;
newNode.next = temp;
temp.previous = newNode;
size++;
}
}
public E get(int index)
{
checkRange(index);
Node temp = getNode(index);
return temp != null ? (E)temp.element:null;
}
public Node getNode(int index)
{
checkRange(index);
Node temp;
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 void remove(int index)
{
Node temp = getNode(index);
if(temp != null)
{
if(temp.next != null)
{
temp.next.previous = temp.previous;
}
if(temp.previous != null)
{
temp.previous.next = temp.next;
}
if(index == 0)
{
first = temp.next;
}
if(index == size - 1)
{
last = temp.previous;
}
size--;
}
}
private void checkRange(int index)
{
checkRange(index);
}
@Override
public String toString()
{
StringBuilder sb = new StringBuilder();
sb.append("[");
Node temp = first;
while(temp != null)
{
sb.append(temp.element + ",");
temp = temp.next;
}
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
}
public static void main(String[] args)
{
JsLinkedList<String> list = new JsLinkedList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add(4, "bb");
System.out.println(list);
}
}
package sxt.gaoqi.container;
public class Node
{
Node previous; //上一個節點
Node next; //下一個節點
Object element; //元素數據
public Node(Node previous, Node next, Object element)
{
this.previous = previous;
this.next = next;
this.element = element;
}
public Node(Object element)
{
this.element = element;
}
}