Java集合类是Java编程中的一个重要组成部分,它们提供了丰富的数据结构和操作方法,帮助开发者更高效地处理数据,在Java集合类中,有一个非常实用的类叫做List
,它是一个有序的、可重复的集合,本文将详细介绍Java集合类中的List
接口及其实现类,以及它们的深拷贝实例用法。
List接口及常用实现类
1、1 List接口
List
接口是Java集合框架中的一部分,它继承了Collection
接口。List
接口的主要特点是:元素有序、可重复、可索引。List
接口定义了一些基本的操作方法,如添加、删除、修改元素等。
1、2 ArrayList类
ArrayList
是List
接口的一个常用实现类,它实现了基于数组的数据结构。ArrayList
的优点是插入和删除操作的时间复杂度为O(1),但是它的缺点是不支持随机访问,因为它是基于数组实现的,所以访问元素需要通过索引。
1、3 LinkedList类
LinkedList
也是List
接口的一个常用实现类,它实现了基于双向链表的数据结构。LinkedList
的优点是支持随机访问,因为它是基于链表实现的,所以访问元素不需要通过索引,但是它的缺点是插入和删除操作的时间复杂度为O(n)。
1、4 Stack类
Stack
是List
接口的一个特殊实现类,它实现了一个后进先出(LIFO)的数据结构。Stack
的主要操作方法有:压栈(push)、弹栈(pop)、查看栈顶元素(peek)等。
List的深拷贝实例用法
2、1 浅拷贝
浅拷贝是指创建一个新的对象,然后将原对象的非静态成员变量的引用复制到新对象中,这样,如果原对象的成员变量发生变化,那么新对象的成员变量也会发生变化,要实现浅拷贝,可以使用clone()
方法,需要注意的是,如果成员变量是引用类型,那么需要对引用类型进行深拷贝。
import java.util.ArrayList; import java.util.List; public class ShallowCopyDemo { public static void main(String[] args) { List<String> list1 = new ArrayList<>(); list1.add("A"); list1.add("B"); list1.add("C"); List<String> list2 = list1.clone(); // 浅拷贝 } }
2、2 深拷贝
深拷贝是指创建一个新的对象,并将原对象的所有成员变量都复制到新对象中,这样,如果原对象的成员变量发生变化,那么新对象的成员变量不会发生变化,要实现深拷贝,可以使用序列化和反序列化的方法,需要注意的是,如果成员变量是引用类型,那么需要对引用类型进行深拷贝,由于Java没有提供直接实现深拷贝的机制,因此需要自己实现深拷贝的方法。
import java.io.*; import java.util.ArrayList; import java.util.List; public class DeepCopyDemo { public static void main(String[] args) throws IOException, ClassNotFoundException { List<String> list1 = new ArrayList<>(); list1.add("A"); list1.add("B"); list1.add("C"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(list1); // 将list1序列化到字节数组中 oos.close(); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bais); List<String> list2 = (List<String>) ois.readObject(); // 从字节数组中反序列化得到list2,即为深拷贝后的list2 } }
相关问题与解答
3、1 如何判断一个对象是否为浅拷贝?
答:可以通过判断对象的内存地址来判断一个对象是否为浅拷贝,如果两个对象的内存地址相同,那么它们就是浅拷贝;否则,它们就是深拷贝,可以使用System.identityHashCode()
方法获取对象的内存地址。
if (System.identityHashCode(obj1) == System.identityHashCode(obj2)) { System.out.println("obj1 and obj2 are shallow copies"); // obj1 and obj2 are shallow copies } else { System.out.println("obj1 and obj2 are deep copies"); // obj1 and obj2 are deep copies }
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/128988.html