Exception in thread "main" java.lang.IndexOutOfBoundsException: Source does not fit in dest

版权声明:转发请标明出处,谢谢! https://blog.csdn.net/Myuhua/article/details/82349174

报错原因:目的list必须至少要与源list等长。(目的List可以比源List长度长)

解决: 它这里指的长度是List里的size()方法值,我们都知道new ArrayList()初始化的时候size()等于0,即便是你使用new ArrayList(10)来初始化,也只是预设了一个initialCapacity==10的存储空间,size()还是等于0。因此在使用Collections.copy之前,需要把目的List加一些空的元素,直到目的List的size()值与源List的size()值等长(或更长)。同理LinkedList初始化的时候size()值也是等于0。

处理错误代码前:

public class CollectionsMethodDemo {
    public static void main(String[] args) {
        List list1 = new LinkedList();
        List list2 = new LinkedList();
        for (int i = 0; i < 9; i++) {
            list1.add("a" + i);
        }    
        Collections.copy(list2, list1);
        System.out.println("list2复制后"+list2);
    }
}

结果:
报错信息
Exception in thread "main" java.lang.IndexOutOfBoundsException: Source does not fit in dest
	at java.util.Collections.copy(Collections.java:556)
	at collection.CollectionsMethodDemo.main(CollectionsMethodDemo.java:20)

处理处理代码:

public class CollectionsMethodDemo {
    public static void main(String[] args) {
        List list1 = new LinkedList();
        List list2 = new LinkedList();
        for (int i = 0; i < 9; i++) {
            list1.add("a" + i);
        }
        for (int i = 0; i < 9; i++) {
            list2.add("1");
        }
        System.out.println("list2复制前" + list2);
        Collections.copy(list2, list1);
        System.out.println("list2复制后" + list2);
    }
}
结果:
list2复制前[1, 1, 1, 1, 1, 1, 1, 1, 1]
list2复制后[a0, a1, a2, a3, a4, a5, a6, a7, a8]

若有问题欢迎大家与我互动交流,可评论,可留言,以后每周我会坚持至少更新一篇博客文章,喜欢的朋友可以加一下关注。

猜你喜欢

转载自blog.csdn.net/Myuhua/article/details/82349174