public當你需要使用remove方法移除掉集合中的物件,而非要修改集合中的物件的時候,可以選擇使用。object clone()
catch
(clonenotsupportedexception e)
}
//**解讀:新增兩個元素
student stjack=new student("jack", 13);
student sttom=new student("tom", 15);
list.add(stjack);
list.add(sttom);
//轉殖
arraylistlistcopy=(arraylist) list.clone();
//移除且不修改
listcopy.remove(1);
system.out.println(list);
system.out.println(listcopy);
remove之前的:
remove之後的:
所以移除且不修改集合中的元素,只是在list內部的陣列中移除了指向元素的位址,可以放心的使用clone。
如果你想要修改轉殖後的集合,那麼轉殖前的也會被修改。那麼就需要使用深複製。通過實現物件類的clone方法。
publicclass
testclone
//移除且不修改
listcopy.get(0).setage(20);
system.out.println(list);
system.out.println(listcopy);
}}class
student
public
void
setname(string name)
public
intgetage()
public
void setage(int
age)
public student(string name, int
age)
@override
public
string tostring()
@override
protected
student clone()
}
如何巧妙地使用遞迴
以下三個條件需同時滿足 ref 乙個問題的解可以分解為幾個子問題的解 子問題與原問題除了資料規模不一樣,求解思路完全一樣 存在遞迴終止條件 兩步走 寫出遞推公式 大問題化小問題 找到終止條件 計算機擅長做重複的事情,但是人腦不是。如果看到遞迴,總是想著一層一層地遞迴展開,然後再一層一層地返回,人腦很...
如何巧妙地使用遞迴
以下三個條件需同時滿足 ref 乙個問題的解可以分解為幾個子問題的解 子問題與原問題除了資料規模不一樣,求解思路完全一樣 存在遞迴終止條件 兩步走 寫出遞推公式 大問題化小問題 找到終止條件 計算機擅長做重複的事情,但是人腦不是。如果看到遞迴,總是想著一層一層地遞迴展開,然後再一層一層地返回,人腦很...
巧妙使用std mem fun
例如 假設有如下的 class employee std vectoremps 假設我們要呼叫emps裡面所包含的所有employee的dosomething 一般初學者會這樣呼叫 for std vector iteror it emps.begin it emps.ends it 而定義乙個全域...