2015-05-23 85 views
0

我正在嘗試構建一個TRIE,但爲此我需要樹的根可以像我想創建的那樣指向兒子(因爲它應該用作前綴樹)。對象在JAVA中如何指向許多其他對象?

所以我想知道是否有可能讓很多指針從我的根對象到我的所有輪胎的兒子? 我想看看究竟如何。

+0

你的意思是像一個指針列表? –

+0

您是否考慮過使用列表來存儲子節點?這樣一個根可以有任意數量的子節點。另外,在java中沒有像指針那樣的東西 - 你只有引用。您可以將每個參考文獻存儲在列表中。 – Shrinath

+0

是啊,我知道我只是稱他們爲... –

回答

0

要實現一個trie,你需要一種方法來將一個字母變成對下一個節點的引用。有2點明顯的選擇:

  • 一個陣列Node[] nodes = new Node[26];(假設英語)
  • 一個Map<Character, Node> map = new HashMap<Character, Node>();

數組是經典的C的做法,但因爲你是在Java中工作,我將開始與地圖關閉,因爲它更容易處理。

+0

只是好奇的是什麼將是HashMap中'Node'值的目的? – CKing

+0

我很驚訝這樣的評論來自主持人。這可能對你很明顯,但對我來說並不明顯。你想解釋爲什麼你需要一個Node類,當你可以使用嵌套的Map? – CKing

+0

@ChetanKinger嘗試需要一個節點來存儲有關位置的信息 - 特別是如果它是一個字或不是。你可以在這個值的地圖上設置一個特殊的值,這樣地圖就變成了節點,但這是不必要的(我從來沒有聽說過它已經完成)。我之所以這樣回答,是因爲要解釋爲什麼要解釋一個特里系統是什麼 - 這種格式太長了。 – Bohemian

2

Java不使用術語pointers。它使用術語references。儘管引用在傳遞給方法時展現了諸如pass-by-value等指針的某些行爲,但它們仍稱爲references

轉到實際問題。您可以使用參考文獻的Collection。請看下面的例子:

class Node { 
    List<Node> children = new ArrayList<Node>(); 

    public void addNode(Node d) { 
     children.add(d); 
    } 

    /*Get Nth child */ 
    public Node getChild(int n) { 
     if(n<children.size()) 
      return children.get(n); 

     return null; 
    } 
} 

你也可以使用一個LinkedList代替ArrayList取決於你想要達到的目標。 A LinkedList將提供快速插入和刪除,而ArrayList將爲您提供快速迭代。

+0

謝謝你。所以當我想使用我的引用什麼是「get」方法? –

+0

@noylevi編輯答案以演示獲取子節點的一種可能方式(獲取第N個子節點)。不要忘記點擊勾號並接受答案,如果這個答案是你正在尋找的:) – CKing