javalist的復制
A. 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]
望採納
B. java拷貝文件中一行內容
可以按行讀取一行,然後寫入你指定的文件,完畢。
可以通過Java的IO流實現txt文本的讀取,然後用readline實現按行讀取。具體代碼如下:
package test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static double[] writeToDat(String path) {
File file = new File(path);
List list = new ArrayList();
double[] nums = null;
try {
BufferedReader bw = new BufferedReader(new FileReader(file));
String line = null;
//因為不知道有幾行數據,所以先存入list集合中
while((line = bw.readLine()) != null){
list.add(line);
}
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
//確定數組長度
nums = new double[list.size()];
for(int i=0;i<list.size();i++){
String s = (String) list.get(i);
nums[i] = Double.parseDouble(s);
}
return nums;
}
public static void main(String[] args) {
String path = "d:/file4.txt";
double[] nums = writeToDat(path);
for(int i=0;i<nums.length;i++){
System.out.println(nums[i]);
}
}
}
C. 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中
}
D. 如何把一個arraylist 拷貝到另一個arraylist
1、通用的就是循環添加
2、根據各種語言,一般都有addall()或者add等介面直接把一個list添加到另一個list,比如java就有addall方法
E. 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));
}
F. java復制List最快方法是什麼
估計沒有快的。復制都是線性的。用多線程都不見得更快。重新設計演算法吧,避免復制
其他的復制方法
List<Integer> a = b.clone();
或
Collections.(a,b);
G. java list賦值問題
操作:newList = strList
說明:由於strList是一個對象,所以它們之間是按引用傳遞的,即是說newList和strList這兩個對象指向的引用地址是同一個,所以從這個方面,可以說newList和strList是一樣的。
操作:改變newList的值,strList也變了?
答:strList的值也是會改變的,這個是因為改變newList的值,即是改變了newList指向地址的值。而二者指向的地址的值是同一個,所以會一起改變。
其實這里主要理解區分好 按值傳遞 還是 按引用傳遞。
H. 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);
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));
}
運行結果如下: