你可以在数组上使用迭代器吗?

时间:2013-04-09 12:03:27

标签: java iterator trie

这不是一个容易写的问题,它有很多角度。我正在尝试用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。 (所以嵌套的哈希映射,这是我不完全确定这是一个合适的特里,但没关系)。

我遇到的问题是我想停在value.toCharArray的最终值(无论最后一个字符c是什么)。如果我没有停在最后一个字符上它继续添加嵌套的HashMaps并且实际上从未将该单词放入。我试图创建一个迭代器并使用hasNext()函数但我尝试的任何工作都没有。

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

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

4 个答案:

答案 0 :(得分:3)

您必须循环才能将数组转换为列表,因为Arrays.asList(value.toCharArray())将生成List<char[]>

List<Character> characters = new ArrayList<Character>();
for (char c : value.toCharArray()) {
    characters.add(c);
}

答案 1 :(得分:1)

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

int length = value.toCharArray().length;
for (int i = 0; i < length; i ++) {
    if (i == length - 1) {
        //Last Element
    }
}

答案 2 :(得分:0)

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

for(i=0; i<value.toCharArray().length; i++){
    char c = value.toCharArray()[i];
    ......
}

答案 3 :(得分:0)

Arrays.asList(value.toCharArray());应该可以解决问题。