2015-05-23 6 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

Просто любопытно, что было бы целью значения «Node» в HashMap? – CKing

+0

Я удивлен, что такой комментарий исходит от модератора. Это может быть очевидно для вас, но это не очевидно для меня. Не могли бы вы объяснить, почему вам нужен класс Node, когда вы можете просто использовать вложенную карту? – CKing

+0

@ChetanKinger пытается найти узел для хранения информации о местоположении - в частности, если это слово или нет. Вы * можете * обучать особое значение карте для этого значения, поэтому карта становится узлом, но это необязательно (и я никогда не слышал, чтобы это было сделано). Причина, по которой я отреагировала, так это то, что объяснять, почему нужно объяснить, что такое trie - слишком долго для этого формата. – 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

thank u. поэтому, когда я хочу использовать свои ссылки, какой будет метод «get»? –

+0

@noylevi Отредактирован ответ, чтобы продемонстрировать один из возможных способов получения дочерних узлов (получить N-й дочерний узел). Не забудьте нажать на галочку и принять ответ, если этот ответ был тем, что вы искали :) – CKing

Смежные вопросы