数组——java疯狂讲义

数组一旦初始化完成,在内存中所占空间将被固定下来。因此数组长度不可变。

数组元素的数据清空,但它所占用的空间依然被保留下。

Java数组既可以存储基本类型的数据,也可以存储引用类型的数据,只要所有的数组元素具有相同的类型。

推荐type[] arrayName

type arrayName[]不推荐使用且c#已经不支持

静态初始化:初始化时由程序员显式指定每个元素的的初始值,由系统决定数组长度

动态初始化:初始化时只指定数组长度,由系统分配初始值。

静态语法:静态初始化 arrayName=new type[]{element1,element2....}

方法二 简化 type[] arrayName={element1,element2....}

int [] a={5,6,7,9}

动态初始化 

arrayName=new type[length];

//数组定义和初始化同时完成 使用动态初始化语法

int[] prices=new int[5]

//数组的定义和初始化同时完成 ,初始化数组时元素的类型是定义数组时元素类型的子类 

Object[] books=new String[4];

数组元素的基本类型 整数byte short  int long 元素值是0,浮点型double float 值是0.0 字符型char  值‘、u0000’,布尔类型 boolean  false

数组元素的引用类型 (类,接口和数组)值是null

不要同时使用 静态初始化 和动态初始化 ,换句话说就是不要即指定数组的长度 又为数组元素分配初始值

4.5.4 使用数组 

访问数组包括数组元素赋值,访问数组元素和获得数组长度

java.lang.ArrayIndexOutOfBoundsException(数组索引越界异常)

** foreach循环

循环数组和集合 无需得到数组和集合的长度 无需根据索引来访问数组元素 。

for(type variableName:array|collection)

{

//variableName自动迭代访问每个元素 

}

public static void main(String[] args) {
   String [] books={"轻量级Java EE 企业应用实战","疯狂的Java讲义","疯狂的Android讲义"};
  //使用foreach 循环来遍历数组元素
  //其中book将自动迭代每个数组元素
 //循环变量
 for(String book:books)
 {
 book="疯狂Ajax讲义"; //循环变量是临时变量 不能改变 数组元素
 System.out.println(book);
 }
 System.out.println(books[0]);

//不推荐对循环变量进行赋值

}

引用类型数组初始化

二维数组

得到结论

二维数组是一维数组,其元素是一维数组;三位数组也是一维数组,其元素是二维数组... 从这个角度看java没有多为数组。

4.6.5 Java8增强工具类:Arrays (static修饰的方法可以直接通过类名调用)

①Arrays.copyof(a,6)数组a ,长度小于原有数组.length 取原数组前面几个元素,长度大于现有数组 后面补充0,false ,null 

②copyofRange 

③boolean equals   Arrays.equals(a,b)

④void fill  Arrays.fill(a,2,4,1) //将b数组第三个元素(包括)到第5个元素(不包括)赋值为1

⑤void sort Arrays.sort(a)对a数组进行排序

⑥String toString(type[] a)//该方法将一个数组转换成一个字符串。

System.out.println("b数组的元素为: "+Arrays.toString(b)); //将输出b数组元素,将输出[0,0,1,1,3,4]

⑦static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length) 将src数组里的元素赋值给dest数组元素,其中srcPos指定

从src数组的 第几个元素开始赋值,length参数指定将src数组的多少个元素 赋值给dest数组的元素。

Java8增强了Arrays类的功能,为Arrays类增加了一些工具方法 充分利用多CPU并行能力提高设值,排序功能。

void parallePrefix(xxx[] array,XxxBinaryOperator op) 使用op参数指定的计算公式得到的结果作为新的元素。op 计算公式包括left,right两个形参

其中left代表数组中前一个索引处的元素,right代表数组中当前索引处的元素,当计算第一个新数组元素时,left的值默认为1。

void parallelPrefix(xxx[]array,int fromIndex,int toIndex,XxxBinaryOPerator op)区别在于重新计算fromIndex到toIndex索引的元素

void setAll(xxx[] array,IntToXxxFunction generator) 使用

void paralleSetAll(xxx[] array,IntToXxxFunction generator) 同上 增加了并行能力 利用多cpu提高性能。

void parallelSort(xxx[] a)增加了并行能力 利用多cpu提高性能。

void paralleSort(xxx[] a,int fromIndex,int toIndex)同上 该方法仅对fromIndex到toIndex索引的元素进行排序

Spliterator.OfXxx spliterator(xxx[] array)将该数组的所有元素转换成对应的Spliterator对象

Spliterator.OfXxx spliterator(xxx[] array,int startInclusive,int endExclusive)同上 区别该方法仅转换startInclusive到endExclusive索引的元素

XxxStream stream(xxx[] array)该方法将数组转换为Stream,Stream是java 8新增的流式编程的API

XxxStream stream(xxx[] array,int startInclusive,int endExclusive) 同上区别自啊与将fromIndex到toIndex索引的元素转换为Stream

所有以parallel开头都表示该方法利用cpu并行能力提高性能。xxx代表不同的数据类型 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzfddp.html