集合List下有2個子類,分別為ArrayList和LinkedList。 ArrayList:裡面實際為數組,動態大小。即創建ArrayList時自動創建數組大小,在後續添加數據時,數組長度不夠,會自動進行擴容。連續記憶體,增修查快、刪除慢。下方分別是圖形展示和部分實現代碼。 1 public cl ...
集合List下有2個子類,分別為ArrayList和LinkedList。
ArrayList:裡面實際為數組,動態大小。即創建ArrayList時自動創建數組大小,在後續添加數據時,數組長度不夠,會自動進行擴容。連續記憶體,增修查快、刪除慢。下方分別是圖形展示和部分實現代碼。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class MyArrayList { 2 3 Object[] objs = new Object[4]; 4 5 int size = 0; 6 7 public void add(Object value) { 8 9 //判斷容量是否足夠大,不夠進行擴容 10 if(size >= objs.length) { 11 Object[] temp = new Object[objs.length*2]; 12 13 for(int i=0; i<objs.length; i++) { 14 temp[i] = objs[i]; 15 } 16 } 17 18 objs[size] = value; 19 size++; 20 } 21 22 }View Code
LinkedList:是不連續的記憶體,由數組和下一個結點的地址組成,頭會特別標記,增修查慢、刪除快。下方分別是圖形展示和部分實現代碼。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 //LinkedList中需要使用 2 public class MyNode { 3 4 Object value; //數據 5 6 MyNode next; 7 8 public MyNode(Object value) { 9 this.value = value; 10 } 11 12 public Object getValue() { 13 return value; 14 } 15 16 public void setValue(Object value) { 17 this.value = value; 18 } 19 20 public MyNode getNext() { 21 return next; 22 } 23 24 public void setNext(MyNode next) { 25 this.next = next; 26 } 27 28 }View Code
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public class MyLinkedList { 2 3 int size = 0; 4 //換門標記第一個元素 5 MyNode head = null; 6 7 public void add(Object value) { 8 MyNode node = new MyNode(value); 9 10 if(null == head) { 11 head = node; 12 }else { 13 MyNode temp = head; 14 15 //得到最後一個結點,並把新的結點追加進去 16 while(null != temp.getNext()) { 17 temp = temp.getNext(); 18 } 19 temp.setValue(value); 20 } 21 } 22 }View Code