java雙向鏈表
① java 雙向鏈表的迭代器,怎麼添加元素
可以用LinkedList代替你的AdditiveList
LinkedList<String> linklist=new LinkedList<String>();
String [] strs={"1","2","3","4"};
for (String string : strs) {
linklist.add(string);
}
System.out.println("鏈表的第一個元素是 : " + linklist.getFirst());
System.out.println("鏈表最後一個元素是 : " + linklist.getLast());
System.out.println("鏈表的長度 : " + linklist.size());
//然後你需要動態改變鏈表中的元素這時可以用ListIterator<E>迭代器來操作鏈表
ListIterator<String> itr=linklist.listIterator();
while (itr.hasNext()) {
itr.next();//先正序將游標調至結尾
}
while (itr.hasPrevious()) {
String string = (String) itr.previous();//逆序遍歷鏈表
System.out.println(string);
if("2".equals(string)){//在指定位置前插入元素
itr.add("0");//這里就是你需要插入的元素
itr.add("1");
}
}
System.out.println(linklist.toString());
② java 中的LinkedList 是雙向循環列表嗎
源代碼中:
public void addLast(E e) {
addBefore(e, header);
}
將指定元素添加到此列表的結尾
public boolean add(E e) {
addBefore(e, header);
return true;
}
所以,add是向列表尾加的
看了一下addBefore方法
應該是雙鏈表結構 不是循環雙鏈表
③ JAVA中鏈表有什麼用
java中的List介面 中有兩個實現類:ArrayList和LinkedList。前者是使用數組實現,用索引來取數據是它的優勢。後者是用雙向鏈表實現,在插入和刪除操作上占優勢。具體實現已經封裝好了,不用操心過多,具體動作都有具體的方法。
④ 關於ArrayList與LinkedList問題
對於處理一列數據項,Java 提供了兩個類ArrayList 和LinkedList ,ArrayList 的內部實現是基於內部數組Object[] ,從概念上講,它更像數組,但LinkedList 的內部實現是基於一組連接的記錄,所以,它更像一個鏈表結構,它們在性能上有很大的差別。
ArrayList和LinkedList都實現了List介面,ArrayList的實現用的是數組,LinkedList是基於鏈表,ArrayList適合查找,LinkedList適合增刪。
ArrayList與LinkList兩者的區別:
ArrayList是基於索引的數據介面,它的底層是數組。它可以以O(1)時間復雜度對元素進行隨機訪問。
相對於ArrayList,LinkedList的插入,添加,刪除操作速度更快,因為當元素被添加到集合任意位置的時候,不需要像數組那樣重新計算大小或者是更新索引。
LinkedList比ArrayList更占內存,因為LinkedList為每一個節點存儲了兩個引用,一個指向前一個元素,一個指向下一個元素。
但是要刪除數據卻是開銷很大的,因為這需要重排數組中的所有數據。
2) 相對於 ArrayList , LinkedList 插入是更快的。因為 LinkedList 不像 ArrayList 一樣,不需要改變數組的大小,也不需要在數組裝滿的時候要將所有的數據重新裝入一個新的數組,這是 ArrayList 最壞的一種情況,時間復雜度是 O(n) ,而 LinkedList 中插入或刪除的時間復雜度僅為 O(1) 。 ArrayList 在插入數據時還需要更新索引(除了插入數組的尾部)。
3) 類似於插入數據,刪除數據時, LinkedList 也優於 ArrayList 。
4) LinkedList 需要更多的內存,因為 ArrayList 的每個索引的位置是實際的數據,而 LinkedList 中的每個節點中存儲的是實際的數據和前後節點的位置 ( 一個 LinkedList 實例存儲了兩個值: Node<E> first 和 Node<E> last 分別表示鏈表的其實節點和尾節點,每個 Node 實例存儲了三個值: E item,Node next,Node pre) 。
什麼場景下更適宜使用 LinkedList,而不用ArrayList
1) 你的應用不會隨機訪問數據 。因為如果你需要LinkedList中的第n個元素的時候,你需要從第一個元素順序數到第n個數據,然後讀取數據。
2) 你的應用更多的插入和刪除元素,更少的讀取數據 。因為插入和刪除元素不涉及重排數據,所以它要比ArrayList要快。