什么是数组
程序=算法+数据结构
前面总结的if,if-else,switch循环解决的都是流程问题,即算法问题。
所谓数据结构,简单说就是把数据按照特定的某种结构来保存,设计合理的数据结构是解决问题的前提。
数组就是最基本的一种数据结构。
1)数组就是相同数据类型的元素组成的集合
2)元素按线性顺序排列。所谓线性顺序是指除了第一个元素外,每一个元素都有唯一的前驱元素;除了最后一个元素外,每一个元素都有唯一的后继元素(“一个跟一个”)
3)可以通过元素所在位置的顺序号(下标)做标识来访问每一个元素(下标从0开始,最大元素个数-1)
数组的定义
定义基本类型数组
声明数组的语法:数据类型[ ] 数组名=new 数据类型 [大小];
如:int [ ] arr=new int [10];
1)定义基本类型数组的要点:
----确切的数据类型
----整体的数组名字
----不能缺少的"[ ]"
2)执行new语句才使得数组分配到了指定的大小的空间
3)int [ ] arr与 int arr [ ]两种写法均可
4)声明数组时不规定数组长度,new关键字分配空间时需指定分配的空间大小。
数组的初始化
1)基本类型的数组创建后,其元素的初始值:byte,short,char,int,long为0;float和double为0.0;boolean为false
2)可以在数组声明的同时对数组的元素进行初始化,例如:int [ ] arr={10,23,30,-10,21};
元素的个数即为数组的长度
3)此种写法只能用于声明时的初始化,不能用于赋值。
4)可以通过下面的方式给已经声明的数组类型变量进行初始化:
int [ ] arr;
arr=new int [ ]{10,23,30,-10,96};
注意:[ ]中不可以写长度,元素的个数就是数组的长度。
数组的访问
1)获取数组的长度
调用数组的length属性可以获取数组的长度:
int [ ] arr=new int [ ]{3,6,8,9};
int len=arr.length;
System.out.println("数组长度为:"+len); //4
2)数组中的元素通过下标的方式进行访问:
注意:下标从0开始,最大到length-1;
遍历数组元素
1)遍历数组元素,通常选择for循环语句,循环变量作为访问数组元素的下标,即可访问数组中的每一个元素。
int [ ] arr=new int[10]; for(int i=0;i<arr.length;i++){ arr[i]=100; } //循环的计数器的变化范围从0~length-1
2)遍历数组元素,正序输出
int [ ] arr=new int [ ]{10,20,30,40,50}; for(int i=0;i<arr.length;i++){ System.out.println(arr[i]); }
3)遍历数组元素,逆序输出
int [ ] arr=new int [ ]{10,20,30,40,50}; for(int i=(arr.length-1);i>=0;i--){ System.out.println(arr[i]); }
数组的复制
1)System.arraycopy()方法用于数组复制
public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
src -----源数组
srcPos ----------源数组中的起始位置
dest ----------目标数组
destPos -----------目标数组中的起始位置
length ----------要复制的数组元素的数量
int [ ]a={10,20,30,40,50}; int [ ]a1=new int[6]; System.out.println(a,1,a1,0,4);//a1[]={20,30,40,50,0,0}
2)Arrays.copyOf方法用于数组的复制
使用java.util.Arrays类的copyOf方法可实现数组的复制
类型[ ] newArray=Arrays.copyOf(类型 [ ],int newLength);
特点:生成的新数组是原始数组的副本
----- newLength小于源数组,则进行截取
-----newLength大于源数组,则用0或null进行填充
所产生的新数组可以大于源数组的长度
数组的扩容
数组的长度在创建后是不可改变的,所谓扩容是指创建一个更大的新数组并将原有数组的内容复制到其中。
可以通过Arrays.copyOf()方法,简便实现数组的扩展。
int [ ] a={10,20,30,40,50}; a=Arrays.copyOf(a,a.length+1); //输出a数组的元素:10,20,30,40,50,0
数组的排序
Arrays.sort方法用于数组排序
JDK提供了Arrays.sort()方法封装了数组的排序算法:
int [ ] arr={49,18,1,64,77,50,0,54,77,16}; Arrays.sort(arr); for(int i=0;i<arr.length;i++){ System.out.println(arr[i]); }