Java6 数组笔记
一、数组基础
数组就是个“批量装同类型数据的盒子”,能一次存好多数据,方便一起操作。
1. 怎么用数组?
• 第一步:声明数组,告诉电脑“我要存什么类型的数据,叫啥名”
int[] a; // 推荐这么写,一眼就知道是数组
• 第二步:给数组分配空间,告诉它“最多存多少个数据”
a = new int[5]; // 这个数组能存5个整数
• 第三步:存、取数据
◦ 存数据:数组名[下标] = 数据; 比如 a[0] = 10;
◦ 取数据:数组名[下标] 比如 System.out.println(a[0]);
◦ 下标从0开始,范围是0 ~ 数组长度-1,超出会报错(数组下标越界)
• 遍历数组:用循环把每个元素都看一遍
for(int i = 0; i < a.length; i++){ // a.length 就是数组的长度
System.out.println(a[i]);
}
2. 数组默认值
刚创建的数组,每个位置都有默认值:
• 整数:0
• 小数:0.0
• 布尔:false
• 字符:空字符
• 引用类型(比如字符串):null
3. 快速初始化数组
• 声明+分配空间一步到位:int[] a = new int[5];
• 直接写好要存的数据:int[] a = {1,2,3,4,5};(长度由花括号里的数决定)
• 注意:不能先声明,再单独给数组赋值,比如int[] a; a = {1,2,3};是错的。
二、数组在内存里是什么样的?
• 数组在内存里是连在一起的一块空间,所以读取速度很快。
• 数组变量存的不是数据本身,而是数组的起始地址。
• 数组下标从0开始,是为了让电脑计算地址更方便。
• 两个数组变量互相赋值时,传的是地址,所以两个变量会指向同一个数组;而普通变量赋值,传的是具体数值。
三、数组扩容
如果数组存满了,想继续加数据,就得“换个更大的盒子”,这就是扩容。
1. 扩容思路
1. 先创建一个比原来大的新数组(一般是原来的2倍)
2. 把旧数组里的数据都复制到新数组里
3. 让原来的数组变量指向新数组
2. 三种实现方式
1. 手动复制(用循环)
int[] oldArr = {1,7,4,3};
// 1. 建一个长度为原来2倍的新数组
int[] newArr = new int[oldArr.length * 2];
// 2. 把旧数组的数一个个复制过去
for(int i = 0; i < oldArr.length; i++){
newArr[i] = oldArr[i];
}
// 3. 让旧数组变量指向新数组
oldArr = newArr;
2. 用System.arraycopy工具
int[] oldArr = {1,7,4,3};
int[] newArr = new int[oldArr.length * 2];
// 直接复制数据,参数分别是:原数组、起始位置、新数组、起始位置、复制长度
System.arraycopy(oldArr, 0, newArr, 0, oldArr.length);
oldArr = newArr;
3. 用Arrays.copyOf工具(最简单)
int[] oldArr = {1,7,4,3};
// 直接创建一个扩容后的新数组,参数是原数组和新长度
int[] newArr = Arrays.copyOf(oldArr, oldArr.length * 2);
oldArr = newArr;
四、可变长参数
这是JDK 5.0新增的语法,让方法能接收任意个同类型的参数。
• 语法:public static void 方法名(数据类型... 变量名)
• 用法:可变长参数在方法里会被当成数组处理,比如:
public static void printNums(int... nums){
for(int i = 0; i < nums.length; i++){
System.out.println(nums[i]);
}
}
// 调用的时候可以传1个、3个、5个任意数量的参数
printNums(1,2,3);
printNums(5);
• 注意:一个方法里最多只能有一个可变长参数,而且必须放在参数列表的最后。
五、数组排序
1. 冒泡排序
把相邻的两个数比一比,大的往后挪,每一轮都把当前最大的数移到最后。
int[] arr = {3,1,4,2};
for(int i = 1; i < arr.length; i++){ // 控制比较几轮
for(int j = 0; j < arr.length - i; j++){ // 每轮要比较几次
if(arr[j] > arr[j+1]){
// 交换两个数
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
2. 选择排序
先固定一个位置,和后面所有数比一比,找到最小的数放到当前位置。
int[] arr = {3,1,4,2};
for(int i = 0; i < arr.length - 1; i++){ // 控制要放的位置
for(int j = i+1; j < arr.length; j++){ // 和后面的数比
if(arr[i] > arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
3. 工具方法排序(开发里常用)
直接调用java.util.Arrays.sort(arr);,电脑会自动帮你排好序,效率很高。
六、二维数组(了解就行)
二维数组就是“数组里套数组”,可以理解成表格,有行有列。
1. 基本用法
• 声明:int[][] a;
• 分配空间:a = new int[3][4];(3行4列)
• 访问元素:a[行下标][列下标],行和列的下标都从0开始
• 获取长度:a.length是行数,a[0].length是第0行的列数
2. 初始化方式
• 声明+分配空间:int[][] a = new int[3][4];
• 直接写数据:int[][] a = {{1,2}, {3,4,5}, {6}};(行数和列数由花括号里的元素个数决定)
3. 不规则二维数组
二维数组的每一行可以长度不一样,比如:
int[][] a = new int[3][]; // 只指定行数,不指定列数
a[0] = new int[2]; // 第0行有2个元素
a[1] = new int[3]; // 第1行有3个元素
a[2] = new int[1]; // 第2行有1个元素
更多推荐

所有评论(0)