導航:首頁 > 編程語言 > 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相關的資料

熱點內容
android文件分區 瀏覽:368
南京開通數控螺紋編程 瀏覽:290
伺服器與ups用什麼線 瀏覽:967
unix網路命令 瀏覽:48
程序員表白代碼大全可復制 瀏覽:365
手機如何共享web伺服器 瀏覽:956
php介面有什麼用 瀏覽:382
iis如何安裝php 瀏覽:791
k5嗜血魔鍵安卓怎麼調好用 瀏覽:834
建行app中如何添加銀行卡 瀏覽:281
簡便演算法100點 瀏覽:161
如何創新我的世界伺服器 瀏覽:882
戰地怎麼看伺服器地址 瀏覽:348
vue怎麼打包放上伺服器 瀏覽:165
為什麼安卓服夏日活動沒有兔子頭 瀏覽:894
pubg為什麼顯示伺服器連接失敗 瀏覽:650
阿里雲掃碼登錄伺服器 瀏覽:971
化學基礎pdf 瀏覽:896
51單片機晶碼管 瀏覽:281
怎麼查伺服器假死原因日誌在哪看 瀏覽:277