数组一旦初始化完成,在内存中所占空间将被固定下来。因此数组长度不可变。
数组元素的数据清空,但它所占用的空间依然被保留下。
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代表不同的数据类型