我正在尝试创建一个长度为500的List,所有索引都初始化为1000.然后,我想将其中一些索引设置为新值。我尝试了两种方法,但遇到问题和/或错误:
首先:
int a = 3;
int b = 0;
List<Integer> list = new ArrayList();
for (int i = 0; i < 500; i++) {
list.add(i, 1000);
}
list.set(a, b);
如果我查看前十个索引,而不是获得1000,1000,1000,0,1000,1000,1000,1000,1000,1000,我得到1000,1001,1002,3,1004,1005,1006 ,1007,1008,1009
第二
int a = 3;
int b = 0;
List<Integer> list = Collections.nCopies(500, 1000);
list.set(a, b);
我收到错误:行list.set(a,b)中的java.lang.UnsupoprtedOperationException
答案 0 :(得分:7)
Collection#nCopies会创建不可变列表,因此您无法在其上使用set
。
for (int i = 0; i < 500; i++) {
list.add(i, 1000);
}
在List#add的这种用法中,您要添加的数字不在列表的末尾,而是添加到指定的位置。
尝试这样填写列表:
for (int i = 0; i < 500; i++) {
list.add(1000);
}
(正如其他人所指出的那样,这似乎并没有在这个特殊情况下产生影响。)
您可以将两种方法合并到
list.addAll(Collections.nCopies(500, 1000));
答案 1 :(得分:0)
嘿我编译你的代码并打印输出。它显示正确的结果。只是检查你打印列表的方式。使用: -
for(int i=0;i<10;i++)
{
System.out.println(list.get(i));
}