Arrays
数组是什么
数组的特点
数组的声明
数组的长度
元素的获取
元素的打印
数组的扩容
数组的排序
二维数组是什么
二维数组的定义
二维数组的内存图
数组是什么
数组是有序数据的集合,用于存放一组数据
数组的特点
- 数组内元素的类型统一(与数组类型相同)
- 数组内元素的排序是有序的(按赋值时的顺序排列)
- 数组本身是不可变的,数组元素可变 (底层被final修饰)
数组的声明(以int类型为例)
声明方式 | 特点1 | 特点2 |
---|---|---|
int[] array = {1,2,3,4} | 声明与初始化同时进行,不可二次赋值 | |
int[] array = new int[]{1,2,3,4} | 声明与初始化同时进行,可以多次赋值 | |
int[] array = new int[int n] | 声明与初始化完全分离,可以多次赋值 | 数组内有默认元素,元素值视数据类型而定 |
注意:无论何种方式,数组的长度在被定义之时就已经确定下来了,且无法改变
数组的长度
数组的长度指的就是数组内元素的个数,数组本身没有长度
- 获取数组长度:array.length
元素的获取
数组元素都有属于自己的索引,从0开始,到**(array.length-1)**结束
- 示例:array [0],array [1],array [2],…,array [array .length-1]
注意:不能获取超出长度的元素,否则将抛出数组下标越界异常
元素的打印
- 方式一:遍历/迭代—>输出
- 方式二:Arrays.toString(Array)
注意:直接打印数组得到的是数组地址
数组的扩容
数组本身长度是不可变的,无法在原来的数组上新增
扩容方法特点 | 特点 |
---|---|
创建一个新的数组,遍历源数组元素赋值给新数组,再将新数组赋值给源数组 | 基础、繁琐 |
System.arraycopy(源数组 ,源数组传递元素的开始位置 ,新数组 ,新数组接收元素的开始位置 ,从源数组复制到新数组的元素长度 ) | 只实现了数组的复制,没有对源数组进行扩容 |
Arrays.copyof(源数组 ,长度 ) | 自我复制实现对源数组的扩容 |
注意:
- System.arraycopy:
- 源数组传递元素时要注意越界问题(传递元素的开始位置+传递元素的长度<=源数组长度)
- 新数组要留有足够的长度接收传递过来的元素(新数组长度-接收元素的开始位置>=传递元素的长度)
- Arrays.copyof:
- 返回一个数组,数组类型与源数组相同
- 复制时,传递元素与接收元素都默认从第一个位置开始
- 除了扩容,还可以实现数组长度的缩减
数组的排序
package myTest;
import java.util.Arrays;
public class Sort {
public static void main(String[] args) {
//JDK自带排序方法,默认从小到大
int[] arr = new int[] {6,4,1,3,77,11,34};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
//选择排序,从小到大
int[] brr = new int[] {6,4,1,3,77,11,34};
for(int i=0;i<brr.length-1;i++) {
for(int j=i+1;j<brr.length;j++) {
if(brr[i]>brr[j]) {
int temp = brr[j];
brr[j] = brr[i];
brr[i] = temp;
}
}
}
System.out.println(Arrays.toString(brr));
//冒泡排序,从小到大
int[] crr = new int[] {6,4,1,3,77,11,34};
for(int i=0;i<crr.length-1;i++) {
for(int j=0;j<crr.length-1;j++) {
if(crr[j]>crr[j+1]) {
int temp = crr[j+1];
crr[j+1] = crr[j];
crr[j] = temp;
}
}
}
System.out.println(Arrays.toString(crr));
//插入排序,从小到大
int[] drr = new int[] {6,4,1,3,77,11,34};
for(int i=1;i<drr.length;i++) {
for(int j=i;j>0;j--) {
if(drr[j-1]>drr[j]) {
int temp = drr[j];
drr[j] = drr[j-1];
drr[j-1] = temp;
}else {
break;
}
}
}
System.out.println(Arrays.toString(drr));
}
}
二维数组是什么
数组的数组,将一个数组看做是一种数据类型,创建该数据类型的数组
- 示例:int[ ] [ ],其中int[ ]可以看做是一个数据类型,int[ ] [ ]就是这个类型的一个数组
注意:Java中没有二维数组的概念,正确的叫法是数组类型的数组
二维数组的定义
package day20191026;
public class Demo02 {
public static void main(String[] args) {
//创建了一个整形数组类型的数组,其中的元素都是默认值
int[][] a = new int[3][];
//二维数组的每一个元素都是数组,使用前需要先声明数组
//当二维数组中的元素长度不同时
a[0] = new int[4];
a[1] = new int[5];
a[2] = new int[6];
//当二维数组中的元素长度相同时
int[][] a = new int[3][4];
}
}
注意:声名二维数组时,需要将二维数组的长度填在 “new int[ ] [ ]” 中的前一个 “[ ]” 中,将元素的长度填在后一个 “[ ]” 中
二维数组的内存图
以new int[3] [4]为例