关于list的 java.util.ConcurrentModificationException异常处理

今天在做一个数据处理的时候遇到一点问题,因为我需要对一个集合的数据分别截取六分之一然后赋值给六个我需要用到的List集合,然后我对每一个拿到的数据各自在增加一个数据。代码如下:

List<Bitmap> emojidata = Utils.scanSpecifyFile(getActivity(), Const.ASSETS_TYPE_EMOJI);
        List<Bitmap> emojiDataA= emojidata.subList(0, 27);      emojiDataA.add(BitmapFactory.decodeResource(this.context.getResources(), R.drawable.nim_emoji_del));
        List<Bitmap> emojiDataB = emojidata.subList(27, 54);        emojiDataB.add(BitmapFactory.decodeResource(this.context.getResources(), R.drawable.nim_emoji_del));
        List<Bitmap> emojiDataC = emojidata.subList(54,81);     emojiDataC.add(BitmapFactory.decodeResource(this.context.getResources(), R.drawable.nim_emoji_del));
        List<Bitmap> emojiDataD = emojidata.subList(81,108);        emojiDataD.add(BitmapFactory.decodeResource(this.context.getResources(), R.drawable.nim_emoji_del));

然后就意外的得到了java.util.ConcurrentModificationException这个“大奖”。由于我是第一次遇到这种问题,上网查询之后了解到这个异常一般是由于对list数据进行迭代的过程中对数据进行了增减的操作,导致了这个异常。但是我一直没有做迭代的操作,所以一直没有找到合适的解决方法。
后来得到高人指点,将数据截取该为复制:

emojiDataA= new ArrayList<Bitmap>(emojidata.subList(0, 27));
        emojiDataB = new ArrayList<Bitmap>(emojidata.subList(27, 54));
        emojiDataC = new ArrayList<Bitmap>(emojidata.subList(54,81));
        emojiDataD = new ArrayList<Bitmap>(emojidata.subList(81,108));

上面的问题就解决了。但是为什么这样就解决了问题呢?高人不肯定的讲:因为对母数据集合截取到的子list进行了增加数据,导致母集合的数据增加,所以就造成了迭代异常java.util.ConcurrentModificationException。
最后我也不确定是不是这么一回事,但是list集合的java.util.ConcurrentModificationException异常确实就这样解决了!!

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Vicent_9920/article/details/51723889
文章标签: 异常处理 数据 List
个人分类: 异常处理
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