2012-09-10 111 views
-1

我在考試中被要求在Java中對隊列編寫算法。我使用Iterator來提取隊列的元素。 (這些元素僅由字符組成:'R''W''B')。該問題禁止創建或銷燬輸入隊列的任何字符。我只想問是否使用Iterator來提取元素「創建」或不是? 我的算法是:Java「迭代器」關鍵字

Q=Queue 
Iterator dummy=Q.elements(); 
while (//some condition){ 
    if (dummy.data=='R') 
    ... 
    ... 

這僅僅是算法。我想問我是否已經「創造」了元素,因爲我被授予0分數。 :(

+0

'Iterator'不是java中的關鍵字。檢查接口[Iterator](http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html)。 –

+0

@Nandkumar:好的。我編輯了我的問題。不管它是否是一個關鍵詞,它都會創造新的元素嗎?我在問題中寫了我的算法。 – user188995

+2

@ user188995:你見過Nandkumar發佈的javadoc嗎?也許你會知道爲什麼你的答案爲0(*提示,它與「創建」或「銷燬」無關,但更多的是如何編寫代碼*) – Sujay

回答

1

有沒有像elements()在隊列中沒有方法是element()Retrieves but does not remove element from the queue正確的方法是queue.iterator();

邏輯的任何方式,你有一些什麼樣正確的,你不值得0

你可以訪問使用new for loop

for(Object object : queue) { 
     //do something 
    } 
+0

我只是想問一下,我是否使用迭代器創建了新元素? – user188995

+0

答案是否定的,你沒有任何方法像這樣爲'iterator'賦值。它只允許你閱讀和不創建任何對象。 –

+0

謝謝。我的邏輯很簡單,在「字面意義上」使用「迭代器」。不在編程中。我們必須用**純英文**編寫算法。所以,我的想法是從'0到n'開始讀取Queue的每個'char'。那麼你確定我沒有「創建」任何新的或重複的元素嗎? – user188995

0

char爲值類型,因此所有的分配導致「拷貝」 b eing提出。

0

不,迭代器不會創建任何東西。 java中的字符是對象,不可變,並通過引用傳遞給數組(以及保持內存使用率下降,它們在後臺被重用):

public static Character valueOf(char c) { 
    if(c <= 127) { // must cache 
     return CharacterCache.cache[(int)c]; 
    } 
     return new Character(c); 
    } 
+0

'Character' or'char'? – Eric

+0

迭代器將提供盒裝類型 - 也對象 –

+0

所以一個副本_is_創建,因爲'chars'被裝箱(緩存開始爲空)。 – Eric