今天昨天學了集合框架,但是在List接口下有兩個子類涉及到了鏈表,書上又提到了一個關鍵的詞“雙向循環鏈表”,折騰了一整天終於搞懂了。
首先我們得明白什么是鏈表,鏈表是環環相扣的一組數據,而我們常用的數組就是一組順序鏈表,在分配內存時內存將對數組分配一組”連續的內存空間“而這個內存空間是固定的是程序啟動前就設定好的大小,但是這樣做的弊端就是當對數組分配1000的內存空間若只用了很少的一部分多余的部分也會占用內存,但是單鏈表很好的解決了這一問題。
單鏈表
鏈表內部的存儲實現是利用遞歸的方式進行儲存的,鏈表中的每一個對象都是一個節點(Node),而每個節點對象中都存在一個數據對象(data)和存儲下一個節點對象的節點對象(next),利用next節點對象實現鏈表之間的遞歸和關聯。
代碼如下:
先創建一個節點對象類
package 單鏈表的實現; public class Node{ public Object data;//用來存儲對象數據 public Node next;//用來存儲下一個節點對象 }再創建一個list用來實現單鏈表
package 單鏈表的子我實現; import java.util.Collection; import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import java.util.Spliterator; import java.util.function.Consumer; import java.util.function.Predicate; import java.util.function.UnaryOperator; import java.util.stream.Stream; public class list{ private Node head; public list() { head=new Node(); } public void traverse() { Node temp=head; while(temp.next!=null) { temp=temp.next; System.out.println(temp.data); } } public boolean add(Object e) { // TODO Auto-generated method stub Node temp=head;//將頭部對象賦值給臨時對象,沒有頭部將無法遍歷鏈表 //利用遞歸執行循環,當下一個節點對象為空時停止循環 /** *注意!! *data中存儲的是當前對象,而next存儲的是下一個對象 *temp=temp.next是將temp的下一個對象賦值給temp */ while(temp.next!=null) { //將對象的下一個對象賦值給現有的臨時對象 //此時被賦值的temp節點對象同樣擁有next對象 //依次類推就形成了單鏈表 temp=temp.next; } Node next=new Node(); next.data=e; temp.next=next; return true; } public Object get(int index) { // TODO Auto-generated method stub Node temp=head; int i=0; while(temp.next!=null) { if(i==index) { return temp.data; } i++; } return null; } public void add(int index, Object element) { // TODO Auto-generated method stub Node temp=head; Node Element=new Node(); Element.data=element; int i=0; while(temp.next!=null) { if(i==index) { Node node=temp.next; temp.next=Element; Element=node; } i++; } } }
再創建一個測試類
package 單鏈表的子我實現; public class Test { public static void main(String[] args) { list list=new list(); list.add("張三"); list.add("李四"); list.add("王武"); list.add("趙六"); list.traverse(); } }
運行結果如下:
由於時間的緣故,先寫下單鏈表,之后更新。
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。