这不是一个容易写的问题,它有很多角度。我正在尝试用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()功能?
答案 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());
应该可以解决问题。