Java ArrayList的行为方式不同

时间:2014-08-19 12:58:29

标签: java collections

我有一个程序在java中打印ArrayList。 ArrayList应保留插入顺序吗?

import java.util.*;

class Generator {
    String[] s = { "snow", "white", "and", "the", "seven", "dwarfs" };

    String s1;

    static int i = 0;

    String next() {
        s1 = s[i];
        i++;
        if (i == s.length) {
            i = 0;
        }
        return s1;
    }

    public static void main(String[] args) {
        Collection<String> al = new ArrayList<String>();
        // Collection<String> ll=new LinkedList<String>();
        Generator g = new Generator();
        for (int i = 0; i < 10; i++) {

            al.add(g.next());
            // ll.add(g.next());
        }

        System.out.println(al);
        // System.out.println(ll);
    }
}

使用LinkedList对象注释,我得到正确的输出

[snow, white, and, the, seven, dwarfs, snow, white, and, the]

但是当我取消注释LinkedList代码时,我输出为:

[snow, and, seven, snow, and, seven, snow, and, seven, snow]
[white, the, dwarfs, white, the, dwarfs, white, the, dwarfs, white]

任何人都可以解释一下这种行为吗?我很困惑。

4 个答案:

答案 0 :(得分:2)

取消注释链接列表时,您在每个循环中调用next()两次。

第一个单词存储在数组列表中,第二个单词存储在链表中,第三个单词存储在数组列表中......

接下来,拜托!

答案 1 :(得分:1)

您可以拨打以下电话。

    String next = g.next();
    al.add(next);
    ll.add(next);

而不是两次调用next()方法。

答案 2 :(得分:0)

g.next()删除下一个项目并将其返回。因此,当您取消注释LinkedList代码时,您的循环会在每次迭代时删除两个项目,并为每个列表添加一个项目。

答案 3 :(得分:0)

如果取消注释linkedList,则第一个值将插入到ArrayList中,第二个值将插入到LinkedList中,因此两个列表都包含备用值,并将以交替顺序打印。