数组概述
数组声明创建
- 举例来说,通过在变量类型之后加上[]来声明由该类型组成的数组。如由int组成的数组由以下表达式声明:
int[] nums;//首选方法
int nums[]; //效果相同,但不是首选方法,主要是为了让C/C++程序员快速掌握java
int[] nums=new int[10];//创建一个大小为10的int数,下标为0-9
组
内存分析
举例来说,下图中右边部分的代码对应的内存操作为:
- 声明数组的时候,首先会在栈里压入一个array,由于其是一个引用对象的变量,所以其空间存放的是这个引用在堆里面的具体地址。
- 创建数组的时候会在堆里创建一个大小为10的堆空间。
- 然后根据下标即数组的索引位置给内存中的每个空间赋值。
注意:当去访问超过数组长度的位置时,如:array的长度为10,下标范围为0-9,当去访问array[10]时,会报错:java.lang.ArrayIndexOutOfBoundsException,即数组下标越界。
三种初始化
数组的四个基本特点
数组使用
以下为普通的for循环中数组的使用示范,分别实现了以下功能
- 打印数组中所有元素
- 计算数组中所有元素的和
- 查找数组中的最大元素
public class Demo02 {
public static void main(String[] args) {
int[] arrays={1,2,3,4,5};
//打印所有元素
for (int i = 0; i < arrays.length; i++) {//可被替换为增强for,for(int i:arrays)
System.out.println(arrays[i]);
}
System.out.println("==============");
//计算所有元素的和
int sum=0;
for (int i = 0; i < arrays.length; i++) {
sum+=arrays[i];
}
System.out.println(sum);
System.out.println("===============");
//查找最大元素
int max=arrays[0];
for (int i = 0; i < arrays.length; i++) {//可被替换为增强for,for(int i:arrays)
if(arrays[i]>max){
max=arrays[i];
}
}
System.out.println(max);
}
输出结果:
多维数组
多维数组的声明:
int[][] array={{1,2,3},{2,3,4},{3,4,5}}
Arrays类
应用示例(可通过按住Ctrl,用鼠标点方法和类查看源码)
public class Demo03 {
public static void main(String[] args) {
int[] a={1,2,3,4,9090,34234,4534,2321,2,34};
System.out.println(a);//[I@b4c966a
//打印数组元素 Arrays.toString
System.out.println(Arrays.toString(a));
//对数组进行排序
Arrays.sort(a);
System.out.println(Arrays.toString(a));
//对数组进行填充
Arrays.fill(a,2,4,0);//范围是左闭右开 [2,4)
System.out.println(Arrays.toString(a));
}
输出结果
拓展
排序算法
- 冒泡算法
public class Demo04 {
public static void main(String[] args) {
//冒泡排序
int[] list={34,54,4,343,534134,53,43,5};
for (int i = 0; i < list.length; i++) {
for (int j=i+1;j < list.length;j++) {
if(list[i]>list[j]){
int big=list[i];
int small=list[j];
list[i]=small;
list[j]=big;
}
}
System.out.println(Arrays.toString(list));
}
}
输出:
把小的数看成泡泡,每一次迭代都有一个小的数字往前冒,所以叫冒泡排序。
稀疏数组
右边的稀疏数组中,0行代表的意思是,整个数组的尺寸为6行8列,一共有值的数字一共有8个。下面1-8行分别记录了这8个数的坐标和值。