lz遇到的是src dest长度不一致,从抛出的异常可以看出
Exception in thread "main" [A, B, C, D, E, F, G, H] java.lang.IndexOutOfBoundsException
查看api帮助文档可知道,Arraylist的capacity(容纳能力大小)可以指定(最好指定)。而初始化时size的大小永远默认为0,只有在进行add和remove等相关操作 时,size的大小才变化。然而进行copy()时候,首先做的是将dest的size和src的size大小进行比较,只有当dest的 size 大于或者等于src的size时才进行拷贝,否则抛出IndexOutOfBoundsException异常
故,lz可以这样处理,两种办法,如下- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.List;
- class CollectionsDemo {
- /*
-
- //法1. 初始化是指定长度
- public static void main(String args[]){
- List<String> allList = new ArrayList<String>() ;
- allList.add("A") ;
- allList.add("B") ;
- allList.add("C") ;
- allList.add("D") ;
- allList.add("E") ;
- Collections.addAll(allList,"F","G","H") ;
- Collections.sort(allList) ;
- System.out.println(allList) ;
- List<String> twoList = new ArrayList<String>(Arrays.asList(new String[allList.size()])) ;
- //重新开辟空间,根据allList长度定义
-
- Collections.copy(twoList,allList) ;
- System.out.println(twoList) ;
- }
- */
-
- //法2.先不定义长度,默认为0
- public static void main(String args[]){
- List<String> allList = new ArrayList<String>() ;
- List<String> twoList = new ArrayList<String>() ; //重新开辟空间
- allList.add("A") ;
- allList.add("B") ;
- allList.add("C") ;
- allList.add("D") ;
- allList.add("E") ;
- Collections.addAll(allList,"F","G","H") ;
- Collections.sort(allList) ;
- System.out.println(allList) ;
- //复制之前,先为twoList追加长度,利用add方法
- Collections.addAll(twoList, new String[allList.size()]);
- Collections.copy(twoList,allList) ;
- System.out.println(twoList) ;
- }
- }
复制代码
|