当我从标准输入读取时,只有备用位置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)
所述add在strings.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在每次迭代时进行计算.