簡體   English   中英

如何從 Java Iterator 隨機訪問數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM