-
java copyof 用法_JAVA语言的下面几种数组复制方法中,哪个效率最高?
2021-03-08 06:25:44可以看到是native方法:native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中。可以将native方法比作Java程序同C程序的接口。public static ...A、for循环的话,很灵活,但是代码不够简洁.
B、System.arraycopy()源码。可以看到是native方法:native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中。
可以将native方法比作Java程序同C程序的接口。
public static native void arraycopy(Object src, int srcPos,
Object dest, int destPos,int length);
C、选项有误,copyOf不是System的方法,而是Arrays的方法,下面是源码,可以看到本质上是调用的arraycopy方法。,那么其效率必然是比不上
arraycopy的
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;
}
D。clone的话,返回的是Object【】,需要强制转换。 一般用clone效率是最差的,
CD可以排除。那么AB怎么比较呢?
给出一下参考的:
http://bbs.csdn.net/topics/370151185。
http://xuyuanshuaaa.iteye.com/blog/1046621 java的system.arraycopy()方法
具体的理由不好说。不过一致的说法和实验证明是arraycopy()效率高!!!T...T
-
js引用复制如何改变复制数组不改变原数组
2018-08-18 16:47:53我们需要知道的是object和array类型的变量为引用类型,也就是说其存储的实际上并不是具体的值而是一个指向堆内存的地址。 因此当我们把一个引用类型如‘数组’,赋值给另一个变量时,实际上是把另一个变量指向了与...我们需要知道的是object和array类型的变量为引用类型,也就是说其存储的实际上并不是具体的值而是一个指向堆内存的地址。
因此当我们把一个引用类型如‘数组’,赋值给另一个变量时,实际上是把另一个变量指向了与之相同的地址,当我们改变其中一个时,实际上改变了堆内存中的存储内容 ,相应的所有指向该地址的数组都发生了变化:
有时我们并不想要类似的事情发生要如任何解决呢?下面介绍两种简单的方法
1、利用concat()方法
2、利用slice()方法
-
关于java数组的几个要点
2019-06-29 11:40:002、List不是数组,是链表。看到很多博文在“删除数组元素”下面添加List方法。方法没错,但那是封装后的方法,把List和数组划等号简直就是误人子弟,我都怀疑那些人到底有没有弄明白数组和链表的区别。 3、数组删除...1、java数组一旦被创建,开辟的内存大小就被固定。看到很多博文都出现“数组扩容”的说法,简直就是瞎鸡巴扯淡;
2、List不是数组,是链表。看到很多博文在“删除数组元素”下面添加List方法。方法没错,但那是封装后的方法,把List和数组划等号简直就是误人子弟,我都怀疑那些人到底有没有弄明白数组和链表的区别。
3、数组删除元素本质上是通过建立新数组,开辟新的存储空间,把原来数组的元素复制过去来实现的。比如有数组[1, 2, 3, 4]要删除第二个元素,基本做法就是:
package test; public class DelArrayItem{ int[] a; int[] b; int count; DelArrayItem(){ a = new int[]{1, 2, 3, 4}; count = a.length; } void returnArray(int index){ for(int i = index; i < count; i++){ /*下标为index-1*/ a[i-1] = a[i]; } /*a数组结果为[1,3,4,4],因为数组大小无法改变,所以最后一个元素不会变化*/ } @SuppressWarnings("unused") void getResult(){ int[] c = a; int[] b = new int[count-1]; /*注:不要直接使用b = a;这样仅仅是把a数组的引用复制到b数组中,两个数组实际还是使用同一个内存空间*/ for(int n = 0; n < count-1; n++){ b[n] = c[n]; } System.out.println("原数组的结果为:"); for(int old : c){ System.out.print(old+" "); } System.out.println("--------------------------"); System.out.println("数组的结果为:"); for(int num : b){ System.out.print(num+" "); } System.out.println("--------------------------"); a[0]=90; if(c != null){ System.out.println("a数组改变后,数组c的结果为:"); for(int old : c){ System.out.print(old+" "); } }else{ System.out.println("c数组为空!"); } } public static void main(String[] args){ DelArrayItem del = new DelArrayItem(); del.returnArray(2); del.getResult(); } }
输出结果:
可以看到,a数组和c数组是共用一块内存,当a数组元素改变时,c数组的元素也随之改变。但是,a数组和c数组虽然共用同一块内存空间,实际上是两个不同的引用地址,即便a=null,c数组仍旧可以遍历出元素,因为a=null仅仅是把自己的引用地址设为空,并没有对清空内存空间,对c数组的使用没有影响。
在很多博文里面,其实都没有对原数组进行清空预回收操作,即没有把数组设为null。所以实际上即便进行了所谓的删除操作,原数组占用的内存空间仍旧是存在的,只有等下一次GC检测才会回收这个内存空间。所谓的删除操作其实并不是真正的删除。
-
微信小程序 修改data里的数组数据
2019-05-12 00:08:11写小程序前端的时候发现的一个坑 不能直接this.setData({})里面不能用最直接的方法修改数组内的数据,必须把数组名转为字符串再用大括号[]包围,本人通过百度和自己实践发现有两种方式实现修改,下面附上代码. ...写小程序前端的时候发现的一个坑 不能直接this.setData({})里面不能用最直接的方法修改数组内的数据,必须把数组名转为字符串再用大括号[]包围,本人通过百度和自己实践发现有两种方式实现修改,下面附上代码.
第一种是我自己想的很简单方便 但是效率不是很高,如果数据量小也不会影响体验. 推荐使用.
1.比较简单我就不写代码了 直接把数组复制一份 然后修改 一下需要改的地方 再把这个数组赋值给原来的data.(看到不懂留言)
2.用文章开头提到的方法 比较麻烦 附上代码
var index=1; //数组下标 var number= 'list[' + index + ']'; //我this.data里有一个名为list的数组数据 不能直接list[index] 要转化为 'list[index]' this.setData({ [number]: 999,//一定要用大括号包裹 })
-
javascript方法大全
2020-08-22 15:24:17如果传递给 concat()方法的是一或多个数组,则该方法会将这些数组中的每一项都添加到结果数组中。如果传递的值不是数组,这些值就会被简单地添加到结果数组的末尾。下面来看一个例子。 var color= -
Object-C学习(九):浅复制与深复制
2013-08-23 00:38:43copy和mutableCopy方法: copy和mutableCopy的区别:他们都是复制一个对象到一个新的内存...1、我们创建一个可变的数组arr1,并且声明一个不可变的数组arr2,然后使用copy复制的方法将arr1复制给arr2 NSMutableArray * -
PHP中将ip地址转成十进制数的两种实用方法
2021-01-21 16:06:09那么PHP中如何将ip地址转成十进制数就是我们比较头疼的事情了,下面两种方法是我整理处理来相对比较简单的IP地址转成十进制数的方法。希望能对大家有所帮助。 方法一: 复制代码 代码如下: public function ipToLong... -
Arrays.copyOfRange方法
2018-08-18 15:51:21用到了Arrays 类中的copyOfRange方法 是一个 静态方法 这个将指定数组的指定范围复制到新数组中。 不过遇到了一个问题,就是刚开始时候 怎么都不是想要的结果,最后发现是方法参数 ---------to---------- 的... -
js函数调用常用方法详解
2013-06-26 15:43:35arguments是参数组,他并不是一个真实的数组,但是可以使用.length方法获得长度。 书上有说4中调用方式: 方法调用模式 函数调用模式 构造器调用模式 apply调用模式 下面我们来看看一些实例更好理解。 1:... -
你必须知道的495个C语言问题.[美]Steve Summit(带详细书签).pdf 压缩版
2018-04-08 02:26:50书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并分别给出了解答,而且结合代码示例阐明要点。 本书结构清晰,讲解透彻,是各高校相关... -
你必须知道的495个C语言问题(中文高清版)
2013-03-20 13:28:28可我找不到任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此往复,以至无穷。 数组大小 1.23 能否声明和传入数组大小一致的局部数组,或者由其他参数... -
[你必须知道的495个C语言问题]人民邮电出版社
2012-08-18 19:02:28可我找不到任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此往复,以至无穷。 数组大小 1.23 能否声明和传入数组大小一致的局部数组,或者由其他参数... -
你必须知道的495个C语言问题
2015-10-16 14:14:28可我找不到任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此往复,以至无穷。 数组大小 1.23 能否声明和传入数组大小一致的局部数组,或者由其他参数指定... -
你必须知道的495个C语言问题(高清版)
2010-03-31 16:24:09可我找不到任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此往复,以至无穷。 12 数组大小 13 1.23 能否声明和传入数组大小一致的局部数组,或者由... -
《你必须知道的495个C语言问题》
2010-03-20 16:41:18可我找不到任何方法来声明这样的函数——感觉我需要一个返回指针的函数,返回的指针指向的又是返回指针的函数……,如此往复,以至无穷。 12 数组大小 13 1.23 能否声明和传入数组大小一致的局部数组,或者由... -
超级有影响力霸气的Java面试题大全文档
2012-07-18 09:47:04ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,... -
excel的使用
2012-11-25 17:06:01(1)数组和矩阵的定义矩阵不是一个数,而是一个数组。在Excel里,数组占用一片单元域,单元域用大括号表示,例如{A1:C3},以便和普通单元域A1:C3相区别。设置时先选定单元域,同时按Shift+Ctrl+Enter键,大括弧... -
ASP.NET中常用的字符串分割函数
2014-12-02 14:04:00但是其数组长度却是25,而不是3。下面这种方法是先将“[111cn.net]”替换成一个特殊字符,比如$,在根据这个字符执行Split 例如下面我要根据[111cn.net]分割的话 代码如下 复制代码 string[] arrstr2 = str.... -
C语言程序设计标准教程
2009-05-22 18:43:58这里应说明的是并不是把整个字符串装入指针变量, 而是把存放该字符串的字符数组的首地址装入指针变量。 在后面还将详细介绍。 ⑥把函数的入口地址赋予指向函数的指针变量。例如: int (*pf)();pf=f; /*f为函数名*... -
再次了解深浅拷贝问题
2018-12-16 21:01:00之前虽然看到好多关于这方面的问题,...当需要删除数组中某些数据时候,发现深复制后的数据做删除操作后,原数据也发生改变,试了好几个拷贝方法包括最常用的Object.assign([],arr),concat等都不行,所以要了解下面... -
最权威的C++教程_C++_Primer_Plus中文第五版+C++_Primer中文第四版(都含源码+习题)(共4分卷)分卷1
2010-06-23 17:33:55● 初级教程强调的是“实践性”学习,通过简短、容易输入的范例同时阐述一个或多个概念。 ● 初级教程用示意图来解释概念。 ● 初级教程提供问题和练习来检验读者对知识的理解,从而适于自学或课堂教学。 基于... -
最权威的C++教程_C++_Primer_Plus中文第五版+C++_Primer中文第四版(都含源码+习题)(共4分卷)分卷2
2010-06-23 17:47:19● 初级教程强调的是“实践性”学习,通过简短、容易输入的范例同时阐述一个或多个概念。 ● 初级教程用示意图来解释概念。 ● 初级教程提供问题和练习来检验读者对知识的理解,从而适于自学或课堂教学。 基于... -
最权威的C++教程_C++_Primer_Plus中文第五版+C++_Primer中文第四版(都含源码+习题)(共4分卷)分卷3
2010-06-23 18:03:39● 初级教程强调的是“实践性”学习,通过简短、容易输入的范例同时阐述一个或多个概念。 ● 初级教程用示意图来解释概念。 ● 初级教程提供问题和练习来检验读者对知识的理解,从而适于自学或课堂教学。 基于... -
JavaScript - 浅拷贝 / 深拷贝(函数封装)
2020-08-23 14:18:47前言 如果你只想知道如何实现深浅拷贝,请直接跳过 前言 ,移步代码部分。 今天开发小程序,需求是 实现一个长按管理应用的功能(似支付宝...浅拷贝的实现方法比较简单,下面介绍 2 个,都可以直接使用。 一、简单复制 -
在一小时内学会 C#(txt版本)
2009-08-19 18:09:37注意:本文不是为 C# 宗师而写。有很多初学者的 C# 文章,这只是其中之一。 接下来关于 C# 的讨论主题: ? 编程结构 ? 命名空间 ? 数据类型 ? 变量 ? 运算符与表达式 ? 枚举 ? 语句 ? 类与结构 ? 修饰符 ? 属性 ? ... -
你必须知道的495个C语言问题(PDF)
2009-09-15 10:25:47回指向字符的指针的函数的指针的数组? . . . . . . . . . . . . . . 3 1.8 函数只定义了一次, 调用了一次, 但编译器提示非法重定义了。. . 4 1.9 main() 的正确定义是什么? void main() 正确吗? . . . . . . . . ... -
asp.net字符串分割函数用法
2014-10-31 20:44:00但是其数组长度却是25,而不是3。下面这种方法是先将“[111cn.net]”替换成一个特殊字符,比如$,在根据这个字符执行Split 例如下面我要根据[111cn.net]分割的话 代码如下 复制代码 string[] arrstr2 = str....