簡體   English   中英

Android Java ArrayList Iterator.next()或List.get()返回始終相同的對象

[英]Android Java ArrayList Iterator.next() or List.get() return always the same Object

我的ArrayList迭代器或List的get()函數(具有多個索引)始終返回列表的最后一個元素。 我對Java非常陌生,無法理解為什么像C ++這樣的迭代器沒有begin()和end()。 我如何跳到第一個要素? 如果我使用while()和迭代器遍歷具有hasNext()和next()的列表,然后將Log()傳遞到控制台,則如果列表的大小為20,則同一對象有20倍。

賓語:

public class JokeObject implements Serializable {
    private static final long serialVersionUID = -1703441755022251852L;
    public int num;
    public int jokeid;
    public String joke;
    public int votes;
}

對象持有人類別:

public class JokeHolder {

    private ArrayList <JokeObject> jokeList;
    private Iterator<JokeObject> jokeIt;
    private JokeObject lastJokeObj;

    public JokeHolder() {
        jokeList = new ArrayList<JokeObject>();
        jokeIt = jokeList.iterator();
        lastJokeObj = null;
    }

    public void AddJoke(JokeObject obj) {
        this.jokeList.add(obj);
    }

    public JokeObject GetNextJoke() {
        if (jokeIt.hasNext()) {
            lastJokeObj = jokeIt.next();
            return lastJokeObj;
        }

        return null;
    }

    public int GetHolderSize() {
        return (jokeList.size());
    }

    public void SetList(ArrayList<JokeObject> aList) {
        jokeList.clear();
        jokeList.addAll(aList);
        this.jokeIt = this.jokeList.iterator();
    }

    public void SetLastObj(JokeObject obj) {
        this.lastJokeObj = obj;     
    }

    public ArrayList<JokeObject> GetList() {
        return jokeList;
    }

    public JokeObject GetLastObject() {
        return lastJokeObj;
    }
}

在活動A中:

jokes.AddJoke(obj);

在活動B中:

obj = myJokes.GetNextJoke();

當您將項目添加到列表中時,我認為迭代器不會“刷新”。 也許這會更好。 存儲一個關於您的笑話的索引,並獲得如下笑話:

public JokeObject GetNextJoke() {
    if (if index < jokeList.size()) {
        lastJokeObj = jokeList.get(i);
        index++;
        return lastJokeObj;
    }

    return null;
}

暫無
暫無

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

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