经常我们要删除集合中的某些元素 有些可能会这么写
创新互联建站是一家专业从事网站建设、成都网站制作的网络公司。作为专业网络公司,创新互联建站依托的技术实力、以及多年的网站运营经验,为您提供专业的成都网站建设、营销型网站及网站设计开发服务!
复制代码 代码如下: public void operate(List list){ for (Iterator it = list iterator(); it hasNext();) { String str = (String)it next(); if (str equals("chengang")){ list remove(str); } } }
这种写法一运行就会报如下异常
Exception in thread "main" java util ConcurrentModificationException at java util AbstractList$Itr checkForComodification(AbstractList java: )
因为list在循环中的时候是不可以删除它的元素的 后来我是这样做的 一种很笨的方法 思路是这样的 创建一个List专门存放要被删除的元素 循环过后 用List removeAll方法把元素删除 代码如下
复制代码 代码如下: public void operate(List list){ List removeList= new ArrayList(); for (Iterator it = list iterator(); it hasNext();) { String str = (String)it next(); if (str equals("chengang")){ removeList add(str); } } list removeAll(removeList); }
这样也确实可以解决问题了 但是方法实在太笨重 其实可以有更简单的更高效的方法 就是用Iterator remove方法 如下
复制代码 代码如下: for (Iterator it = list iterator(); it hasNext();) { String str = (String)it next(); if (str equals("chengang")){ it remove(); } } lishixinzhi/Article/program/Java/JSP/201311/19832
同意用存储过程。用存储过程的时候,你可以定义Handler,可以根据SQLSTATE来判断,如果发现删除失败,而且是由于外键引起的(有对应的SQLSTATE代码的,不同sql方言可能不同),那么就不能删除。可以返回错误代码
另外,JAVA里面,其实你只要catch到sqlexception,管它是什么错误呢?如果SQLEXCEPTION发生(1是SQL系统挂了,你的例子中2 是由于删除失败(外键)。不管什么情况,都表征失败了。不就可以了?
根据ER图来判断是否有外键,这样可行吗?
这样JAVA代码就要依靠ER图了,实际开发中,这种后期维护挺不容易的。尽量要避免这种代码依赖。
这种题,其实是考察你对数组的理解。
实际工作上,一般用List。区别在于,List可动态分配空间,数组长度是定死的。
List其实是对数组的封装,底层也是数组。
解决这个问题的思路(假设删除一个元素):
创建一个新的数组,长度为原来数组减1;
循环复制,匹配的不复制,不匹配的复制到新数组;
代码如下:
public class $ {
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5 };
System.out.print("删除前:");
show(arr);
// ///////////////////////////////////
int[] brr = new int[arr.length - 1];
int idx = 0;
for (int i : arr) {
if (i != 3) {
brr[idx++] = i;
}
}
// ///////////////////////////////////
System.out.print("删除后:");
show(brr);
}
private static void show(int[] arr) {
for (int i : arr) {
System.out.print(i + ",");
}
System.out.println();
}
}