认识ava集合

Java集合

一、集合的由来

通常,当程序运行时我们才知道创建了多少个对象。但是在程序开发过程中,根本不知道需要多少个数量的对象,也不知道它的类型。为了满足在任何时候,任何地点能创建任意数量的对象,集合便应运而生了!

二、集合是什么

java集合类存在于java.util包中,是一个用来存放对象的容器。

注意:

  1. 集合只能存放对象。比如当你存一个int类型的数据放入集合中,其实它是自动将其转换成Integer类型后存入的。
  2. 集合存放的是多个对象的引用,对象本身还是存放在堆内存中。
  3. 集合可以存放不同类型,不限数量的数据类型。

三、集合框架图
在这里插入图片描述
发现一个特点,上述所有的集合类,除了 map 系列的集合,即左边集合都实现了 Iterator 接口,这是一个用于遍历集合中元素的接口,主要hashNext(),next(),remove()三种方法。它的一个子接口 ListIterator 在它的基础上又添加了三种方法,分别是 add(),previous(),hasPrevious()。也就是说如果实现 Iterator 接口,那么在遍历集合中元素的时候,只能往后遍历,被遍历后的元素不会再被遍历到,通常无序集合实现的都是这个接口,比如HashSet;而那些元素有序的集合,实现的一般都是 LinkedIterator接口,实现这个接口的集合可以双向遍历,既可以通过next()访问下一个元素,又可以通过previous()访问前一个 元素,比如ArrayList。

还有一个特点就是抽象类的使用。如果要自己实现一个集合类,去实现那些抽象的接口会非常麻烦,工作量很大。这个时候就可以使用抽象类,这些抽象类中给我们提供了许多

现成的实现,我们只需要根据自己的需求重写一些方法或者添加一些方法就可以实现自己需要的集合类,工作量大大降低。

Java 中,如果需要实现集合的深层拷贝,可以通过以下两种方式: 1. 使用序列化和反序列化实现深拷贝 可以将集合对象序列化到一个流中,然后再从流中反序列化出一个新的集合对象,这样就可以得到一个完全独立的新集合对象。具体实现代码如下: ```java import java.io.*; public class DeepCopy { public static void main(String[] args) throws IOException, ClassNotFoundException { // 创建一个需要进行深拷贝的集合对象 List<String> list = new ArrayList<>(); list.add("Java"); list.add("Python"); list.add("C++"); // 将集合对象序列化到一个流中 ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(list); // 从流中反序列化出一个新的集合对象 ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bis); List<String> newList = (List<String>) ois.readObject(); // 验证新集合对象与原集合对象是否相同 System.out.println("原集合对象:" + list); System.out.println("新集合对象:" + newList); System.out.println("原集合对象与新集合对象是否相同:" + (list == newList)); } } ``` 2. 使用递归实现深拷贝 可以通过递归遍历集合中的每个元素,如果元素是一个集合对象,则递归调用该方法进行深拷贝。具体实现代码如下: ```java import java.util.*; public class DeepCopy { public static void main(String[] args) { // 创建一个需要进行深拷贝的集合对象 List<Object> list = new ArrayList<>(); list.add("Java"); list.add(Arrays.asList("Python", "C++")); // 深拷贝集合对象 List<Object> newList = deepCopy(list); // 验证新集合对象与原集合对象是否相同 System.out.println("原集合对象:" + list); System.out.println("新集合对象:" + newList); System.out.println("原集合对象与新集合对象是否相同:" + (list == newList)); } public static List<Object> deepCopy(List<Object> list) { List<Object> newList = new ArrayList<>(); for (Object obj : list) { if (obj instanceof List) { newList.add(deepCopy((List<Object>) obj)); } else { newList.add(obj); } } return newList; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值