2012-06-06 43 views
1

我從一個類中得到一個Iterator,我想獲得該迭代器的第x個元素。我知道我可以將它加載到一個循環中的ArrayList或檢查一個計數器,但這似乎是低效/醜陋。做這個的最好方式是什麼?如何從Java Iterator中隨機訪問數據

我想是這樣,

List al = new ArrayList(myIterator); 
    myval = al.get(6); 

但是這個構造是不確定的。謝謝。

回答

9

Iterator的定義不允許對某個位置進行任意索引。這就是它的定義方式。如果你需要這種功能,你將不得不將數據加載到可索引集合中。

Iterator接口的要點是允許連續訪問集合時不知道其大小。迭代器可以是隻向前或雙向的(ListIterator)。這只是一個訪問集合元素的特定模型。其中一個優點是它對集合的大小沒有任何影響,這可能太大而不能完全適應內存。通過僅允許順序訪問,實現可以在任何特定時刻自由地將內容的一部分保存在內存中。

如果您需要將迭代器內容加載到列表中,您需要使用循環自行完成。

+0

您是否閱讀過OP的代碼? OP意識到了這一切。他們問他們是否應該將'Iterator'的內容加載到循環中的'ArrayList'中,或者使用計數器迭代到迭代器的第n個元素。 –

+0

@LouisWasserman Jim的回答表明,將一個迭代器加載到一個集合中,比如一個數組列表,是完成OP所嘗試的最有效的方法。 – Vulcan

+0

OP表明他們知道'Iterator'只允許順序訪問,但他們問是否有一個更緊湊,更可讀的方式來做到這一點,否則獲得第n個元素。 –