導航:首頁 > 編程語言 > java克隆list

java克隆list

發布時間:2022-07-01 12:47:39

java里關於克隆的問題,所有類都是Object的子類何必在復寫clone方法

深度克隆的問題,如果類中成員包含集合類,如list等,或者包含map的,默認的clone方法為淺克隆,不會復制集合中的元素。如果復寫clone方法,則可根據需求來復製成員。

㈡ java.util.ArrayList.clone是不是徹底的克隆

先來看看 源碼 java.util.ArrayList.clone()



java.util.ArrayList.clone()返回此ArrayList實例的淺表副本(即本身是不可復制的元素)。


聲明

以下是java.util.ArrayList.clone()方法的聲明

public Object clone()


返回值

這個方法返回當前ArrayList實例的一個副本。



例子

下面的示例演示java.util.Arraylist.clone()方法的用法。

package com.yii;

import java.util.ArrayList;

public class ArrayListDemo {
public static void main(String args[]) {

// create an empty array list
ArrayList<StringBuilder> arrlist1 = new ArrayList<StringBuilder>();

// use add for new value
arrlist1.add(new StringBuilder("Learning-"));

// using clone to affect the objects pointed to by the references.
ArrayList arrlist2 = (ArrayList) arrlist1.clone();

// appending the string
StringBuilder strbuilder = arrlist1.get(0);
strbuilder.append("list1, list2-both pointing to the same StringBuilder");

System.out.println("The 1st list prints: ");

// both lists will print the same value, printing list1
for (int i = 0; i < arrlist1.size(); i++) {
System.out.print(arrlist1.get(i) + " ");
}

System.out.println("The 2nd list prints the same i.e:");

// both lists will print the same value, printing list2
for (int i = 0; i < arrlist2.size(); i++) {
System.out.print(arrlist2.get(i));
}
}
}


讓我們來編譯和運行上面的程序,這將產生以下結果:


The 1st list prints:
Learning-list1, list2 - both pointing to the same StringBuilder
The 2nd list prints the same i.e:
Learning-list1, list2 - both pointing to the same StringBuilder



結論:


java.util.ArrayList.clone()是淺層拷貝。

㈢ java 如何將一個list中的值全部復制到另一個list中

ArrayList<String> list1 = new ArrayList<String>();
list1.add("b");
list1.add("d");
// System.out.println(list1);
ArrayList<String> list2=new ArrayList<String>();
list2.addAll(list1);//將list1添加到list2中
System.out.println(list2);

㈣ java把一個list中的內容添加到另一個list中

在JAVA中,想要把一個list中的內容添加至另一個list中,有兩種方法:

  1. 採用循環的方法。通過循環第一個ArrayList,然後通過每循環一次的方式,將值賦值給另一個ArrayList。具體代碼實現如下:

2.集合是Java API所提供的一系列類,可以用於動態存放多個對象。集合與數組的不同在於,集合是大小可變的序列,而且元素類型可以不受限定,只要是引用類型。集合中不能放基本數據類型,但可以放基本數據類型的包裝類。 集合類全部支持泛型,是一種數據安全的用法。java列表是集合的一種,並且列表中的元素是有序的,且允許重復。java列表又稱為java list。

㈤ java 將一個list添加到另一個list

看cutC4定義。定義是什麼就是什麼。而且cutC2.toString得到的是字元串,所以cutC4應該是list<String>。

㈥ java復制List最快方法是什麼

估計沒有快的。復制都是線性的。用多線程都不見得更快。重新設計演算法吧,避免復制
其他的復制方法
List<Integer> a = b.clone();

Collections.(a,b);

㈦ Java。如何將一個LinkedList里的元素全部復制到另一LinkedList容器里

LinkedList的Clone()只是淺復制,也就是只能復制對象的引用,而不能再內存中新生成一個對象,所以你復制之後的LinkedList和原始的LinkedList中存儲的對象是共享的。
要想不共享,那隻能覆蓋你原始LinkedList中存放類的Clone()方法,在這個方法中new一個這個類的新實例,將對象的屬性賦值給一個新實例。
然後new一個新的LinkedList實例,遍歷原始LinkedList中的每個元素,調用這個元素的Clone(),將得到的新元素添加到新的LinkedList中。
大概的代碼意思如下
ElementClass是LinkedList中存儲的元素的類
public class ElementClass{
private String attributeOne;
......
public void setAttributeOne(String attValue){
this.attributeOne = attValue;
}
/* 覆蓋Clone方法,新建一個本類的實例,並將對象的屬性值完全復制過去*/
public Object Clone(){
ElementClass newInstance = new ElementClass();//新建一個本類實例
newInstance.setAttributeOne(this.attributeOne);//復制屬性
return newInstance;
}
}

