我從一個類中得到一個Iterator,我想獲得該迭代器的第x個元素。我知道我可以將它加載到一個循環中的ArrayList或檢查一個計數器,但這似乎是低效/醜陋。做這個的最好方式是什麼?如何從Java Iterator中隨機訪問數據
我想是這樣,
List al = new ArrayList(myIterator);
myval = al.get(6);
但是這個構造是不確定的。謝謝。
我從一個類中得到一個Iterator,我想獲得該迭代器的第x個元素。我知道我可以將它加載到一個循環中的ArrayList或檢查一個計數器,但這似乎是低效/醜陋。做這個的最好方式是什麼?如何從Java Iterator中隨機訪問數據
我想是這樣,
List al = new ArrayList(myIterator);
myval = al.get(6);
但是這個構造是不確定的。謝謝。
不,你已經命名爲唯一的方法。你將最終需要一個for
循環來迭代到合適的位置。
一些實用程序庫具有load an Iterator
's contents into an ArrayList
或get the n
th element of an Iterator
的快捷方式,但JDK中沒有構建任何內容。
Iterator
的定義不允許對某個位置進行任意索引。這就是它的定義方式。如果你需要這種功能,你將不得不將數據加載到可索引集合中。
Iterator
接口的要點是允許連續訪問集合時不知道其大小。迭代器可以是隻向前或雙向的(ListIterator
)。這只是一個訪問集合元素的特定模型。其中一個優點是它對集合的大小沒有任何影響,這可能太大而不能完全適應內存。通過僅允許順序訪問,實現可以在任何特定時刻自由地將內容的一部分保存在內存中。
如果您需要將迭代器內容加載到列表中,您需要使用循環自行完成。
您是否閱讀過OP的代碼? OP意識到了這一切。他們問他們是否應該將'Iterator'的內容加載到循環中的'ArrayList'中,或者使用計數器迭代到迭代器的第n個元素。 –
@LouisWasserman Jim的回答表明,將一個迭代器加載到一個集合中,比如一個數組列表,是完成OP所嘗試的最有效的方法。 – Vulcan
OP表明他們知道'Iterator'只允許順序訪問,但他們問是否有一個更緊湊,更可讀的方式來做到這一點,否則獲得第n個元素。 –