經(jīng)常我們要?jiǎng)h除集合中的某些元素 有些可能會(huì)這么寫
創(chuàng)新互聯(lián)建站是一家專業(yè)從事網(wǎng)站建設(shè)、成都網(wǎng)站制作的網(wǎng)絡(luò)公司。作為專業(yè)網(wǎng)絡(luò)公司,創(chuàng)新互聯(lián)建站依托的技術(shù)實(shí)力、以及多年的網(wǎng)站運(yùn)營經(jīng)驗(yàn),為您提供專業(yè)的成都網(wǎng)站建設(shè)、營銷型網(wǎng)站及網(wǎng)站設(shè)計(jì)開發(fā)服務(wù)!
復(fù)制代碼 代碼如下: public void operate(List list){ for (Iterator it = list iterator(); it hasNext();) { String str = (String)it next(); if (str equals("chengang")){ list remove(str); } } }
這種寫法一運(yùn)行就會(huì)報(bào)如下異常
Exception in thread "main" java util ConcurrentModificationException at java util AbstractList$Itr checkForComodification(AbstractList java: )
因?yàn)閘ist在循環(huán)中的時(shí)候是不可以刪除它的元素的 后來我是這樣做的 一種很笨的方法 思路是這樣的 創(chuàng)建一個(gè)List專門存放要被刪除的元素 循環(huán)過后 用List removeAll方法把元素刪除 代碼如下
復(fù)制代碼 代碼如下: 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); }
這樣也確實(shí)可以解決問題了 但是方法實(shí)在太笨重 其實(shí)可以有更簡(jiǎn)單的更高效的方法 就是用Iterator remove方法 如下
復(fù)制代碼 代碼如下: 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
同意用存儲(chǔ)過程。用存儲(chǔ)過程的時(shí)候,你可以定義Handler,可以根據(jù)SQLSTATE來判斷,如果發(fā)現(xiàn)刪除失敗,而且是由于外鍵引起的(有對(duì)應(yīng)的SQLSTATE代碼的,不同sql方言可能不同),那么就不能刪除。可以返回錯(cuò)誤代碼
另外,JAVA里面,其實(shí)你只要catch到sqlexception,管它是什么錯(cuò)誤呢?如果SQLEXCEPTION發(fā)生(1是SQL系統(tǒng)掛了,你的例子中2 是由于刪除失敗(外鍵)。不管什么情況,都表征失敗了。不就可以了?
根據(jù)ER圖來判斷是否有外鍵,這樣可行嗎?
這樣JAVA代碼就要依靠ER圖了,實(shí)際開發(fā)中,這種后期維護(hù)挺不容易的。盡量要避免這種代碼依賴。
這種題,其實(shí)是考察你對(duì)數(shù)組的理解。
實(shí)際工作上,一般用List。區(qū)別在于,List可動(dòng)態(tài)分配空間,數(shù)組長(zhǎng)度是定死的。
List其實(shí)是對(duì)數(shù)組的封裝,底層也是數(shù)組。
解決這個(gè)問題的思路(假設(shè)刪除一個(gè)元素):
創(chuàng)建一個(gè)新的數(shù)組,長(zhǎng)度為原來數(shù)組減1;
循環(huán)復(fù)制,匹配的不復(fù)制,不匹配的復(fù)制到新數(shù)組;
代碼如下:
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();
}
}