数组高级

Posted Dva清流

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组高级相关的知识,希望对你有一定的参考价值。

 

 

多维数组:

数组语法:

一维数组:数组中的每一个元素都是一个值.

二维数组:数组中的每一个元素都是一个数组.

三维数组:数组中的每一个元素都是一个二维数组.

---------------------------------------------------------

严格上说JAVA上不存在多维数组的概念.和C做区分.一般称之为数组中的数组.

 

二维数组的初始化问题:

二维数组初始化:int a[2][3]={{1,2,3},{4,5,6}};

int [] [] arr = new[] []{

                                                                 arr1, arr2, arr3

                                                                 }

                              int [] [] arr = new int[][] {

                                        {1, 2, 3},

                                        {4, 5},

                                        {6}   

                                        }

 二维数组的遍历:

 

JAVA5对数组的新支持: 增强FOR循环(foreach):

  其实, 我们在操作数组的时候不关心迭代变量(数组的索引),关心的是数组的元素,有没有一种方法让我们直接操作数组元素不去操作数组的索引.

从JDK1.5开始,Java提供了一种新的语法(增强for循环.foreach)

语法:

for(数组元素类型 变量: 数组名)

{

循环体

}

 

 

通过反编译我们可以发现.增强for循环在底层依然是用for循环+索引来实现的,我们把增强for循环成为编译器的新特性.我们可以称之为语法糖.可以让开发者写更少的代码提高效率.

ele相等于l也就是固定的某个数据.ail[k]  不会改变数组的数据.  

for循环功能比foreach更彪悍.

--------------------------------

如果迭代数组元素而不关心数组的索引的时候使用foreach.

foreach在后面还会用到集合框架.

==========================================================================================================

方法的可变参数:

 

将数组作为参数输入.用增强for循环计算.

但是这种做法的弊端有很多:为了求多个数的和, 需要新建一个数组来储存数据.

                                    如果要改变数组的数量不能修改,数组的长度是一定的.

解决的方法, 可以利用方法的可变参数:

double ...

 

和for循环一样.语法糖.    

可变参数的底层其实就是数组.

 把double ... arr当做一个数组传入.   长度由length来不断更新.

可变参数必须作为方法的最后一个参数.如果不是的话会产生歧义.因为可变参数的个数不是确定的.所以放在最后一个.例如 Static double getSum(double x, double ... )  数据类型相同,可变参数把数据当做数组来处理,那么第一个数是double,剩下的都是可变参

=======================================================================================================================================================

数组的一些算法:

数组元素的拷贝操作:

这段代码不够健壮/只能输入int类型的数组.

 

System类中的arraycopy方法:

定义一个数组元素的拷贝方法拷贝任意数组元素拷贝操作(反射):

因为该方法是静态的,用方法所在类的类名来调用.  System.arraycopy(Object src;int scrPos;Object dest;int destPos;int length)(调用的对象数组;调用开始的位置;调用的目标数组;目标数组的第几个开始粘贴;调用的长度/粘贴长度)

<<      :     左移运算符,num << 1,相当于num乘以2

>>      :     右移运算符,num >> 1,相当于num除以2

>>>    :     无符号右移,忽略符号位,空位都以0补齐

 

以上是关于数组高级的主要内容,如果未能解决你的问题,请参考以下文章

高级数据类型(arraryslicemapptr)

Python学习之高级数组

十八函数指针高级(函数指针数组)

高级for 循环创建数组和集合

将数组转换为对象的高级[重复]

《C#高级特性》 数组 集合