3

我正在尝试创建一个长度为 500 的列表,所有索引都初始化为 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

4

2 回答 2

10

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));
于 2013-10-08T05:25:19.623 回答
0

嘿,我编译了你的代码并打印了输出。它显示了正确的结果。只需检查你是如何打印列表的。使用:-

for(int i=0;i<10;i++)
 {
    System.out.println(list.get(i));
 }  
于 2013-10-08T05:33:47.050 回答