为什么我的列表中有额外的null元素?

Pra*_*ra 2 java arraylist

当我从标准输入读取时,只有备用位置ArrayList占用数据.输入数据是:

1
2
3
4
5
6
7
8
9
0
Run Code Online (Sandbox Code Playgroud)

我在多个地方尝试了这个,但我仍然得到相同的输出.

public class Solution {

    public static void main(String[] args) throws Exception {
        ArrayList<String> strings= new ArrayList<>();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        for (int i = 0; i < 10; i++) {
            strings.add(null);
        }

        for (int i = 0; i < 10; i++) {
            strings.add(9-i, br.readLine());
        }

        for (int i = 0; i < 10; i++) {
            System.out.println(strings.get(i));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

结果我期待:

0
9
8
7
6
5
4
3
2
1
Run Code Online (Sandbox Code Playgroud)

实际结果:

0
null
9
null
8
null
7
null
6
null
Run Code Online (Sandbox Code Playgroud)

Mad*_*ist 5

所述addstrings.add(9-i, br.readLine())执行插入,而不是替换.nulls你所看到的前一个循环.

要获得所需的结果,只需在摆脱第一个循环后插入第一个位置:

for(int i = 0; i < 10; i++){
    strings.add(0, br.readLine());
}
Run Code Online (Sandbox Code Playgroud)

如果您尝试预先分配列表以避免转移,请使用set而不是add替换值:

for(int i = strings.size() - 1; i >= 0; i--){
    strings.set(i, br.readLine());
}
Run Code Online (Sandbox Code Playgroud)

没有理由9 - i在每次迭代时进行计算.