为什么列表中还有多余的null元素?

时间:2019-01-14 08:55:09

标签: java arraylist

当我从标准输入中读取内容时,只有ArrayList中的备用位置占用数据。输入数据为:

1
2
3
4
5
6
7
8
9
0

我已经在多个地方尝试过,但是我仍然得到相同的输出。

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));
        }
    }
}

我期望的结果:

0
9
8
7
6
5
4
3
2
1

实际结果:

0
null
9
null
8
null
7
null
6
null

3 个答案:

答案 0 :(得分:5)

add中的strings.add(9-i, br.readLine())执行插入操作,而不是替换操作。上一个循环为您看到的nulls

要获得理想的结果,只需在摆脱第一个循环后将其插入第一个位置即可。

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

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

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

没有理由在每次迭代中计算9 - i

答案 1 :(得分:3)

您应该更改

strings.add(9-i, br.readLine());

strings.set(9-i, br.readLine());

这将用输入替换null值,而不是在null的{​​{1}}元素之间插入输入。

答案 2 :(得分:0)

首先删除然后添加,就像这样:

public static void main( String args[] ) throws IOException {

            ArrayList<String> strings= new ArrayList<String>();
            BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
            for(int i=0;i<10;i++){
                strings.add(br.toString());
            }
            for(int i=0;i<10;i++){
                strings.remove(9-i);
                strings.add(9-i, br.readLine());
            }
            for(int i=0;i<10;i++)
                System.out.println(strings.get(i));

}