A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 心?=忐§忑] 中级黑马   /  2014-4-13 22:12  /  922 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


public class CollectionsDemo {
    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) ;
    //        List twoList = new ArrayList<String>() ;  //此处该怎么定义
            Collections.copy(twoList,allList) ;
            System.out.println(twoList) ;
    }
}

2 个回复

正序浏览
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可以这样处理,两种办法,如下
  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.List;


  4. class CollectionsDemo {
  5.          /*
  6.          
  7.         //法1. 初始化是指定长度
  8.     public static void main(String args[]){
  9.             List<String> allList = new ArrayList<String>() ;
  10.             allList.add("A") ;
  11.             allList.add("B") ;
  12.             allList.add("C") ;
  13.             allList.add("D") ;
  14.             allList.add("E") ;
  15.             Collections.addAll(allList,"F","G","H") ;
  16.             Collections.sort(allList) ;
  17.             System.out.println(allList) ;

  18.             List<String> twoList = new ArrayList<String>(Arrays.asList(new String[allList.size()])) ;  
  19.             //重新开辟空间,根据allList长度定义
  20.             
  21.             Collections.copy(twoList,allList) ;
  22.             System.out.println(twoList) ;
  23.     }
  24.     */
  25.          
  26.     //法2.先不定义长度,默认为0
  27.     public static void main(String args[]){
  28.         List<String> allList = new ArrayList<String>() ;
  29.         List<String> twoList = new ArrayList<String>() ;  //重新开辟空间
  30.         allList.add("A") ;
  31.         allList.add("B") ;
  32.         allList.add("C") ;
  33.         allList.add("D") ;
  34.         allList.add("E") ;
  35.         Collections.addAll(allList,"F","G","H") ;
  36.         Collections.sort(allList) ;
  37.         System.out.println(allList) ;
  38.         //复制之前,先为twoList追加长度,利用add方法
  39.         Collections.addAll(twoList,  new  String[allList.size()]);
  40.         Collections.copy(twoList,allList) ;
  41.         System.out.println(twoList) ;
  42. }
  43. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
  1. <p>import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.List;


  4. public class CollectionsDemo {
  5.      public static void main(String args[]){
  6.              List<String> allList = new ArrayList<String>() ;
  7.              List<String> twoList = new ArrayList<String>() ;  //去掉没用的
  8.              allList.add("A") ;
  9.              allList.add("B") ;
  10.              allList.add("C") ;
  11.              allList.add("D") ;
  12.              allList.add("E") ;
  13.              Collections.addAll(allList,"F","G","H") ;
  14.              Collections.sort(allList) ;
  15.              System.out.println(allList) ;
  16.          // List twoList = new ArrayList<String>() ;</p><p>这里用List twoList=allList; 或 </p><p>List<String> twoList = new ArrayList<String>(Arrays.asList(new String[allList.size()])); 都行</p><p>
  17.              Collections.copy(twoList,allList) ;
  18.              System.out.println(twoList) ;
  19.      }
  20. }</p>
复制代码
如果你非要保留 List<String> twoList = new ArrayList<String>() ;
那下面复制用这代码也行

for(int i=0; i<allList.size(); i++)
            {         twoList.add(allList.get(i));     }

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马