一:数组的基本概念
数组是一个容器,用来保存一组相同数据类型的数据。
声明数组的格式:
数据类型[] 数组名 = 初值;注意:这里的数据类型值得是数组中保存的数据的类型。
数组有3种声明方式:
方式一:
int[] array = new int[数组的长度];
方式二:
int[] array = new int[] {1,3,5,11};
方式三:
int[] array1 = {1,2,3,4,5};
数组在new时会在堆内存中开辟一块连续的内存空间
数组中常见的异常有ArrayIndexOutOfBoundsException(数组越界异常)和NullPointerException(空指针异常)
数组越界异常一般是数组下表超出了数组范围,空指针异常则是由于访问了一块不属于自己的内存空间。
二:对数组的基本操作
1、对数组的遍历
若要将数组转化为字符串输出,一般采用Arrays类中得toString方法。
2、数组元素的反转
int[] array = {20,50};
switchValue(array);
public static void switchValue(int[] array) {
int temp = array[0];
array[0] = array[1];
array[1] = temp;
}
对未知长度的数组进行反转:
private static void changeArray(int[] array) {
for (int i = 0; i < array.length/2; i++) {
int temp = array[i];
array[i] = array[array.length-1-i];
array[array.length-1-i] = temp;
}
}
3、排序
冒泡排序:
for (int i = 0; i < array.length-1; i++) {
for (int j = 0; j < array.length-1-i; j++) {
// 内循环-1 防止数组越界
// 内循环-i 循环一次 确定一个数 每次都少比一次
if(array[j]>array[j+1]) {
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
选择排序:
for (int i = 0; i < array.length - 1; i++) {
for (int j = i+1; j < array.length; j++) {
// 用第一个数 和剩下的每一个数比较
if(array[i]>array[j]) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
4、折半查找:
int min = 0;
int max = array.length-1;
int mid = (min + max)/2;
while(array[mid] != key) {
// 判断 key和中间角标值来挪动最小角标或最大角标
if(key > array[mid]) {
min = mid + 1;
}
if(key < array[mid]) {
max = mid - 1;
}
// 每次循环都要有折半的操作
mid = (min + max)/2;
// 数组中没有这个数的时候
if(min > max) {
// 没有这个数 使用-1来表示
mid = -1;
break;// 跳出循环
}
}
三、二维数组
保存多个相同类型的一维数组。
声明方式:数据类型[][] 数组名 = 初值
声明方式一:
int[][] array = new int[2][3];
声明方式二:int[][] array1 = new int[][]{{1,11,111},{2,22,222}};
四、补充
栈内存的特点:
两种传参方式的不同: