数组

1.数组的定义

数组就是用来存储一批同类型数据的内存区域(可以理解成容器)。
使用数组的原因:

  • 没有数组:存在多个变量,需要声明多个变量的名称,这些名称之间没有什么关系和规律。想访问所有的变量,就比较困难。
  • 有了数组:只需要有一个数组容器的名称,容器里面有通过数字表示的位置。位置的数字有规律。可以通过容器名称结合位置数字的方式,访问到某个变量。非常容易的访问所有的变量。通过有规律的索引,来访问没有规律的元素。

数组的定义:

  • 元素的数据类型[] 数组名称 = new 元素的数据类型[数组容器的大小]//首选方法

详细解释:

  • 元素:数组中的数据、数组中的变量
  • 元素的数据类型:数组中的数据的数据类型,用于决定每个空间的大小
  • []:表示是一个一维数组
  • 数组名称:数组本身也是一个变量,用于存储数组的地址变量。
  • =:赋值符号,将数组的地址,赋值给数组的名称
  • new:用于在堆内存中开辟空间
  • 元素的数据类型:和前面的数据类型保持一致
  • 数组容器的大小:可以存储的数据的个数

2.数组的初始化

为数组分配内存空间,并且赋值
分类:动态初始化、静态初始化

  • 动态初始化:定义数组的时候只确定元素的类型和数组的长度,之后再存入具体数据

    • 元素的数据类型 [] 数组名称 = new 元素的数据类型[数组元素的个数];

    • 元素的赋值方式:
      数组名称[元素的索引]=元素值;

    • 索引:
      元素在数组中的位置的数字,别名:下标、角标、脚标;从0开始

    • 注意事项:
      所有的元素,都需要逐个赋值
      如果数组中的元素,没有赋值,元素也有一个默认的初始化值,整数为0

  • 静态初始化:定义数组的时候直接给数组赋值

    • 元素的数据类型[] 数组名称 = new 元素的数据类型[]{元素值的罗列};
    • 注意事项:
      第二个方括号中,不要填写数组元素的个数
      元素值的罗列,元素和元素之间,使用逗号分隔。写了几个元素,就分配多大空间。
      罗列出来的元素值,数据类型必须和声明的数组元素的数据类型一致
      静态初始化有一个简写格式: 元素的数据类型[]数组名称={元素值的罗列};

获取数组的长度:数组名.length()

3.数组的异常

数组索引越界异常

  • Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:3
    数组下标越界异常

  • 原因:访问了数组中,不存在的索引。数组索引的范围是0~长度-1,超过了这个范围都是越界

  • 避免:不要访问不存在的索引

空指针异常

  • Exception in thread "main" java.lang.NullPointerException
    空指针异常
  • 原因:当引用不再指向任何的堆内存中的数据时,仍要通过这个引用访问堆内存中的数据,只能抛出异常
  • 避免:在使用引用前,可以先判断是否为null,不为null的时候去访问

4.数组的四个基本特点

数组的四个基本特点:

  1. 其长度是确定的。数组一旦被创建,它的大小就是不可改变的。
  2. 其元素必须是相同类型,不允许出现混合类型。
  3. 数组中的元素可以是任何数据类型,包括基本类型和引用类型。
  4. 数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象 类型,数组对象本身是在堆中。

5.数组的遍历

for-each循环
	for(数据类型 元素名称 : 数组名){
		循环体
	}
数组作为方法入参
	方法名(数据类型[] 数组名){
		方法体
	}
数组作为返回值
	return 数组名
import java.util.Random;
import java.util.Scanner;

public class ArrayDemo {
    public static void main(String[] args) {
        //生成一个长度为5的随机数数组,猜数组中的数字,猜对一个,将整个数组输出
        int[] nums = new int[5];

        Random rd = new Random();
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < nums.length; i++) {
            nums[i] = rd.nextInt(20) + 1;
        }
        OUT :
        for (; ; ) {
            System.out.println("请输入数字:");
            int num = sc.nextInt();
            for (int j = 0; j < nums.length; j++) {
                if (nums[j] == num){
                    System.out.println("恭喜你,猜对了");
                    break OUT;
                }
            }
        }
        System.out.println("数组为:");
        for (int i = 0; i < nums.length; i++) {
            System.out.print(nums[i]+"  ");
        }
    }
}

输出结果:

数组排序技术:

  • 冒泡排序(每次从数组中找出最大值放在数组的最后面去)
  • 选择排序
  • 快速排序
  • 插入排序

数组搜索技术:

  • 二分搜索
  • 分块查找
  • 哈希表查找

6.多维数组

7.Arrays类

数组的工具类java.util.Arrays
由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本操作

posted @ 2021-12-12 14:56  呵嗷嚎  阅读(52)  评论(0)    收藏  举报