當前位置:首頁 » 操作系統 » linkedlist源碼

linkedlist源碼

發布時間: 2023-03-24 14:37:45

1. 如何查看JDK源碼

在Eclipse中查看JDK類庫的源代碼方法設置:
1.點 「window」-> "Preferences" -> "java" -> "Installed JRES";
2.此時"Installed JRES"右邊是列表窗格,列出了系統中的 JRE 環境,選擇JRE,然後點邊上的 "Edit...", 會出現一個窗口(Edit JRE);
3.選中rt.jar文件的這一項:「c:\program files\java\jre_1.5.0_06\lib\rt.jar」
點 左邊的「+」 號展開它;
4.展開後,可以看到「Source Attachment:(none)」,點這一項,點右邊的按鈕「Source Attachment...」, 選擇JDK目錄下的 「src.zip」文件;
5.一路點"ok",結束。

dt.jar是關於運行環境的類庫,主要是swing的包
tools.jar是關於一些工具的類庫
rt.jar包含了jdk的基礎類庫,也就是在java doc裡面看到的所有的類的class文件

使用方法:
可以在 Java 源代碼編輯器或代碼片段編輯測試窗中選擇類型、方法或欄位的名稱,然後對元素的定義打開編輯器。
在 Java 編輯器中,選擇類型、方法或欄位的名稱。也可以僅僅在名稱中單擊一次。
執行下列其中一項操作:
1.從菜單欄中,選擇瀏覽 > 打開聲明;
2.從編輯器的彈出菜單中,選擇打開聲明;
3.按 F3鍵,遷移到一個class文件拿去;
4、class文件畫面會有一個「關聯源代碼」按鈕,點擊這個按鈕,然後從系統文件選擇jdk下的src.zip文件。
這樣就可以直接看到源碼了。

2. linkedlist和linklist的區別

ArrayList和LinkedList的拆信區別
1、底層數據結構的差異:

ArrayList底層是數組,是連續的內存單元
LinkedList底層是鏈表,是不連續的內存單元
2、數據結構引發的特徵:

ArrayList 查詢快,因為是連續的內存地址;增刪慢,因為要發生數據遷移
LinkedList 查詢慢,因為要通過鏈表的指針挨個尋找,增刪快,因為只需要移動前後節點的指針指向即可。
3、ArrayList細節

增加 添加到末尾,數組初始容量是10,滿了需要擴容,按原來容量的1.5倍進行擴容,源凱租碼里是按位運算,再將原旅孫輪來的元素復制到新數組裡面。

3. linkedlist 源代碼怎麼查找元素的

這個方法是可行的的,indexOf方法 比較的是通過equal方法比較的
如果你重寫了equal方法,就使用你的規則進行比較,否則使用系統默認的方法即 Object中的equal方法;
給你貼個demo;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

