2013-04-09 43 views
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 
    } 

基本上我在這裏做什麼,是增加詞「樣品」在一棵樹上。我創建了一個HashMap,其中鍵是字符,值是另一個HashMap。 (所以嵌套的哈希映射,這是我不完全確定這是一個適當的Trie,但從來不知道這一點)。

我遇到的問題是我想停止value.toCharArray(無論最後一個字符c是什麼)的最終值。如果我不停留在最後一個字符上,它會繼續添加嵌套的HashMaps,並且永遠不會將該單詞放入。我試圖創建一個迭代器並使用hasNext()函數,但是我沒有嘗試任何工作。

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

我不能讓迭代器遍歷數組,迭代器是否與數組不兼容?只有列表或數組列表?如果是這樣,是否有一種簡單的方法將字符數組放入列表中,以便我可以使用hasNext()功能?

回答

3

您必須循環到數組轉換到一個列表,因爲Arrays.asList(value.toCharArray())會產生List<char[]>

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

迭代器不能在基本類型數組中使用,只能在集合。 而不是你每次使用:

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

Arrays.asList(value.toCharArray());應該做的伎倆。

+0

這會產生一個'List ',這可能不是OP想要的。 – Keppil 2013-04-09 12:43:23

1

你可以使用正常的循環結構,而不是使用迭代器。

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