2014-05-14 24 views
-4

我剛開始使用Java中的列表,我對這一切感到困惑。 所以基本上我們已經ArrayList和LinkedList可以像什麼是Java中的列表

LinkedList<String> s = new LinkedList<String>(); 

    ArrayList<String> s = new ArrayList<String>(); 

定義,但後來我們也有LinkedIntList可以像例如被定義爲:

class LinkedIntList { 
    private ListNode first; 
    private int size; 

    LinkedIntList() { 
     first=null; 
     size=0; 
    } 

    LinkedIntList(LinkedIntList l) { 
     first = l.getFirst(); 
     size=l.size(); 
    } 

    ListNode getFirst() {return first;} 
     int size() {return size;} 
    } 

但是,這是我的問題,爲什麼定義LinkedIntList使用課堂?與LinkedLists相比,我們剛纔如我所說的定義有什麼不同。 我不明白爲什麼要使用一個類。如果這是一個「新類型」的數組,爲什麼使用類而不是正常聲明它?

對不起,如果這聽起來很奇怪,但我是一個初學者,真的需要幫助。

謝謝!

+0

由於'LinkedList'仍然存在於java中,所以你可以實例化這個類,但是在java中沒有'LinkedIntList'實現了(我從來沒有聽說過LinkedIntList這個代碼?),所以你可以由你自己創建這個類。 *注意:列表只是一個界面。 – kai

回答

0

的List在Java中,是一個有序集合。我想你是一個初學者,並且與語法混淆。如果你有java反編譯器,你可以看到LinkedList和ArrayList也是類。這意味着某個好人已經爲你編碼,併爲你提供了一個類似於你的「LinkedIntList」的類,併爲你提供了開箱即用的功能。 如果Java爲您提供了足夠的功能,則不需要創建新的類。

但有時候,開箱即用的類別不足以滿足我們的要求。在這種情況下,我們必須編寫我們自己的類實現,比如你的類「LinkedIntList」。

在這種情況下,您似乎需要大小和一個元素,因此您正在自行創建它。

+0

當我們聲明一個新的數組時,也會發生同樣的情況嗎? –

+0

實際上,內部數組也是Java中的一個類請參考[this](http://stackoverflow.com/questions/8546500/why-isnt-there-a-java-lang-array-class-if-a-java -array-is-an-object-shouldnt) –

+0

那就是我的觀點。謝謝! –

-1

LinkedList的是Java平臺類的java.util中包的一部分,它被廣泛地應用於不同的任務。它支持Generics

LinkedIntList是一個自定義實現,只是爲了向您展示如何實現單鏈表。

你可以找到更多有關不同的算法和結構也複雜here

0

LinkedList是在java.util包中定義的類,它已經提供給您。它利用名爲泛型的功能,該功能允許您提供將填充列表的對象類型。你基本上把它當成一個黑盒子:在大多數情況下,你並不關心LinkedList的實際實現,而只關心它的接口(也就是它暴露給你的方法)。

您提供的類LinkedIntList不具有通用性,但僅僅是鏈接列表的實現,其中每個項目是ListNode。我想ListNode包含一個整數,否則名稱LinkedIntList沒有多大意義。

無論如何,你可以放棄這個實現(雖然是良好的學習),並簡單地聲明

LinkedList<Integer> myLinkedList = new LinkedList<Integer>();

如果您想了解更多關於泛型,take a look at the java tutorials

0

在第一個例子中,

LinkedList<String> s = new LinkedList<String>(); 

它是鏈表中的參考標準庫中定義的實施方式中,特別是從包java.util中。在這裏看到:http://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html

你可以看一下它的源代碼(1000+線長,所以我不會在這裏張貼),並把它比作LinkedIntList您自定義實現。基本上,Java已經提供了LinkedList的默認實現(您的第一個示例),但是每個人仍然可以編寫(一個類)並使用它們自己的實現(您的第二個示例)。

0

你的問題還不清楚,但我會盡力向你解釋一下列表本質上是什麼。

列表是一種數據結構,不僅在Java中,而且在很多編程語言中。數組也是一種數據結構。數據結構以有組織的方式保存和管理數據。

在Java中,List和Array之間的主要區別在於List有動態大小,而Array在聲明Array時是固定大小的。

Java中的所有列表都是List接口的實現。如果你不知道接口是什麼,我建議你瞭解它,但基本上這意味着所有的列表可以爲你做相同的基本設置,但是在內部做它們不同。

例如,ArrayList在內部使用陣列以根據需要擴展或縮小列表(實現動態大小)。 LinkedList使用彼此連接的節點在內部實現不同的事情。但是它們都向編程人員提供了與List界面中定義的相同的基本操作集(儘管可以提供其他方法不提供的其他方法)。

由於其內部實現方式不同,它們在不同的操作中可能會有所不同。他們有不同的算法來做事情(例如,訪問索引中的值),這些算法具有不同的「速度」(複雜性)。

大部分時間ArrayList將是正確的,更簡單的選擇。 This answer talks about when to prefer one over the other

希望這會有所幫助。

0

java List是一個對象的有序集合,這個java.util.List實際上是一個接口(契約),它定義了列表的行爲應該如何。

java標準JDK中存在List的多種變體(實現),雖然它們各自不同,但它們遵守List(例如,有序方面)中定義的契約。這些實現是具體的類,你可以從你的代碼中選擇。

LinkedListArrayList您提到的是List的JDK實現。

您共享的類(LinkedIntList)是一個定製的對象結構,既不是JDK的一部分,也不實現java List接口。