0

这不是一个容易写的问题,它有很多角度。我正在尝试用 Java 编写一个非常基本的 Trie 来帮助自己理解这个概念及其用途。我不完全确定我做对了,但不管我遇到以下问题:

    for(char c: value.toCharArray()){
    TrieNode nodeChecker = rootNode.checkValue(c);    //checks currentNode to see if characters are keys in HashMap
    if(nodeChecker == null){
        rootNode = rootNode.add(c);     //if not, adds the character as a key, returns another TrieNode
    }

基本上我在这里所做的是将单词“sample”添加到树中。我创建了一个 HashMap,键是字符,值是另一个 HashMap。(所以嵌套的哈希映射,这是我不完全确定这是一个正确的 Trie 的地方,但没关系)。

我遇到的问题是我想停止 value.toCharArray 的最终值(无论最后一个字符 c 是什么)。如果我不在最后一个字符上停下来,它会继续添加嵌套的 HashMaps 并且从未真正放入这个词。我试图创建一个迭代器并使用 hasNext() 函数,但我尝试的任何方法都不起作用。

Iterator<Character> iter = value.toCharArray().iterator(); //"cannot invoke iterator on the array type char[]"

我无法让迭代器通过数组,迭代器与数组不兼容吗?只有列表或数组列表?如果是这种情况,是否有一种简单的方法可以将字符数组放入列表中,以便我可以使用 hasNext() 功能?

4

4 回答 4

3

您将不得不循环将数组转换为列表,因为Arrays.asList(value.toCharArray())会产生List<char[]>

List<Character> characters = new ArrayList<Character>();
for (char c : value.toCharArray()) {
    characters.add(c);
}
于 2013-04-09T12:05:27.143 回答
1

迭代器不能用于原始类型数组,只能用于集合。而不是你每次使用:

for(i=0; i<value.toCharArray().length; i++){
    char c = value.toCharArray()[i];
    ......
}
于 2013-04-09T12:06:09.520 回答
0

Arrays.asList(value.toCharArray());应该做的伎俩。

于 2013-04-09T12:06:56.710 回答
0

您可以使用普通的 for 循环构造,而根本不使用迭代器。

int length = value.toCharArray().length;
for (int i = 0; i < length; i ++) {
    if (i == length - 1) {
        //Last Element
    }
}
于 2013-04-09T12:08:07.390 回答