10.java数组
数组
数组定义:
- 数组是相同类型数据的有序集合
- 数组描述的是相同类型的若干个数据,按照一定的先后顺序排列组合而成
- 其中,每一个数组称作一个数组元素,每个数组元素可以通过一个下标来访问他们
声明数组变量
首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:
dataType[] arrayRefVar; // 首选的方法
或
dataType arrayRefVar[]; // 效果相同,但不是首选方法
创建数组
arrayRefVar = new dataType[arraySize];
上面的语法语句做了两件事:
- 一、使用 dataType[arraySize] 创建了一个数组。
- 二、把新创建的数组的引用赋值给变量 arrayRefVar。
数组变量的声明,和创建数组可以用一条语句完成,如下所示
dataType[] arrayRefVar = new dataType[arraySize];
另外,你还可以使用如下的方式创建数组。
dataType[] arrayRefVar = {value0, value1, ..., valuek};
数组的元素是通过索引访问的。数组索引从 0 开始,所以索引值从 0 到 arrayRefVar.length-1。
java内存分析
详细分析请看:
数组的四个基本特点
- 其长度是确定的,数组一旦被创建,它的大小就是不可以改变的
- 其元素必需是相同类型,不允许混合类型。
- 数组中的元素可以是任何数据类型,包括基本类型和应用类型
- 数组变量属于引用类型,数组也可以看成是对象,数组中的每个元相当于该对象的成员变量
- 数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。
数组边界
- 下标的合法区间:[0-length-1],如果越界就会报错
- 数组是相同数据类型的有序集合
- 数组也是对象。数组元素相当于对象的成员变量
- 数组长度是确定的,一旦创建就不可改变。如果越界。则抛出异常:ArrayIndexOutOfBoundsException
处理数组
数组的元素和大小是固定的,所以通常用基本循环或For-Each来处理数组
int[] array = {5,2,6,4};
//打印所有数组元素
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
//===============================
int max = array[0];
//查找数组中的最大值
for (int i = 0; i < array.length; i++) {
if (array[i]>max){
max = array[i];
}
}
System.out.println("最大值:"+max);
//===============================
int sum = 0;
//数组元素求和
for (int i = 0; i < array.length; i++) {
sum+=array[i];;
}
System.out.println("合计:"+sum);
数组作为方法的参数
public static void printArray(int[] array) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
}
数组作为方法返回值
//反转数组方法
public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1; i < list.length; i++, j--) {
result[j] = list[i];
}
return result;
}
多维数组
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组,例如:
String[][] str = new String[2][2];//这个数组可以看成2行2列的数组
str = {{"你","好"},{"世界","你好"}}
String a = str[1][1]; //这就是指第一行第一列的数据,值为:你
String[][][] = str1 = new String[2][2][4] //这是三维数组,以此类推多维数组
Arrays类
java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的,可以直接类目调用。
具有以下功能:
- 给数组赋值:通过 fill 方法。
- 对数组排序:通过 sort 方法,按升序。
- 比较数组:通过 equals 方法比较数组中元素值是否相等。
- 查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作
冒泡排序
- 冒泡排序,类似于水中冒泡,较大的数沉下去,较小的数慢慢冒起来,假设从小到大,即为较大的数慢慢往后排,较小的数慢慢往前排。
- 直观表达,每一趟遍历,将一个最大的数移到序列末尾。
算法描述:
- 比较相邻的两个数,如果前一个比后一个大,那么交换位置
- 第一趟是第一个和第二个比较,第二趟是第二个和第三个比较,以此类推,只要前一个值大于后一个,那么就交换位置
- 第二趟是从第二个数开始向后比较,将第二大的数放到倒数第二的位置。因为最后一个数是最大的,因此第二趟就少了一次循环。
//冒泡排序
int[] array = {3,15,4,7,34,11,8};
int temp = 0;
for (int i = 0; i < array.length-1; i++) {
for (int j = 0 ; j < array.length-1-i; j++) {
if (array[j]>array[j+1]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
稀疏数组
参考链接:稀疏数组详解
注:
鸣谢《狂神说》,免费java学习地址:https://www.kuangstudy.com/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现