如何巧妙的使用ArrayList的Clone方法

2021-08-20 08:49:50 字數 1198 閱讀 8976

public

object clone()

catch

(clonenotsupportedexception e)

}

當你需要使用remove方法移除掉集合中的物件,而非要修改集合中的物件的時候,可以選擇使用。

//

新增兩個元素

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方法。

public

class

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 而定義乙個全域...