我有一个程序在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]
任何人都可以解释一下这种行为吗?我很困惑。
答案 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中,因此两个列表都包含备用值,并将以交替顺序打印。