数组

数组

定义

多个相同类型的数据按照一定顺序排列的集合,并且用一个名字命名,并通过编号方式对这些数据进行统一管理

要素

  1. 数组名
  2. 元素
  3. 索引(角标、下标)
  4. 数组长度(元素个数)

特点

  1. 有序排列
  2. 属于引用数据类型

    引用类型一般都是通过new关键字创建对象,然后把这个对象赋予给相应的变量

  3. 数组的元素类型可以是可以是基本数据类型,也可以是引用数据类型
  4. 创建数组所占的内存空间是连续的
  5. 数组的长度一旦确定,就不可以修改

分类

维数

  • 一维数组
  • 多维数组

元素

  • 基本数据类型元素的数组
  • 引用数据类型元素的数组

一维数组

声明和初始化

初始化结束,数组的长度就确定了

两种初始化方式

  1. 确定数组长度
  2. 确定了数组中的元素

调用指定位置的元素

通过角标的方式调用

注意

  • 数组的角标从0开始,到n-1结束
  • 不可以超出角标范围

获取数组长度

length属性

遍历数组

利用for循环

  • 初始条件是i = 0(数组的下标从0开始)
  • 循环条件是比数组长度小

数组元素的默认初始化值

  • 整型默认初始化值都为0
  • 浮点型默认初始化的值为0.0
  • char型默认初始化值为0或'\u000'(不是'0')
  • 布尔类型默认初始化值为false
  • 引用数据类型默认初始化的值为null

多维数组(常见二维数组)

从数组底层的运行机制来看,其实没有多维数组

二维数组

数组组成的数组(一个数组每个元素都是数组)

声明和初始化

前面的[ ]有数字,后面[ ]的可以有可以没有

堆空间里面先加载第一个数组框,数组框里面的元素填第二个数组,所以第一个[ ] 必须加载内容,第二个框才可能有内容

调用指定位置的元素

角标方式调用

获取数组长度

只要是数组就会有length属性

  • arr.length---外层元素个数
  • arr[n].length---内层元素个数(其中的n表示第n个外层元素,可以得到他的内层元素的个数)

遍历数组

双重循环[i][j]

  • 第一层遍历前面的i
  • 第二层遍历后面的j(j长度小于arr[i].length)

数组元素的默认初始化值

  • 规定:二维数组分为外层数组元素,内层数组元素
  • 注意是数值还是地址值

分为两种情况

  1. 前后都赋值了
    • 外层初始化值-------地址值
    • 内层初始化值-------与该数组对应的一维数组初始化相同
  2. 前赋值后没有赋值
    • 外层初始化值-----null

    二维数组中内层数组代表该外层数组中的元素是数组,没有定义划分,所以外层 也就为空,没有被初始化

    • 内层初始化值----不能调用,出错

Arrays工具类

  1. boolean equals(int[] a,int[] b):判断两个数组是否相等
  2. String toString(int[] a):输出数组信息
  3. void fill(int[] a,int val):将指定的值填充到数组当中(将数组中的所有元素替换成你输入的元素)
  4. void sort(int[] a):对数组进行排序
  5. int binarySearch(int[] a,int key):二分查找,能找到返回他的位置,找不到返回一个负数
int[] a = new int[]{1,2,3};
int[] b = new int[]{1,2,3};
int[] c = new int[]{1,2,3,4};
int[] d = new int[]{97,81,16,103};

//1. boolean equals(int[] a,int[] b):判断两个数组是否相等
System.out.println(Arrays.equals(a,b));//true
System.out.println(Arrays.equals(a,c));//false
        
//2. String toString(int[] a):输出数组信息
System.out.println(Arrays.toString(a));//[1, 2, 3]
        
//3. void fill(int[] a,int val):将指定的值填充到数组当中(将数组中的所有元素替换成你输入的元素)
Arrays.fill(b,56);
System.out.println(Arrays.toString(b));//[56, 56, 56]
        
//4. void sort(int[] a):对数组进行排序
Arrays.sort(d);
System.out.println(Arrays.toString(d));//[16, 81, 97, 103]
        
//5. int binarySearch(int[] a,int key):二分查找,能找到返回他的位置,找不到返回一个负数
int i = Arrays.binarySearch(d, 97);
int j = Arrays.binarySearch(d, 1);
System.out.println("97的位置" + i);//97的位置2
System.out.println("1的位置" + j);//1的位置-1

运行结果

常见异常

  1. 空指针
  2. 超出范围

常见问题

  1. arr1 = arr2

    • 把arr2的地址值赋给了arr1
    • 不能称作数组的复制
  2. 反转问题(交换两个变量值的问题)

    a与b的值进行交换

    设一个中间变量c

    c = a

    a = b

    b = c

posted @ 2020-06-22 18:03  南煎丸子  阅读(112)  评论(0)    收藏  举报