浅谈Java中复制数组的方式
在Java里面,可以用复制语句”A=B”给基本类型的数据传递值,但是如果A,B是两个同类型的数组,复制就相当于将一个数组变量的引用传递给另一个数组;如果一个数组发生改变,那么引用同一数组的变量也要发生改变。
以下是归纳的 java 中复制数组的方法:
(1) 使用FOR循环,将数组的每个元素复制或者复制指定元素,不过效率差一点
(2) 使用clone方法,得到数组的值,而不是引用,不能复制指定元素,灵活性差一点
(3) 使用System.arraycopy(src, srcPos, dest, destPos, length)方法,推荐使用
举例:
1.使用FOR循环
int[] src={1,3,5,6,7,8}; int[] dest = new int[6]; for(int i=0;i<6;i++) dest[i] = src[i];
2.使用clone
int[] src={1,3,5,6,7,8}; int[] dest; dest=(int[]) src.clone();//使用clone创建
副本,注意clone要使用强制转换
3.使用System.arraycopy
int[] src={1,3,5,6,7,8}; int[] dest = new int[6]; System.arraycopy(src, 0, dest, 0, 6);
System提供了一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制。
其函数原型是:public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
src:源数组;;srcPos:源数组要复制的起始位置;
dest:目的数组;destPos:目的数组放置的起始位置;
length:复制的长度。
注意:src and dest都必须是同类型或者可以进行转换类型的数组。有趣的是这个函数可以实现自己到自己复制,比如:
int[] fun ={0,1,2,3,4,5,6}; System.arraycopy(fun,0,fun,3,3);
则结果为:{0,1,2,0,1,2,6};
以上介绍的就是Java语言中数组的几种复制方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
相关推荐
-
Java实现数组反转翻转的方法实例
数组翻转的方法(java实现),数组翻转,就是将数组倒置,例如原数组为:{"a","b","c","d"},那么翻转后的数组为{"d","c","b","a"}. [方法一]使用集合个工具类: Collections.reverse(ArrayList) 将数组进行反转: import java.util.ArrayList;import java
-
java实现向有序数组中插入一个元素实例
整理文档,搜刮出一个java实现向有序数组中插入一个元素,稍微整理精简一下做下分享 package cn.jbit.array; import java.util.*; public class Insert { public static void main(String[] args) { //字符排序 char[] chars = new char[9]; chars[0] = 'a'; chars[1] = 'c'; chars[2] = 'u'; chars[3] = 'b'; cha
-
java实现把对象数组通过excel方式导出的功能
一.导入相关jar包,pom依赖如下: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>RELEASE</version> </dependency> 二.开始撸代码 1.如果导出功能使用的比较多,可以将其做成一个工具类,对我下面贴出的代码进行改造 //结果返回的是写入的记录数(以下用的是自
-
java 两个数组合并的几种方法
本文介绍了java 两个数组合并的几种方法,分享给大家,也给自己留个笔记 需求:两个字符串合并(如果想去重复,参考下一篇--数组去重复及记录重复个数) //方法一 Arrays类 String[] a = {"A","B","C"}; String[] b = {"D","E"}; // List<String> list = Arrays.asList(a); --OK // List<
-
Java编程实现统计数组中各元素出现次数的方法
本文实例讲述了Java编程实现统计数组中各元素出现次数的方法.分享给大家供大家参考,具体如下: package javatest; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class NumOfEle { public static void main(String[] ar
-
java高效打印一个二维数组的实例(不用递归,不用两个for循环)
打印1个元素,不让循环变量i++,走出思维定式(执行一次循环体,就i++).public class OneForPrint2DArr { public static void main(String[] args) throws Exception { int[][] a = { { 1, 2, 3 }, { 4, 5} }; for (int i = 0, j = 0; i < a.length;) { System.out.println(a[i][j]); j++; if (j >=
-
浅谈java中的一维数组、二维数组、三维数组、多维数组
这个数组可以看做新手学习,从一维数组 到 多维 数组 循环渐进,其实看起也很简单,一看便知,众所周知,一维.二维或许经常用到,用到二维以上应该就很少了. public class test { public static void main(String[] args) { /*一维数组*/ int num[] = {0,1,2}; /*下面输出 3 行数据,0 ~ 2*/ for (int i = 0; i < num.length; i++) { System.out.println("
-
java 求解二维数组列最小值
java 求解二维数组列最小值 比较二维数组列最小值,组成一个新数组返回. 实现核心算法,不需要使用IO 输入:{{5,6,1,16},{7,3,9}} 输出:{1,3} import java.util.Arrays; public class Col { public static int[] getColMin(int a[][]) { int[] res = new int[a.length]; for (int i = 0; i < a.length; i++) { int[] s =
-
浅谈Java中复制数组的方式
在Java里面,可以用复制语句"A=B"给基本类型的数据传递值,但是如果A,B是两个同类型的数组,复制就相当于将一个数组变量的引用传递给另一个数组:如果一个数组发生改变,那么引用同一数组的变量也要发生改变. 以下是归纳的 java 中复制数组的方法: (1) 使用FOR循环,将数组的每个元素复制或者复制指定元素,不过效率差一点 (2) 使用clone方法,得到数组的值,而不是引用,不能复制指定元素,灵活性差一点 (3) 使
-
浅谈Java中的四种引用方式的区别
强引用.软引用.弱引用.虚引用的概念 强引用(StrongReference) 强引用就是指在程序代码之中普遍存在的,比如下面这段代码中的object和str都是强引用: Object object = new Object(); String str = "hello"; 只要某个对象有强引用与之关联,JVM必定不会回收这个对象,即使在内存不足的情况下,JVM宁愿抛出OutOfMemory错误也不会回收这种对象. 比如下面这段代码: public class Main { publi
-
浅谈java中String的两种赋值方式的区别
类似普通对象,通过new创建字符串对象.String str = new String("Hello"); 内存图如下图所示,系统会先创建一个匿名对象"Hello"存入堆内存(我们暂且叫它A),然后new关键字会在堆内存中又开辟一块新的空间,然后把"Hello"存进去,并且把地址返回给栈内存中的str, 此时A对象成为了一个垃圾对象,因为它没有被任何栈中的变量指向,会被GC自动回收. 直接赋值.如String str = "Hello&
-
浅谈java中HashMap键的比较方式
先看一个例子 Integer integer=12344; Integer integer1=12344; 在Java中Integer 和Integer1是不相等的,但是如果再执行如下语句 map.put(integer, 1); map.put(integer1, 2); 会发现2会把1覆盖,问题来了,明明是两个不同的对象,为什么,2会把1覆盖呢? 我们看HashMap中添加键的源代码,如下 可以发现我们传进来的键交给了一个hash的成员方法区处理,这里我们看看hash方法的源码 哦,看到这里
-
浅谈Java中Unicode的编码和实现
Unicode的编码和实现 大概来说,Unicode编码系统可分为编码方式和实现方式两个层次. 编码方式 字符是抽象的最小文本单位.它没有固定的形状(可能是一个字形),而且没有值."A"是一个字符,"€"也是一个字符.字符集是字符的集合.编码字符集是一个字符集,它为每一个字符分配一个唯一数字. Unicode 最初设计是作为一种固定宽度的 16 位字符编码.也就是每个字符占用2个字节.这样理论上一共最多可以表示216(即65536)个字符.上述16位统一码字符构成基
-
浅谈Java中的可变参数
可变参数 可变参数就是一个方法可以接收任意多个参数!例如:fun().fun(1).fun(1,1).fun(1,1,1).你可能认为这是方法重载,但这不是重载,你想想重载能重载多少个方法,而fun()方法是可以传递任何个数的参数,你能重载这么多个方法么? 2.1 定义可变参数方法 public voidfun(int- arr) {} 上面方法fun()的参数类型为int-,其中"-"不是省略号,而是定义参数类型的方式.参数arr就是可变参数类型.你可以把上面代码理解为:public
-
浅谈java中OO的概念和设计原则(必看)
一.OO(面向对象)的设计基础 面向对象(OO):就是基于对象概念,以对象为中心,以类和继承为构造机制,充分利用接口和多态提供灵活性,来认识.理解.刻划客观世界和设计.构建相应的软件系统.面向对象的特征:虽然各种面向对象编程语言相互有别,但都能看到它们对面向对象基本特征的支持, 即 "抽象.封装.继承.多态" : – 抽象,先不考虑细节 – 封装,隐藏内部实现 – 继承,复用现有代码 – 多态,改写对象行为 面向对象设计模式:是"好的面向对象设计",所谓"
-
浅谈Java中几种常见的比较器的实现方法
在Java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题. 通常对象之间的比较可以从两个方面去看: 第一个方面:对象的地址是否一样,也就是是否引用自同一个对象.这种方式可以直接使用"=="来完成. 第二个方面:以对象的某一个属性的角度去比较. 从最新的JDK8而言,有三种实现对象比较的方法: 一.覆写Object类的equals()方法: 二.继承Comparable接口,并实现compareTo()方法: 三.定义一个单独的对象比较器,继承自Comparator接口
-
浅谈java中类名.class, class.forName(), getClass()的区别
Class对象的生成方式如下: 1.类名.class 说明: JVM将使用类装载器, 将类装入内存(前提是:类还没有装入内存),不做类的初始化工作.返回Class的对象 2.Class.forName("类名字符串") (注:类名字符串是包名+类名) 说明:装入类,并做类的静态初始化,返回Class的对象 3.实例对象.getClass() 说明:对类进行静态初始化.非静态初始化:返回引用o运行时真正所指的对象(因为:子对象的引用可能会赋给父对象的引用变量中)所属的类的Cla
-
浅谈Java中的final关键字与C#中的const, readonly关键字
在编程语言中都有某种方式,告知编译器一块数据是恒定不变的.有两个需求 1. 一个永不改变的编译器常量 2. 一个在运行时被初始化的值,而这个值不会被改变 在Java中,使用final修饰变量实现这两个需求 <pre name="code" class="java">//编译器常量 private final int valueOne = 9; private static final int VALUE_TWO = 99; public static f
随机推荐
- AngularJS压缩JS技巧分析
- JSP学习心得
- 20款效果非常棒的 jQuery 插件小结分享
- JavaScript/jQuery 表单美化插件小结
- iis 多少用户共用一个应用程序池是什么意思?
- 关于shell命令的定向输出 2>&1
- bootstrap table表格插件使用详解
- js取值中form.all和不加all的区别介绍
- js删除Array数组中指定元素的两种方法
- PHP设计模式之观察者模式实例
- Windows系统下Node.js的简单入门教程
- 单例模式垃圾回收_动力节点Java学院整理
- 一些 T-SQL 技巧
- haproxy+keepalived实现高可用负载均衡(理论篇)
- bootstrap switch开关组件使用方法详解
- 解决IE7不能自动完成表单的问题
- 非常好的网站生成静态页面防采集策略与方法
- Java中使用Preferences 的 API设置用户偏好
- Android调用系统自带的分享功能实例代码
- Android下SDL2实现五子棋游戏