首先观察先System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)的声明:
- public static native void arraycopy(Object src, int srcPos,
- Object dest, int destPos,
- int length);
src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。
该方法是用了native关键字,调用的为C++编写的底层函数,可见其为JDK中的底层函数。
再来看看Arrays.copyOf();该方法对于不同的数据类型都有相应的方法重载。
- //复杂数据类型
- public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
- T[] copy = ((Object)newType == (Object)Object[].class)
- ? (T[]) new Object[newLength]
- : (T[]) Array.newInstance(newType.getComponentType(), newLength);
- System.arraycopy(original, 0, copy, 0,
- Math.min(original.length, newLength));
- return copy;
- }
- public static <T> T[] copyOf(T[] original, int newLength) {
- return (T[]) copyOf(original, newLength, original.getClass());
- }
由U类型复制为T类型?
original - 要复制的数组
newLength - 要返回的副本的长度
newType - 要返回的副本的类型
- //基本数据类型(其他类似byte,short···)
- public static int[] copyOf(int[] original, int newLength) {
- int[] copy = new int[newLength];
- System.arraycopy(original, 0, copy, 0,
- Math.min(original.length, newLength));
- return copy;
- }
观察其源代码发现copyOf(),在其内部创建了一个新的数组,然后调用arrayCopy()向其复制内容,返回出去。
总结:
1.copyOf()的实现是用的是arrayCopy();
2.arrayCopy()需要目标数组,对两个数组的内容进行可能不完全的合并操作。
3.copyOf()在内部新建一个数组,调用arrayCopy()将original内容复制到copy中去,并且长度为newLength。返回copy;
转载
http://blog.csdn.net/shijinupc/article/details/7827507
相关推荐
`System.arraycopy` 和 `Arrays.copyOf` 都是Java中用于复制数组的方法,但它们在使用和处理异常情况上有所不同。这两个方法在处理数组复制时,提供了便利和效率,但各有其适用场景。 `System.arraycopy` 是一个...
System.arraycopy(this.a, 0, a, 0, size); if (a.length > size) a[size] = null; return a; } @Override public E get(int index) { return a[index]; } @Override public E set(int index, E ...
通常,`System.arraycopy()`和`Arrays.copyOf()`由于其底层优化,被认为是最快的复制方法。 在实际开发中,选择哪种复制方法取决于具体需求。理解这些复制方式及其差异是提高Java编程技能的关键。通过学习和熟练...
`java.util.Arrays.copyOf()` 方法是拷贝数组的一个简单而有效的方式。该方法可以创建一个新的数组,并将原始数组的所有元素复制到新数组中。 ```java char[] sourceArr = new char[1000]; char[] destineArr =...
在C#中,我们可以使用`Buffer.BlockCopy()`方法来拼接`byte`数组,其基本用法与Java的`System.arraycopy()`类似。而在C++中,我们可能需要使用`std::copy`函数结合`std::vector`来实现相同的功能。 除了基本的数组...
Java编程语言中,数组是一种非常基础且重要的...对于大数组或需要复制部分数组的情况,`System.arraycopy()` 和 `Arrays` 类的方法可能更为高效。理解这些复制方法的原理和差异是编写健壮、无副作用的Java代码的关键。
对于基本类型数组,这是与`System.arraycopy()`等价的,而对于对象数组,它同样执行浅拷贝。 ```java int[] original = {1, 2, 3, 4, 5}; int[] copy = Arrays.copyOf(original, original.length); MyObject[] ...
目录一、深拷贝与浅拷贝解析浅拷贝深拷贝二、数组拷贝的方式1.for循环来拷贝2.System.arraycopy( )拷贝3.Arrays.copyOf( )拷贝4.clone( )拷贝5.解释三、四种拷贝方式效率比较1. System.arraycopy( )2.Arrays.copyOf...
System.arraycopy方法4. Arrays.copyOfRange方法 1. 直接赋值 在java中,我们可以将一个数组变量直接拷贝给另一个数组变量。但拷贝后,两个数组变量引用的是同一个数组。若改变其中一个数组中的内容,另一个数组也...
在Java编程语言中,了解和熟练使用常用的包以及掌握数组的复制与排序是成为Java开发者的必备技能。本文将深入探讨这两个关键知识点。 首先,Java的常用包是提供各种类和接口的基础,它们包含了实现特定功能的类库。...
} elementData = Arrays.copyOf(elementData, newCapacity); } } // 向 Vector 的末尾添加一个元素 public synchronized void add(E e) { modCount++; ensureCapacityHelper(elementCount + 1); elementData...
数组的复制:System.arraycopy(src, srcPos, dest, destPos, length); Arrays.copyOf(original, newLength); 数组的排序:排序方法和排序分类 Arrays.sort(arr);//对arr进行升序排列 2.方法(函数、过程): ...
1、Arrays.copyOf() 2、System.arraycopy() 3、Arrays.copyOfRange() 4、Object.clone() 5、for循环 6、执行效率比较 7、小结 前言 在Java中,如果A、B是基本的数据类型,可以用赋值的方式传递值。如果A、B是两个...
- 使用`System.arraycopy()`方法复制数组,格式如下:`System.arraycopy(源数组,源数组的起始位置,目标数组,目标数组的起始位置,要复制数组元素个数)`。 - 示例:`int[] a = {10, 2, 12, 34, 16, 60}; int[] ...
- 使用 `System.arraycopy()` 方法或 `Arrays.copyOf()` 方法复制数组。 - 如果复制的目标数组长度小于原数组,则多余部分会被截断;如果大于原数组,则多余部分会被填充默认值(如整型为0)。 例如: ```java int...
在性能测试中,`System.arraycopy()`表现最优,其次是`clone()`方法,而`Arrays.copyOf()`和`Arrays.copyOfRange()`的效率相近,均优于for循环。在实际应用中,应根据具体需求选择合适的复制方法。
- `System.arraycopy()`方法用于复制数组的一部分或全部到另一个数组。 - `Arrays.copyOf()`和`Arrays.copyOfRange()`用于创建数组的副本,前者复制整个数组,后者复制指定范围。 7. **数组作为方法参数**: - ...
这里`System.arraycopy`的第一个参数是要复制的源数组,第二个参数是源数组的起始索引,第三个参数是目标数组,第四个参数是目标数组的起始索引,第五个参数是要复制的元素数量。 - **使用`Arrays.copyOf`方法**:...
使用System.arraycopy()方法可以实现数组合并,例如: ```java static String[] concat(String[] a, String[] b) { String[] c = new String[a.length + b.length]; System.arraycopy(a, 0, c, 0, a.length); ...