导航:首页 > 编程语言 > 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相关的资料

热点内容
地铁快线和加密线 浏览:41
计算机科学程序员 浏览:356
激光手术治疗近视适合程序员吗 浏览:107
资深程序员优良习惯 浏览:358
宏晶单片机中文手册 浏览:965
主人公叫林枫的小说 浏览:772
有一个美剧学生一直想跟老师发生关系 浏览:276
kettle解压后没有bat文件 浏览:71
只剩最后一个男人的电影 浏览:577
编译原理词法未来前景 浏览:890
唐子睿 浏览:641
有弹窗广告的小说网站 浏览:744
大陆战争老电影全部 浏览:967
我的世界迪哥使用的服务器是什么 浏览:734
淘宝批量压缩图片 浏览:209
php5217漏洞 浏览:511
泰国 什么什么嫂 恐怖片 浏览:377
高中生打气球解压视频 浏览:7
无水印电影下载网站推荐 浏览:703
大尺度男性露j电影有哪些 浏览:353