java复制那些事
2015-12-18 20:31
555 查看
在开发中,复制是我们经常遇到的。
今天用arraylist来对比一下java中collections的几种复制:
=
clone()
new arraylist(arraylist)
Collections.copy
我们可以写一个这样的程序
public class COPY {
static ArrayList<Integer> arrayList1;
static ArrayList<Integer> arrayList2;
static ArrayList<Integer> arrayList3;
public static void main(String[] args) {
arrayList1 = new ArrayList<>();
arrayList2 = new ArrayList<>();
for (int i = 0; i < 10; i++) {
arrayList1.add(i);
}
//=
arrayList2 = arrayList1;
if (arrayList2 == arrayList1) {
System.out.println("==指向对象");
}
//copy
arrayList1 = new ArrayList<>();
arrayList2 = new ArrayList<>();
arrayList2 = (ArrayList<Integer>) arrayList1.clone();
if (arrayList2 != arrayList1) {
System.out.println("clone()创建新对象");
}else {
System.out.println("clone()指向对象");
}
//new Arraylist(old_arraylist)
arrayList1 = new ArrayList<>();
arrayList2 = new ArrayList<>();
arrayList3 = arrayList2;
for (int i = 0; i < 10; i++) {
arrayList1.add(i);
}
arrayList2 = new ArrayList<>(arrayList1);
if (arrayList2 == arrayList1) {
System.out.println("new Arraylist(old_arraylist)指向对象");
}else {
System.out.println("new Arraylist(old_arraylist)不指向对象");
}
if (arrayList2 == arrayList3) {
System.out.println("new Arraylist(old_arraylist)只复制数值");
}else {
System.out.println("new Arraylist(old_arraylist)创建新的对象");
}
arrayList1 = new ArrayList<>();
arrayList2 = new ArrayList<>();
arrayList3 = arrayList2;
for (int i = 0; i < 10; i++) {
arrayList1.add(i);
}
for (int i = 10; i < 20; i++) {
arrayList2.add(i);
}
//注意,copy需要两个collection对象size相同
Collections.copy(arrayList2, arrayList1);
System.out.println(arrayList2);
if (arrayList2 == arrayList1) {
System.out.println("Collections.copy指向对象");
}else {
System.out.println("Collections.copy不指向对象");
}
if (arrayList3 == arrayList2) {
System.out.println("Collections.copy只复制数值");
}else {
System.out.println("Collections.copy创建新的对象");
}
}
}
他的输出结果是这样的:
==指向对象
clone()创建新对象
new Arraylist(old_arraylist)不指向对象
new Arraylist(old_arraylist)创建新的对象
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Collections.copy不指向对象
Collections.copy只复制数值
今天用arraylist来对比一下java中collections的几种复制:
=
clone()
new arraylist(arraylist)
Collections.copy
我们可以写一个这样的程序
public class COPY {
static ArrayList<Integer> arrayList1;
static ArrayList<Integer> arrayList2;
static ArrayList<Integer> arrayList3;
public static void main(String[] args) {
arrayList1 = new ArrayList<>();
arrayList2 = new ArrayList<>();
for (int i = 0; i < 10; i++) {
arrayList1.add(i);
}
//=
arrayList2 = arrayList1;
if (arrayList2 == arrayList1) {
System.out.println("==指向对象");
}
//copy
arrayList1 = new ArrayList<>();
arrayList2 = new ArrayList<>();
arrayList2 = (ArrayList<Integer>) arrayList1.clone();
if (arrayList2 != arrayList1) {
System.out.println("clone()创建新对象");
}else {
System.out.println("clone()指向对象");
}
//new Arraylist(old_arraylist)
arrayList1 = new ArrayList<>();
arrayList2 = new ArrayList<>();
arrayList3 = arrayList2;
for (int i = 0; i < 10; i++) {
arrayList1.add(i);
}
arrayList2 = new ArrayList<>(arrayList1);
if (arrayList2 == arrayList1) {
System.out.println("new Arraylist(old_arraylist)指向对象");
}else {
System.out.println("new Arraylist(old_arraylist)不指向对象");
}
if (arrayList2 == arrayList3) {
System.out.println("new Arraylist(old_arraylist)只复制数值");
}else {
System.out.println("new Arraylist(old_arraylist)创建新的对象");
}
arrayList1 = new ArrayList<>();
arrayList2 = new ArrayList<>();
arrayList3 = arrayList2;
for (int i = 0; i < 10; i++) {
arrayList1.add(i);
}
for (int i = 10; i < 20; i++) {
arrayList2.add(i);
}
//注意,copy需要两个collection对象size相同
Collections.copy(arrayList2, arrayList1);
System.out.println(arrayList2);
if (arrayList2 == arrayList1) {
System.out.println("Collections.copy指向对象");
}else {
System.out.println("Collections.copy不指向对象");
}
if (arrayList3 == arrayList2) {
System.out.println("Collections.copy只复制数值");
}else {
System.out.println("Collections.copy创建新的对象");
}
}
}
他的输出结果是这样的:
==指向对象
clone()创建新对象
new Arraylist(old_arraylist)不指向对象
new Arraylist(old_arraylist)创建新的对象
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Collections.copy不指向对象
Collections.copy只复制数值
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树