=
对工具类来说,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
NULL 博文链接:https://langyu.iteye.com/blog/1167581
09.java基础拾遗--类的加载和对象的构造过程.mp4
java8 源码 ...工具类 │ └─mq 消息队列 │ └─kafka └─resources 消息队列源码会作专题研究 关于消息队列使用参考另一个库:https://github.com/GitJavaProgramming/springboot_mybatis 参考资料
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
java知识拾遗--三大框架的技术起源.pdfjava知识拾遗--三大框架的技术起源.pdf
Struts、Hibernate和Spring是我们Java开发中的常用的框架,他们分别针对不同的应用场景给出最合适的解决方案。但你是否知道,这些知名框架最初是怎样产生的?
java知识拾遗--三大框架的技术起源.docxjava知识拾遗--三大框架的技术起源.docx
17. 拾遗物品登记表.pdf
Java学习笔记 入门准备 接触物件 物件向导 资源管理 物件容器 输入输出 執行緒 反射 metadata 资料库 拾遗补缺 视窗程式 参考资料
拾遗·椰雕.css
小学语文教学点滴拾遗
拾遗物品的处理.doc
初中语文文摘社会西游拾遗
常见iphone面试题及答案拾遗,对于面试ios的你肯定会有帮助的。
奥数拾遗201812171
可以关注公众号“拾遗自陈”,回复“五子棋”三个字获得百度网盘下载地址。 自己开发的基于alpha-beta剪枝算法的五子棋游戏,具有悔棋,可选择禁手,支持人机对战,人人...整个系统基于Java语言开发,界面美观大方。