10.java数组

数组

数组定义

  1. 数组是相同类型数据的有序集合
  2. 数组描述的是相同类型的若干个数据,按照一定的先后顺序排列组合而成
  3. 其中,每一个数组称作一个数组元素,每个数组元素可以通过一个下标来访问他们

声明数组变量

首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:

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/

posted @   西敲  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示