=
对工具类来说,copyOfRange 最好用。
这个类底层调用了System.copyarray()方法 ,但其核心是“支持泛型”!如何做到的?
这就涉及到了new一个泛型T对象的问题了。我们的代码不在运行时,怎么new一个T对象?
这里用到了Array类的底层方法,一个hack。
private static native Object newArray(Class<?> componentType, int length) throws NegativeArraySizeException;
这里虽然返回的是一个Object,但其真实却是一个真正的T类型对象,这样上层就可以使用强制转换了:
T[] copy = ((Object)newType == (Object)Object[].class) ? (T[]) new Object[newLength] : (T[]) Array.newInstance(newType.getComponentType(), newLength);
否则,我们自己写工具类,需要使用new Object[10],这样强制转换就不行了(报错)。
=
方法二:整体拷贝,使用Arrays.copyOf(int[] original, int newLength)
int[] original:需要拷贝的数组
int newLength:新的长度(可以给数组扩容 2*ret.length数组长度扩2倍)
代码:
public static void main2(String[] args) {
int[] array={1,2,3,4,5,6};
int[] ret=Arrays.copyOf(array,array.length);
System.out.println(Arrays.toString(ret));
}
方法三:拷贝某个范围,使用copyOfRange(int[] original, int from, int to)
int[] original:需要拷贝的数组
int from:从拷贝数组的起始下标
int to:拷贝数组的结束下标
代码:
public static void main3(String[] args) {
int[] array={1,2,3,4,5,6};
int[] ret=Arrays.copyOfRange(array,1,3);/*[1,3)*/
System.out.println(Arrays.toString(ret));
}
方法四:使用 public static native void arraycopy(Object src, int srcPos,Object dest,int destPos,int length)
Object src:要拷贝的数组 int srcPos:原始数组拷贝起始位
Object dest:拷贝的新数组 int destPos:新数组拷贝起始位
int length:要拷贝的数组长度
native:指的是本地方法,有以下特点:
- 是由C/C++代码实现的
- 运行速度很快
- 运行位置在本地方法栈
代码:
public static void main4(String[] args) {
int[] array={1,2,3,4,5,6};
int[] ret=new int[array.length];
System.arraycopy(array,0,ret,0,array.length);
System.out.println(Arrays.toString(ret));
}
方法五:使用对象的clone()方法
代码:
public static void main5(String[] args) {
int[] array={1,2,3,4,5,6};
int[] ret=array.clone();
System.out.println(Arrays.toString(ret));
}
=
=
=
相关推荐
10.java基础拾遗--匿名内部类的应用--实现scala中的集合map方法.mp4
11.java基础拾遗--匿名内部类语法详解.mp4
Java知识拾遗:三大框架的技术起源 本篇文章主要讲述了Java开发中三大框架的技术起源,即Struts、Hibernate和Spring框架。这些框架是我们Java开发中的常用的框架,它们分别针对不同的应用场景给出最合适的解决方案...
NULL 博文链接:https://langyu.iteye.com/blog/1167581
09.java基础拾遗--类的加载和对象的构造过程.mp4
java回顾、知识整理、拾遗、面试_java-review
java8 源码 ...工具类 │ └─mq 消息队列 │ └─kafka └─resources 消息队列源码会作专题研究 关于消息队列使用参考另一个库:https://github.com/GitJavaProgramming/springboot_mybatis 参考资料
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
Java集合框架是管理对象的主要工具,包括List、Set、Map等接口及其实现类。掌握ArrayList、LinkedList、HashSet、HashMap等常用容器的使用方法,理解它们之间的区别和应用场景。 **输入输出** Java的I/O流处理涵盖...
FastCopy是一款高效、轻量级的文件复制工具,尤其在处理大量数据传输时表现出色。描述提到,它能显著提高文件传输速度,尤其是在传输十几GB的大文件时,可以在3分钟左右完成,比常规方法快2到3倍,这体现了其在速度...
读书笔记:算法 并发 函数式编程 java语言拾遗 手写设计模式
Java开发中的三大框架——Struts、Hibernate和Spring,都是为了解决传统Java Web应用程序中存在的一系列问题而诞生的。这些框架分别针对MVC模式的实现、数据持久化和依赖管理给出了高效且灵活的解决方案。 Struts...
Java开发中的三大框架,即Struts、Hibernate和Spring,各自解决了传统Java Web应用程序中的不同问题,提升了开发效率和代码质量。下面将详细讲解这三个框架的技术起源及其核心功能。 首先,Struts框架诞生于解决JSP...
#### 一、Java语言拾遗 ##### 1、Vector与ArrayList - **起源与版本**:`Vector` 类自 JDK 1.0 就已存在,从 Java 2 平台 v1.2 开始进行了改进,实现了 `List` 接口,使其成为 Java Collections Framework 的一...
面向对象编程(OOP)是Java的核心特性,包括类、对象、封装、继承、多态等概念。学习面向对象,你需要理解如何定义类并创建对象,以及如何通过对象进行交互。封装是将数据和方法打包在一起,隐藏实现细节;继承允许...
17. 拾遗物品登记表.pdf
我们可能涉及数据库管理工具(如MySQL Workbench、phpMyAdmin)、数据库性能分析工具(如Percona Toolkit、Oracle Enterprise Manager)、内存分析工具(如MAT - Memory Analyzer Tool for Java)以及各种版本控制...
拾遗·椰雕.css