2 sinat 32906793 sinat_32906793 于 2016.01.21 19:48 提问

java集合父集和子集操作异常

创建list集合添加元素sublist()得到子集,为什么不能对父集进行增删等操作??运行抛出concurrentmodification

2个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.01.21 21:02
已采纳

出现这个异常存在的原因是在遍历集合的同时,又对集合元素进行修改导致的。比如这段代码:

    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("hello");
        list.add("world");
        List<String> subList = list.subList(1, 2);
        list.add("to");
        System.out.println(subList);
    }

分析下这个问题产生的原因:ArrayList的实现是基于数组的,它维护了一个Object[]数组对象。
跟踪下subList方法的源码就知道,subList操作返回的新的List,它的数组引用跟原来的父列表是同一个,只是索引的起止值不同罢了。
所以上述代码先对父类集合add操作了,然后又遍历子集合对象时,就会抛出上述异常了。
至于上述异常产生的原因,参考一楼。即遍历集合的同时又对集合进行修改的话,就会报java.util.ConcurrentModificationException异常了。

sinat_32906793
sinat_32906793 谢谢二位
2 年多之前 回复
wojiushiwo945you
wojiushiwo945you 但是如果不涉及到遍历操作即注释掉最后一行,就没有错误了。
2 年多之前 回复
caozhy
caozhy   Ds   Rxr 2016.01.21 19:55
sinat_32906793
sinat_32906793 就是创建一个父集有四个元素,获取了两个元素的子集合,然后对父集合做添加一个元素的操作,抛出了concurrentmodification异常,若是没有子集或者只对子集合做添加操作没有任何异常
2 年多之前 回复
sinat_32906793
sinat_32906793 那个网址里说明的是迭代时的修改会有异常,我在没有使用迭代时对父集合的操作抛出了一场
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Java递归求某个集合的所有子集组成的集合,即幂集
方法很简单,递归。package com.junoflo;import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.List; import java.util.Scanner;/**
sql如何根据父集编号查询多集子集
这里用到了一个函数with WITH CategoryInfo AS( SELECT StuId,StuName,StuParent FROM dbo.Class WHERE StuId = id UNION ALL SELECT a.StuId,a.StuName,a.StuParent FROM dbo.Class AS a,CategoryInfo AS b WHERE a.StuI
JQ-判断子集-作用父集-[基础]
JS判断 判断子集是否为空,父集隐藏; 判断图片是否为空,图片父集隐藏; $(".pic img[src='']").parent(".pic").hide();
集合的父子类关系
一.Collection的父子类关系 1.Iterable(java集合的顶级接口之一)——实现此接口的类可以使用新的for循环 2.Iterator(接口,遍历器)ListIterator 方法:hasNext();next();remove(); 3.Collection(接口,继承Iterable) 方法: add();addAll();remove();removeAl
Java中集合的方法及子集(上)
package javaStudy; import java.util.ArrayList;//导入集合中的ArrayList类包 /** * * @author zhaocx1 * */ /* * Collection[List(ArrayList)(LinkedList)(Vector)] Set[(Hashset)(TreeSet)] * 为什么会出现这么多的容器呢? 因
linq 根据子集合的字段获取父集合(包含父集合下的子集合)
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebApplication6 { public partial class _Defaul
输出一个集合的幂集(所有子集)
问题描述:如一个抽象集合{1,2,3},它的所有子集包括{},{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}共2的n次方个,此问题又叫求集合的幂集。 一、递归实现         减治法的减一的思想可以用到这个问题中来,对集合A={a1,a2,···,an},将其子集分为2组,一组为{a1,···,an-1}的子集,一组为{an},一旦我们得到了{a1,···,an
Java递归解决子集求和问题
子集求和问题属于难以高效解决的计算问题中的一类,用于以信息保密为目标的应用中。子集求和问题的定义为:给定一个整数集和目标值,确定是否可以找到这些整数的一个子集,使其总和等于指定的目标值。比如给定集合{-2,1,3,8}和目标值7,那么问题的答案就是是,因为有子集{-2,1,8}加起来对于7。但是如果目标值是5,答案就为否。所以我们很容易定义出递归函数原型:boolean subsetSumExis...
输出集合的所有子集(幂集)-C语言
输出集合的所有子集(幂集)-C语言#include <stdio.h> #define Length 4char array[Length] = {'1', '2', '3', '4'}; int nums[Length];void fun(int index) { if(index == Length) { printf("{ "); int i;
求集合的所有子集(java实现)
代码: import java.io.File; import java.io.FileWriter; import java.io.IOException; /* *Created on 2015年1月28日 *Copyright 2015 Y. Cai Limited crop. All Rights Reserved * *7289***0@qq.com */ public