什么是数组
数组是一种特殊的数据类型,这种数据类型用于存储一组数据类型相同的数据。简单来说,数组就是一个容器,用于存储同一种数据类型的数据。
数组的每个数据被称为数组的元素。
数组就是在Java中定义的用来一次性保存多个具有相同的数据类型的数据容器。
数组具有的特点
数组中的元素具有相同的数据类型。
数组的容器是确定的。创建数组的时候确定其容量【数组长度一旦定义不可改变】
数组是引用数据类型,不是基础数据类型【String也是引用数据类型】
数组的定义
数组的定义方式和变量类似。数组名的规则和变量名一致【小驼峰式命名】
数组的声明
//第一种方式
int[] array;
//第二种方式
int array[];
数组的初始化
//声明加初始化
int[] array = new int[5];//括号里放数组长度,这里我定义数组长度为5
//已经声明过
array = new int[5]
数组的赋值
array[0] = 1;//括号内写数组下标
数组的取值
array[0];//取出数组第0个元素的值,由于定义的为int型故返回值为int
数组的长度
/*
由于数组为引用数据类型,故其声明的时候就会创建对象
该对象可以调用数组类中的方法和属性(后面面向对象会讲)
*/
array.length;
数组创建赋值一体操作
int[] array = new int[]{1,2,3,4};
int[] array1 = {1,2,3,4};
/*
不new对象直接赋值是在同一类中的简化操作
若数组在不同类,引用过来不能直接赋值,必须创建对象才能赋值
建议用第一种赋值方式
*/
数组的默认值
类型名 | 数据类型 | 默认值 |
整数类型 | byte short int long | 0 |
浮点类型 | float double | 0.0 |
字符类型 | char | 空白 |
布尔类型 | boolean | false |
字符串类型 | String | null |
数组的遍历
普通for循环遍历
int[] array = new int[5]{1,2,3,4,5}
for(int i = 0; i < array.length; i++){
System.out.println(array[i]);
}
增强for循环遍历
int[] array = new int[]{1,2,3,4,5};
/*
增强for循环是由迭代器实现的(后续会将)
冒号前面定义一个同数据类型的对象接受遍历的每一个数组
*/
for(int temp : array){
System.out.println(temp)
}
调用Arrays方法
int[] array = new int[5];
System.out.println(Arrays.toString(array));
内存中的数组
栈区和堆区
Java语言对内存做了若干分区,最为重要的两个分区是:堆区和栈区。
栈区:用于存放局部变量的内存区域。
存放基本数据类型和变量
堆区:唯一一个程序员可以操控和使用的内存区域//堆区必须通过new来开辟空间
存放引用数据类型定义的数据
内存中的数组:
下面有这样一行代码
int[] array = new int[2];
a[0] = 1;
a[1] = 2;
在内存中是这样实现的:
数组排序
选择排序
图解
选择一个基准位置,与其余位置逐一比较,若满足条件,则交换位置。
//先定义一个乱序数组这里我交给随机数
Random random = new Random();
int[] array = new int[5];
for(int i = 0; i < 5; i++){
//数不要太大
array[i] = random.nextInt(100);
}
//遍历并展示数组
System.out.println(Arrays.toString(array));
/*
开始选择排序
外层循环控制的是选择的基准数
*/
for(int i = 0; i < array.length; i++){
//内层循环控制的是基准数后面与其比较的数
for(int j = i; j < array.length-1; j++){
//判断当前数是否有下一个数大,大则交换,反之不变
if(array[j] > array[j+1]){
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
System.out.println(Arrays.toString(array));
冒泡排序
图解
//冒泡排序
public static void test2(int[] array){
//外层循环,每次循环确定一个极值,下次排序少排序一个
for(int j = 0; j <array.length-1; j++) {
for (int i = 1; i < array.length -j; i++) {
//若当前元素比前一个元素小,元素互换位置
if (array[i-1] < array[i]) {
int temp = array[i - 1];
array[i - 1] = array[i];
array[i] = temp;
}
}
}
System.out.println(Arrays.toString(array));