2012-09-30 81 views
2

首先,我在過去的幾周裏一直在學習Java,所以我沒有太多經驗。實施清單<E>:我需要一個新班級嗎?

這更是一個理論問題。 我想創建一個簡單的列表。

所以首先我做了一個類,我指定了一些方法。我希望它是通用的,所以我可以使用任何類型。

public interface List<E> 

現在我需要實現它,所以我創建:

public class MyList<E> implements List<E> 

現在,我需要兩個屬性:

private E element; 
private MyList<E> next; 

一會牽着我的泛型類型,其他的會到下一個元素的鏈接。首先,我不知道這是不是寫它的正確方法。如果我將這個屬性留在這個類中,它會正常工作嗎?其次,我一直在考慮是否最好創建另一個班級,讓我們說一個Box類,它將包含這兩個字段,從而在實施過程中使操作更容易。

可能是一個愚蠢的問題,但我正在努力學習和理解最好的方法來做到這一點。

謝謝你的時間。

+0

你想添加什麼功能'List'尚未包含? – Matthew

+0

這不是List from java.util。* 這是我自己的列表和我自己的方法。並試圖用類的例子來解決它。 – Alessandroempire

回答

9

我想你正試圖實現一個單鏈表。現在回答你的問題,我認爲創建像你所提到的Box類(通常稱爲Node)會對你有好處。所以您的實現可能是這樣的:

public class MyList<E> implements List<E> { 
    private Node<E> head; 

    private static class Node<E> { 
     private E element; 
     private Node<E> next; 

     public Node(E element, Node<E> next) { 
      this.element = element; 
      this.next = next; 
     } 

     // ... 
    } 

    // ... 
} 

MyList將持有連接到其他Node s的連鎖單Node。如果你take a look,這是如何編寫實際的java.util.LinkedList類。

+0

這就是我需要知道的。謝謝! 現在快速提問,在裏面創建一個類,這是如何工作的?是否與創建另一個.java文件和創建公共類節點類似。或者這個類節點只對MyList 可見? – Alessandroempire

+1

嘗試閱讀[this](http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html),看看它是否澄清事情。 – arshajii

+1

是的,澄清了很多。謝謝! :) – Alessandroempire

0

例如,如果您只是想使用您的列表,則在java.util -package:LinkedListArrayList中有標準實現。如果你想讀一些關於不同類型的名單和實施方式,Wikipedia總是一個很好的起點。

+0

已經檢查過它。仍然不回答我的問題 – Alessandroempire

2

首先,列表具有包含元素的節點。例如:

public class Node<E> { 
    private E element; 
    private Node<E> next; 
} 

其次,你需要定義一個根節點但從這對你有實現它的方法有兩種:

  • 讓節點實現List接口或繼承Node元素和讓這個實現接口
  • 創建一個實現你的接口,並擁有根元素(常用的方法)

我將解釋第二種方式類因爲這是通常的方式。 我們需要一個「主類」:

public class MyList<E> implements List<E> { 
    private Node<E> root; 
} 

該類現在應該實現你的方法和根對象上工作 - 例如使用根節點的下一個指針遍歷節點,依此類推。 此外,通常還會保存最後一個節點,以便更快地添加,同時還存儲當前大小 - 因此,您的List實現中還需要兩個變量。

但是,Node類現在應該是一個私有的內部類!

相關問題