Collections.copy 报错: Source does not fit in dest

今天在使用 Collections.copy
方法时候,报错

Source does not fit in dest

自己方法中的代码如下:

List<Option> proStateList = SelectOptionsUtil.getOptionsById("prostate");
        List<Option> resultList = new ArrayList<Option>(20);// 生成新的List,防止更新操作对缓存变量影响
        Collections.copy(resultList, proStateList);//List拷贝

首先去看Collections.copy的源码:

  int srcSize = src.size();
  if (srcSize > dest.size())
            throw new IndexOutOfBoundsException("Source does not fit in dest");

发现是比较size的。

而,查看ArrayList的源码,发现使用的并没有改变size。

public ArrayList(int initialCapacity) {
        super();
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        this.elementData = new Object[initialCapacity];
    }

瞬间我就斯巴达了。

借用万能的谷歌搜索,发现:http://stackoverflow.com/questions/6147650/java-lang-indexoutofboundsexception-source-does-not-fit-in-dest

有大神遇到这个问题。

自己查看,发现可以使用如下代码直接实现。

    List<Option> proStateList = SelectOptionsUtil.getOptionsById("prostate");
        List<Option> resultList = new ArrayList<Option>(proStateList);// 生成新的List,防止更新操作对缓存变量影响

直接使用构造方法即可,无需使用copy方法。

    /**
     * Constructs a list containing the elements of the specified
     * collection, in the order they are returned by the collection's
     * iterator.
     *
     * @param c the collection whose elements are to be placed into this list
     * @throws NullPointerException if the specified collection is null
     */
    public ArrayList(Collection<? extends E> c) {
        elementData = c.toArray();
        size = elementData.length;
        // c.toArray might (incorrectly) not return Object[] (see 6260652)
        if (elementData.getClass() != Object[].class)
            elementData = Arrays.copyOf(elementData, size, Object[].class);
    }
时间: 2024-10-10 14:24:16

Collections.copy 报错: Source does not fit in dest的相关文章

maven编译报错 -source 1.5 中不支持 lambda 表达式(转)

原文链接:http://blog.csdn.net/kai161/article/details/50379418 在用maven编译项目是由于项目中用了jdk 1.8, 编译是报错  -source 1.5 中不支持 lambda 表达式,Google找到这篇解决方案,记录一下: 编译时报如下错误: [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [

maven编译报错 -source 1.5 中不支持 lambda(或diamond) 表达式,编码 UTF-8 的不可映射字符

在用maven编译项目是由于项目中用了jdk 1.8, 编译是报错  -source 1.5 中不支持 lambda 表达式. 错误原因: Maven Compiler 插件默认会加 -source 1.5 及 -target 1.5 参数来编译(估计是为了兼容一些比较老的 Linux 服务器操作系统,它们通常只有 JDK 5),而我们的代码里使用了 JDK 7/8 的语法. 解决方法: 1 <project> 2 [...] 3 <build> 4 [...] 5 <plu

myeclipse debug模式 报错source not found

myeclipse debug模式下,启动报错 source not found:SignatureParser.current() line: 解决方法:将debug视图下的右上方的jar有断点的地方去掉.ArrayIndexOutOfBoundsException: caught and uncaught  前的对钩去掉. 解决

发布自己的nuget包,报错source parameter was not specified

参考: http://blog.jobbole.com/92150/ 在执行nuget push 命令时候我的报错了source parameter was not specified, 园子里有大神帮忙了 http://www.cnblogs.com/EasonJim/p/5389605.html 评论里. 参考: https://github.com/NuGet/Home/issues/2504 换了版本的nuget.exe.

maven 报错 -source 1.5 中不支持 diamond 运算符

maven 执行install 报-source 1.5 中不支持 diamond 运算符 解决办法, 指定编译版本 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>

maven编译报错 -source 1.7 中不支持 lambda 表达式

Maven项目编译失败: [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] /opt/ihome/jenkins/jobs/dev-aladdin-order/workspace/aladdin-order-intf/src/main/java/com/ihomefnt/aladdin/common/utils/RemoteUtil.ja

maven编译报错 -source 1.5 中不支持 lambda 表达式

ji与基于maven的工程java应用程序非web应用的 参考这个https://www.cnblogs.com/softidea/p/6256543.html 但是java应用里边是没有这个配置的,然后我打开一个javaweb应用,发现里边有,抱着试一试的态度 直接随便找个工程的build部分拆过来,贴到pom.xml中就行了然后版本号改了 <build> <plugins> <plugin> <groupId>org.apache.maven.plugi

Ubuntu中使用source报错处理办法

最近一段时间在使用Bash on Ubuntu on Windows做shell脚本调试时发现在脚本中使用source时会报错,上网查了下才了解到原来是在Ubuntu中使用的并不是bash,而是使用优化过的dash,而在dash中是没有source,而在bash中才有source,这就有点麻烦了,平时在写脚本时有时会调用系统的function和一些自定义的function,没有source确实有点不太方便,而在此时可以在使用dpkg-reconfigure来修改配置dash,在平时可以用以下方法

针对CSV备份报错,Event ID:8194,Source:VSS

平台:Windows server 2012 卷类别:CSV(cluster shared volume) 存储:DELL equalogic PS 6100 软体:HIT 现象:针对CSV进行备份的时候,调用Microsoft的VSS能备份成功,但是不能调用DELL equalogic的VSS来备份,且Windows不断报以下错误:VSS 8194 经多放资料查证,本VSS报错与备份无关(Microsoft和赛门铁克都有资料说明),但是此报错看着很烦,而且过多,容易覆盖掉其他Error,解决该