今天疫情有所好轉 十五的月亮 十六圓 晚上記得看月亮啊
自己的粗略見解 有問題可以隨時指出 多多進步
LinkedList 底層爲鏈表結構
首先先要明白何爲鏈表結構 如圖下
基本是上圖這個意思 每個節點代碼可以:
public class Node {
private Node previous;
private Node next;
private Object element;
public Node(Object element) {
this.element = element;
}
public Node getPrevious() {
return previous;
}
public void setPrevious(Node previous) {
this.previous = previous;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
public Object getElement() {
return element;
}
public void setElement(Object element) {
this.element = element;
}
}
這是手寫的部分源碼 可以參考下自己寫寫
比較簡答的功能
public class MyLinkedList<E> {
private Node first;
private Node end;
private int size;
public void add(E element){
Node node = new Node(element);
if(first == null){
first =node;
end =node;
}else{
node.setPrevious(end);
node.setNext(null);
end.setNext(node);
end = node;
}
size++;
}
public void add(int index,E element){
checkRange(index);
Node node = getNode(index);
Node newNode = new Node(element);
if(node != null){
Node up = node.getPrevious();
if(up !=null){
up.setNext(newNode);
}
node.setPrevious(newNode);
newNode.setNext(node);
if(index ==0){
first.setPrevious(newNode);
newNode.setNext(first);
first =newNode;
}
if(index == size-1){
end = newNode;
}
size++;
}
}
public Object get(int index){
Node temp = getNode(index);
return temp==null?null : temp.getElement();
}
private void checkRange(int index){
if(index<0 || index>size-1){
throw new RuntimeException("下標越界"+index);
}
}
private Node getNode(int index){
Node temp = null;
checkRange(index);
if(index<size>>1){
temp =first;
for (int i = 0; i <index; i++) {
temp = temp.getNext();
}
}else{
temp =end;
for (int i = size-1; i>index; i--) {
temp = temp.getPrevious();
}
}
return temp;
}
public void remove(int index){
checkRange(index);
Node node = getNode(index);
if(node != null) {
Node up = node.getPrevious();
Node down = node.getNext();
if (up != null) {
up.setNext(down);
}
if (down != null) {
down.setPrevious(up);
}
if (index == 0) {
first = down;
}
if (index == size - 1) {
end = up;
}
}
}
@Override
public String toString() {
Node temp = first;
StringBuilder strb = new StringBuilder("[");
while (temp!=null){
strb.append(temp.getElement()+",");
temp =temp.getNext();
}
strb.setCharAt(strb.length()-1,']');
return strb.toString();
}
}