今天发现单独的将一个ArrayList的对象添加到另外一个ArrayList的时候,总是源列表和目的列表相同的内存地址。原因是因为 我用=或addall赋值,是浅拷贝。
两者的差别很大,后者是一个浅拷贝,只是对源list的元素进行拷贝,拷贝的只是引用。拷贝后两个list的元素(引用)不同,但是引用所指向的对象是一 样的。即是两个list的每个元素指向的还是通一内存。然而前者是深拷贝,不光拷贝的是src的元素(引用),src内每个元素的所指向的对象都进行一次 拷贝。即是两个list的每个元素所指向的不是同一内存。
src1.add("a");
src1.add("b");
src1.add("c");
Collections.copy(des1,src1);*/
所以使用了Collections.copy()方法来进行拷贝,但是这样就接触到了此方法所报出的异常:
使用前者进行拷贝时你又必须要注意目标链表的长度必须要比源链表的长度大或者相等。
/*如果你使用下面方法copy链表*/
/*******************************/
/*List des1=new ArrayList(3);
Collections.copy(des1,src1);*/
/*******************************/
/*将会出错,抛出数组越界异常。
当时我怎么想都想不明白为什么,明明已经设置了长度为3,为什么还会出错!
后来打印出des1.size()才知道des1的长度为0;3表示的是这个List的容纳能力为3,并不是说des1中就有了3个元素。查看api才知 道,它的capacity(容纳能力大小)可以指定(最好指定)。而初始化时size的大小永远默认为0,只有在进行add和remove等相关操作 时,size的大小才变化。然而进行copy()时候,首先做的是将desc1的size和src1的size大小进行比较,只有当desc1的size 大于或者等于src1的size时才进行拷贝,否则抛出IndexOutOfBoundsException异常。
所以可以通过下面的方法指定目标desc的大小*/
/*******************************/
List des1=new ArrayList(Arrays.asList(new Object[src1.size()]));//注意:new ArrayList(Collection col)参数必须要实现Collection 接口。
Collections.copy(des1,src1);
System.out.println("---------des1------"+des1.size());
System.out.println("---------src1------"+src1.size());
System.out.println("---------des1------"+des1.get(0));
System.out.println("---------des1------"+des1.set(0, "eqw"));
System.out.println("---------des1------"+des1.get(0));
System.out.println("---------src1------"+src1.get(0));
大家觉得这方法怎么样呢?
我刚才用的是 list<string>
如果是list<UserInfo>
而且UserInfo还有几个 set方法
所以此方式 只适用于list<string>
相关推荐
2. **`java.util.Collections`**:它是针对集合框架的工具类,提供了对List、Set、Map等各种集合的操作,如排序(`sort()`)、填充(`fill()`)和集合转换(`copy()`)等。 3. **`java.lang.Math`**:提供了各种...
对于对象类型的数组,可以使用 `java.util.Collections.copy()` 方法。但需要注意的是,此方法只适用于列表(List),因此我们需要将数组转换为列表形式。 ```java List<Character> sourceList = Arrays.asList...
请注意,实际的`unzipEntry()`方法需要实现解压缩逻辑,例如使用`Files.copy()`方法将数据从`ZipInputStream`复制到目标文件。此外,还要处理可能出现的异常,如路径不存在或权限问题等。 总结起来,Java通过内置的...
二、`java.util.Collections` 与`Arrays`类类似,`Collections`是用于操作集合框架的工具类。它可以对List、Set、Queue等进行排序、反转、查找、替换等操作。例如`sort()`可以对List进行排序,`reverse()`可以反转...
2. **`java.util.Collections`**: - 类似于`Arrays`,`Collections`提供了针对集合的各种操作,如排序(`sort()`)、反转(`reverse()`)和查找(`binarySearch()`)。它还包含了一些转换方法,如`copy()`用于复制...
1. **`java.util.Arrays`**: 这个类提供了大量用于操作数组的方法,包括排序(`sort()`)、搜索(`binarySearch()`)、复制(`copyOf()`)和填充(`fill()`)等。例如,你可以使用`Arrays.sort(int[] array)`对整型...
Collections工具类同样位于`java.util`包下,它提供了处理各种集合类型的方法: 1. `copy(List dest, List src)`: 将源列表(src)的所有元素复制到目标列表(dest)。 2. `swap(List, int i, int j)`: 交换列表中...
**Collections类** 是Java集合框架中的一个重要的工具类,主要用于提供各种实用方法来操作集合(尤其是`List`)。这些方法大多数是静态方法,可以直接通过类名调用。接下来我们将详细介绍Collections类的相关知识点...
在Java编程中,`java.util.Collections` 和 `java.util.Arrays` 是两个极为重要的类,它们为处理数据结构提供了丰富的工具和算法支持。本文旨在深入探讨Java Collections Framework中的算法部分,通过对`Arrays`类和...
如`java.util.Collections.sort()`。 6. **观察者模式**:定义对象间的一种一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。如`java.util.Observable`。 ### SQL语句的...
在Java编程中,`java.util.Collections`类扮演着极其重要的角色,它提供了一系列静态方法用于操作和处理各种类型的`Collection`。这些方法不仅简化了开发过程,提高了代码效率,还增强了程序的可读性和可维护性。...
- **Collections类**:作为集合框架的工具类,提供了对集合进行操作的方法,如`sort()`、`copy()`和`reverse()`。 2. **集合框架**: - **List接口**:有序的元素集合,允许重复元素,如ArrayList和LinkedList。 ...
例如,`Collections.sort()`方法可以对List进行排序,`Collections.copy()`用于将一个列表的内容复制到另一个列表。 以下是一个简单的`Collection`接口方法使用示例: ```java import java.util.*; public class ...
20. **排序操作**:Java的`Arrays.sort()`方法可用于数组排序,`Collections.sort()`方法用于列表排序。自定义排序规则可以通过实现`Comparator`接口。 这些练习题覆盖了Java基础语法、面向对象编程、文件操作、...
- 使用`java.util.Arrays.copyOf()`和`java.util.Collections.copy()`进行数组和集合的拷贝。 8. **Java Web**: - HTTP协议:理解请求和响应的结构,以及常见状态码的意义。 - Servlet和Filter:掌握Servlet...
2. `java.util`:这个包提供了各种实用工具类,包括集合框架(如`ArrayList`、`LinkedList`、`HashMap`等)、日期和时间操作(`Date`、`Calendar`)、随机数生成(`Random`)以及泛型工具(`Collections`)等。...
Java 1.5引入的并发容器(集中在`java.util.concurrent`包下)旨在解决这些问题。其中,`CopyOnWriteArrayList`和`CopyOnWriteArraySet`是典型的写时复制(Copy-On-Write,COW)容器,它们在写操作时创建容器副本,...
java.util.Collections类提供了许多静态方法,用于操作集合对象,如排序、反转、随机排列和搜索等。例如: - sort(List l):对List中的元素进行排序。 - shuffle(List l):将List中的元素随机排列。 - reverse(List...
3. 并发工具类:Java 5及后续版本提供了并发工具类,如`Arrays.sort()`用于排序数组,`Arrays.asList()`将数组转换为列表,`Collections.copy()`用于高效地复制数组。 4. 静态工厂方法:自Java 9起,`java.util....
- 这个标签可能是对日志系统的泛指,如Log4j、SLF4J或Java内置的日志框架java.util.logging。这些库为开发者提供了一致的日志接口,方便记录应用程序的运行信息,调试错误,以及监控系统状态。 在Java开发中,这些...