[英]How to randomly access data from a Java Iterator
我從一個類中得到一個迭代器,我想得到那個迭代器的第 x 個元素。 我知道我可以在循環中將它加載到 ArrayList 中或檢查計數器,但這似乎效率低下/丑陋。 做這個的最好方式是什么?
我想過類似的事情,
List al = new ArrayList(myIterator);
myval = al.get(6);
但是那個構造函數是未定義的。 謝謝。
Iterator
的定義不允許任意索引到位置。 這就是它的定義方式。 如果需要此功能,則必須將數據加載到可索引的集合中。
Iterator
接口的重點是允許對集合的順序訪問,而無需了解其大小。 迭代器可以是僅轉發的,也可以是雙向的( ListIterator
)。 它只是用於訪問集合元素的一種特定模型。 優點之一是,它並不意味着集合的大小,因為集合的大小可能太大而無法完全容納到內存中。 通過只允許順序訪問,該實現可以在任何給定時刻自由地將集合的僅一部分保留在內存中。
如果需要將迭代器的內容加載到列表中,則需要自己循環執行。
不,您已經指定了唯一的方法。 您最終將需要一個for
循環來迭代到適當的位置。
有幾個工具庫,具有快捷方式的裝載Iterator
的內容轉換成一個ArrayList
,或者拿到n
個的元素Iterator
,但沒有什么內置的JDK。
作為一種解決方法,我在我的 utils 類中使用它
/**
* Retrive the position object of iterator
* @param iterator
* @param position
* @return Object at position
* @throws Exception
*/
public static Object iterateTo(Iterator iterator, int position) throws Exception{
if(iterator == null){
throw new Exception("iterator == null");
}
if(position < 0){
throw new Exception("position < 0");
}
while(iterator.hasNext() && position > 0){
position--;
iterator.next();
}
if(position != 0){
throw new Exception("position out of limit");
}
return iterator.next();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.