public class Main{
public static void main(String[] args) {
LinkedList<Book> list = new LinkedList<>();
Book a = new Book(1,"a");
Book b = new Book(2,"b");
Book c = new Book(3,"c");
Book d = new Book(4,"d");
list.add(a);
list.add(b);
list.add(c);
list.add(d);

int index = list.indexOf(new Book(4, "d"));
System.out.println(index);

}
}
class Book{
int id;
String name;
public Book(int id,String name){
this.id = id;
this.name = name;
}
@Override
public boolean equals(Object obj) {
Book book = (Book) obj;
if(book!=null){
if((book.id == this.id) && (book.name.equals(this.name)))
return true;
}
return false;
}

4. java 中的LinkedList 是雙向循環列表嗎

源代碼中:
public void addLast(E e) {
addBefore(e, header);
}
將指定元素添加到此列表的結尾
public boolean add(E e) {
addBefore(e, header);
return true;
}
所以,add是向列表尾加的

看了一下addBefore方法
應該是雙鏈表結構 不是循環雙鏈表

5. ArrayList和LinkedList中的transient關鍵字和序列化

在看ArrayList和LinkedList的 源碼 的時候,發現ArrayList和LinkedList的一些成員變數變數被transient修飾了,有點不解,就查了一些資料。分享給大家。

序列化是java提供的一種將內存中的對象信息轉化為二進制數組的方法,可以將數組保存和傳輸,然後使用原來的類模板恢復對象的信息。源頌賀
轉化後的二進制數組中包含以下信息:序列化版本,完整類名,serialVersionUID,各個屬性的類型、名字和值、父類信息。

實現Serializable介面,使用ObjectOutputStream.writeObject(Object Object)寫對象信息,使用ObjectInputStream.readObject()讀對象信息。

ObjectOutputStream.writeObject(ObjectA objectA)首先判斷ObjectA有沒有重寫writeObject方法,如果有,反射調用ObjectA的writeObject方法完成序列化;否則,調用默認的序列化方法序列化。反序列化也一樣

被transient修飾的成員變數不會被序列化。
哪些情況下可以不用序列化呢?我認為有以下兩種情況。
1.節省空間
比如,一個長方形類有成員變數:長、寬、面積。那麼面積就不用序列化,因為面積可以根據其他兩個計算出來,這樣節省存儲空間和傳輸空間。
2.持有對象的引用
比如,我們創建鏈表的結點如下。結點中持有前驅結點和後繼結點的引用,引用就是對象在內存中的地址值。對於這樣的結點形成的鏈表,我們序列化這個鏈表後,結點的前序和後繼引用都失效了,因為內存地址變了。這種情況下我們需要重新連接鏈表。

首先說以下結論:
1.ArrayList中將elementData修飾成transient是為了節省空間
2.LinkedList中將first和last修飾成transient是為了節省空間和重新連接鏈表。

查看 源碼 我們知道ArrayList中使用數組transient Object[] elementData保存數據,當數組空間不夠時,數組長度擴容為原來的1.5倍。那麼數組中可能有沒有使用的空間,比如elementData的長度時15,但是裡面只裝了11個元素,那麼後面的4個元素都是空值。序列化的時候可以不把這4個元素序列化。
ArrayList中定義了writeObject和readObject方法,實現了自定義序列化。前面我們說了序列化的時候ObjectStream會判斷類中有沒有自定義序列化方法?如果有,使用自定義序列化方法:否則使用默認的序列化方法。
ArrayList自定義序列化方法如下

查看 源碼 我們知道LinkedList中使用雙向鏈表櫻培保存數據,結點中保存前驅和後繼的引用。但是序列化之後前序結點和後繼結點的地址都變了,我們應該連接新的結點。
下面看以下LinkedList是怎麼自定義序列化的

我們看到了,LinkedList序列化的時候將鏈表按順序拆分開來,僅序列化結雹派點中保存的數據,反序列化的時候重新連接鏈表,保證了鏈表的有效性。

6. java中鏈表是指java.util包中的LinkedList類嗎

鏈表指的是一種數據存儲結構,java.util.LinkedList是JAVA自己實現的一個雙向鏈表,自定義鏈表的話可以參考LinkedList類的源碼

7. LinkedList的null元素

LinkedList 允許null的存在,因此在刷題用 linkedList 模擬隊列的的時候,可以利用這個漏洞祥弊;

但是,原則上隊列並不允許null,其他時候不應該放null進來。

查看JDK源碼(JDK11):

LinkedList 的節點包含item 和 指向前後節點的「指針」謹扮族,因此null只是讓節點的值變缺雹成null,next和prev還是有值的。

8. java中linklist.size()是什麼意思

list的包含元素的個數,長度~
ArrayList alist = new ArrayList();
alist.add("111");
alist.add("222"指悔);
alist.add("333");
System.out.println(alist.size());
以上輸出結果為唯槐正3,因為向該變數中共添加了3個明沖元素。

9. Java中的linkedlist有兩個方法,element()和getFirst(),有什麼不一樣

這種最好的就是看jdk源碼和源碼上的注釋,以及編寫測試代碼實際調用測試一下。

看jdk源碼,LinkedList<E>源碼

先看getFirst()

/**
*.
*
*@
*@
*/
publicEgetFirst(){
finalNode<E>f=first;
if(f==null)
();
returnf.item;
}

看注釋Returns the first element in this list,返回列表的第一個元素,沒毛病。

然後來看element()

/**
*Retrieves,butdoesnotremove,thehead(firstelement)ofthislist.
*
*@returntheheadofthislist
*@
*@since1.5
*/
publicEelement(){
returngetFirst();
}

結果…… LinkedList 裡面 element()就是直接調用的getFirst()方法

10. 如何實現Java中一個簡單的LinkedList

與實現ArrayList的名字一樣,為SimpleLinkedList。源碼地址,歡迎star,fork
構建一個雙向絕拿敬敏納鏈表
構建的代碼如下:
?

1
2
3
4
5
6
7
8
9
10

private static class Node<E>{
E item;
Node<E> next;
Node<E> prev;
public Node(E item, Node<並慎E> next, Node<E> prev) {
this.item = item;
this.next = next;
this.prev = prev;
}
}

常規的雙向鏈表的構建方法,一個數字域存放數組,一個前指針指向一個Node類型的元素,一個後指針指向一個Node類型的元素。
對於LinkedList的實現而言,還需要以下三個成員變數
?

熱點內容
如何不通過密碼解鎖 發布:2024-05-22 13:43:35 瀏覽:844
簡述預演算法 發布:2024-05-22 13:38:37 瀏覽:552
演算法宣傳 發布:2024-05-22 13:38:34 瀏覽:977
太空殺任務密碼是多少 發布:2024-05-22 13:38:34 瀏覽:369
安卓其他伺服器怎麼登陸 發布:2024-05-22 13:25:26 瀏覽:16
創造與魔法ios腳本刷龍涎草 發布:2024-05-22 12:44:22 瀏覽:525
如何從安卓導數據到蘋果 發布:2024-05-22 12:15:59 瀏覽:274
博越互聯版屬於什麼配置 發布:2024-05-22 12:11:46 瀏覽:224
伺服器除了dns還有什麼 發布:2024-05-22 11:58:14 瀏覽:291
android開發背景 發布:2024-05-22 11:54:01 瀏覽:181