LinkedList newList = new LinkedList();//新建一個LinkedList實例
Iterator it = oldList.iterator();獲取原始List的遍歷器
while(it.hasNext()){
newList .add(((ElementClass) it.next()).clone());//遍歷元素,將克隆的新對象加入新的List中
}

㈧ JAVA一個泛型數組List<> 怎麼復制某幾行到另外一個List<>

你明白一個單純的「?」是什麼意思嗎?它代表的是任意類型。既可以是有繼承關系的,也可以是八竿子都打不到的。比如你想寫的大約是這樣的class
gen{pulbic
<?
extends
Number>void
listMove(List
<?>list1
,
List<?>
list2,Int
i){list2.add(list1.get(i));}}但是請注意這里?號代表的是任意一個Number的子類,這意味著你如果傳入像list1
是List<Long>而list2是List<Double>這樣的同級泛型參數,就像這樣來調用這個函數list1
=
new
List<Long
>();list2
=
new
List<Double>();listMove(list1,
list2,
i);這個函數的目的顯然是把list1
的第i個元素放入list2中,但是請注意list1和list2是不相同,也沒有繼承關系的同級別類型,你正試圖把一個Long
類型放入一個只能夠放置Double類型的List
中,如果java允許你這樣來操作元素,那不是和泛型本身希望提高類型安全的目的背道而馳了嗎?這個問題里你需要注意的是,想要傳遞的類型參數是有關系的,lIst1的?號應該是list2的本身或者子類才對,你應該這樣定義你的方法,你需要對這兩個?號有一定的約束這樣來定義public
<
T
extends
Object>/*這里可以是你自己對類型的約束,我都是約束成了Object的*/void
listMove(List<?
extends
T>
list1//有條件的約束,?應該是T的子類,
List<T>
list2
,int
i){
list2.add(list1.get(i));
}

㈨ java把一個list里的數據轉移到另外一個list

java將一個list里的數據轉移到另外一個list,可以使用for語句,一次使用add方法,示例如下:

ArrayListlist1=newArrayList();
list1.add("1");
list1.add("2");
list1.add("3");
ArrayListlist2=newArrayList();
list2.add("4");
for(inti=0;i<list1.size();i++)
{
list2.add(list1.get(i));//開始復制一個list的內容到另外一個list
}
//這樣就可以用list2添加list1的所有元素了!。想把他顯示出來可以如下
for(inti=0;i<list2.size();i++)
{
System.out.println(list2.get(i));
}

運行結果如下:

㈩ java 如何指定原List其中一部分進行復制到新的list

publicstaticvoidmain(String[]args){

List<String>list1=newArrayList<String>();

List<String>list2=newArrayList<String>();list1.add("1");

list1.add("2");

list1.add("3");list2.add("a");//賦值list1前兩個到list2中

System.out.println(list2);

list2.addAll(list1.subList(0,2));//可以先按下標截取,再添加

System.out.println(list2);

}

//運行結果如下:
[a]

[a,1,2]

望採納

閱讀全文

與java克隆list相關的資料

熱點內容
電腦文件夾打開畫面塊狀 瀏覽:789
固態硬碟與機械盤的加密方法 瀏覽:634
unix編譯軟體 瀏覽:563
影視製作中西書局中央編譯出版社 瀏覽:822
變數作用域是編譯器決定的嗎 瀏覽:755
linux結構分析 瀏覽:812
程序員記錄歷史 瀏覽:798
編譯器怎麼調用構造函數的 瀏覽:97
高質量cpdf 瀏覽:824
福建電信代理伺服器雲主機 瀏覽:618
美圖看看pdf 瀏覽:432
編譯後報錯 瀏覽:294
網路設備怎麼加密 瀏覽:789
hbuilderx文件夾有哪些 瀏覽:102
空調壓縮機生產板塊 瀏覽:616
開源多媒體伺服器都有什麼 瀏覽:396
反編譯了別人的app會被發現嗎 瀏覽:918
上海光裕汽車壓縮機有限公司 瀏覽:336
連接ps4伺服器地址 瀏覽:138
新神魔大陸三星賬號是什麼伺服器 瀏覽:679