数组是由若干项数据组成的一个数据集合,数组中每个数据称为元素。
1、数组的声明和创建
1.1、数组的声明
数据类型 标识符[ ] 或者 数据类型[ ] 标识符
1.2、数组的创建
使用new关键字创建,创建的时候需要指明数组的长度。创建数组时,在堆区为数组分配内存空间,为每个元素赋对应数据类型的默认值。
1.3、数组的初始化
在创建数组时,每个元素都被自动使用默认值初始化。所有变量的初始化是系统安全的保证,决不能在变量未初始化的状态使用。
1.4、内存的分配
数组一旦创建,在内存中占用连续的内存地址。
数组的静态性:数组一旦被创建,长度就不能被改变。
2、数组的访问
2.1、length属性
所有的下标都从0开始,一个数组中元素的数量被length存储。这个值用来检查访问的界限。数组的下标范围为:0——length-1。
2.2、数组的for语句
标识符.for:快速遍历数组的值
标识符.fori:从0到length-1的for循环
标识符.forr:从length-1到0的for循环
3、数组的复制
数组一旦创建后长度不可修改。只能通过创建新的数组来保证长度。
System.arraycopy(原数组,起始下标,新数组,起始下标,复制内容的长度)
4、Arrays常用方法
Arrays.toString(数组)将数组转换为字符串
Arrays.equals(数组a,数组b)判断两数组内容是否相等
Arrays.fill(数组,数据参数)将整个数组全部填充为同一内容
Arrays.binarySearch(数组,数据参数)判断某一参数是否存在,存在返回下标,不存在返回负数
Arrays.sort(数组) 对原数组从小到大进行排序,无返回值。
Arrays.copyOf(原数组,新数组长度)将源数组复制并赋值给新数组,返回一个新长度的数组,如果长度大于源数组,超出部分为默认值。如果长度小于源数组,只赋值源数组的前n位。
Arrays.copyOfRange(数组,int from,int to)从源数组的from下标开始复制到下标to-1位置。返回一个新数组。与copyOf相比,可以调节复制的长度及位置。
5、数组的排序
5.1、冒泡排序
从始到终两两比较,如果逆序(非指定顺序)的交换,每一轮比较会筛选出最大值(最小)然后循环执行。
int [ ] a = { 3 ,4 ,2 ,5 ,1 } ;
for ( int i = 0 ; i < a.length - 1 ; i + +) {//两两比较,共计循环4次
for ( int j = 0 ; j < a.length - 1 - i ; j + + ){//获取下标,最小为0,最大为4。j和j+1
if ( a [ j ] > a [ j + 1 ]){//判断是否为逆序,如果逆序则交换
int temp = a[j]; a[j]= a[j+1] ; a[j+1] =temp; //用一个变量使两个值交换
}
}
}
5.2、选择排序
从所有元素中找出最小的一个元素放在起始位置,其次找第二小的元素。与冒泡相比,与此排的比较次数相同,但是选择排序每轮只交换一次。效率更高。
int [ ] a = { 3 ,4 ,2 ,5 ,1 } ; int temp;
for ( int i = 0 ; i < a.length - 1 ; i + + ){//两两比较
int lowindex = i ;//声明最小的下标
for ( int j = i + 1 ; j < a .length ; j + +){//从第i+1比到第length-1个。
if( a[ j ] < a[lowindex]) lowindex = j ;//取最小值的索引
}
temp = a[i]; a[i] = a[lowindex]; a[lowindex] = temp; //将lowindex和i交换
}
5.3、插入排序
从前向后依次增加长度排序,每次需要保证前边的顺序正确。
int [ ] a = { 3 ,4 ,2 ,5 ,1 } ; int temp;
for ( int i = 1 ; i < a.length ; i + + ){//从第二个数字开始比较,到最后一个。
for ( int j = i ; j > 0 && a[ j ] < a [ j - 1 ] ; j - -){//如果后边的数字大于前边的,就循环交换
temp = a[j] ; a[j] =a[ j-1] ; a[j-1] =temp; //交换
}
}
其他排序方式写在(2)中
6、多维数组
n维数组就是1个n-1维数组组成的数组,比如二维数组就是一个一维数组组成的数组。