簡體   English   中英

ArrayList Iterator無法迭代

[英]ArrayList Iterator fails to iterate

我編寫的迭代器沒有按計划迭代。 它應該迭代一個ArrayList,但它會在第一個項目上循環: aylmao

目標是有一個工作的自定義迭代器,它將迭代一個通用的ArrayList

我非常寧願在聊天中問這個,但沒有人在那里。

繼承人造成代碼的麻煩:


    @Override
public Iterator<T> iterator() {
    final SimpleList<T> list = this;

    return new Iterator<T>() {

        int index = 0;

        @Override
        public boolean hasNext() {
            return index < list.size() && list.get(index) != null;
        }

        @Override
        public T next() {
            T temp = list.get(index++);
            index++;
            return temp;
        }

        public void remove() {
            throw new UnsupportedOperationException();
        }
    };

}

public static void main(String[] args) {
    SimpleList<String> list = new SimpleList<String>();
    list.append("aylmao");
    list.append("1aylmao");
    list.append("2aylmao");
    list.append("3aylmao");
    list.append("4aylmao");
    list.append("5aylmao");
    list.append("6aylmao");

    while (list.iterator().hasNext()) {

        System.out.println(list.iterator().next());
    }
}

調用list.iterator()每次都會創建一個新的迭代器。

Iterator<String> iter = list.iterator()將解決您的問題

只需重新使用它。

例如:

SimpleList<String> list = new SimpleList<String>();
    list.append("aylmao");
    list.append("1aylmao");
    list.append("2aylmao");
    list.append("3aylmao");
    list.append("4aylmao");
    list.append("5aylmao");
    list.append("6aylmao");
    Iterator<String> iter = list.iterator()
    while (iter.hasNext()) {

        System.out.println(iter.next());
    }

將迭代器分配給變量,然后將其添加到while循環。 list.iterator(); 每次都會創建一個新的Iterator。

Iterator iter = list.iterator();
while(iter.hasNext())
{
   System.out.println(iter.next());
}

采用 :

for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) 
{
   System.out.println(iterator.next());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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