解决方案 »

  1.   

    public class FillingList {
    public static void main(String[] args){

    List<StringAddress> list=new ArrayList<StringAddress>(
    Collections.nCopies(4, new StringAddress("hello")));

    System.out.println(list);
    Collections.fill(list, new StringAddress("world"));
    System.out.println(list);
    }
    }
    这样也是可以运行的,为什么把list单独用nCopies赋值就不行呢
      

  2.   

    我看了一下nCopies方法的源码,它返回的是Collections的一个内部类对象CopiesList。
    而此时你把这个对象的引用赋值给了list,当你用Collections.fill()进行操作时,它其实调用的是List的set方法,此时实际上是用CopiesList里面的set方法了,因为引用指向的是这个对象的实例。
    CopiesList是继承了AbstractList的,我觉得可能是两者的set方法不一致的原因吧,我也讲得不是很清楚。但是看了源码之后,但觉是有点问题。
      

  3.   

    这个Collections.nCopies效果和Arrays.asLIst()有些相似,Arrays.asLIst()返回的是一个不可改变的列表,如果你试图在上面进行赋值操作就会抛出UnsupportedOperationException。Thinking In java 里面有介绍,可以去看看