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