【Java】数组


Java核心编程I 79页

数组的概述

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

  2. 数组是有序排列的

  3. 数组本身是引用数据类型,数组的元素可以是任意的。

  4. 创建数组对象会在内存中开辟一段连续的空间,数组名引用的是这块连续空间的首地址

  5. 数组的长度一旦确定但不能修改

Arrays 方法

JAVA核心技术(85页)
Arrays方法是操作数组的工具类 import java.util.Arrays;

equals 比较两个数组是否相等

static boolean equals(xxx[] a, xxx[]b)
如果两个数组大小相同,并且下标相同的元素都对应相等,返回true

toString deepToString 输出数组信息

输出一维数组信息
static String toString(xxx[] a)
输出二维数组信息 deepToString

在这里插入图片描述

fill 将指定值填充到数组

static void fill(xxx[] a, xxx v)

在这里插入图片描述

binarySearch 二分查找

static int binarySearch(xxx[] a, int )
在这里插入图片描述

sort

使用优化的快速排序算法对数组进行排序
static void sort(xxx[] a)
在这里插入图片描述

一维数组

声明和初始化

  1. 声明
    int[] ids//声明;
  2. 初始化
  • 静态初始化
    数组的初始化和数组元素的赋值操作同时进行
    ids = new int []{1001,1002,1003,1004};
  • 动态初始化
    数组的初始化和数组元素的赋值操作分开进行
    String[] names = new String[5];

数组的长度 array.length

int n = ids.length

数组元素的默认初始化值

整形和浮点型数组元素

  1. 创建一个数字数组时,所有的元素都初始化为0。即byte、short、int、long都是0
  2. 浮点型的数组元素初始值为0.0

char型

char型初始化为0 而非’0’
虽然输出看起来是空格 但实则是0

boolean型

  1. boolean数组元素会初始化为false。

引用数据类型

  1. 对象数组的元素则初始化为一个特殊值null,表示这些元素还未存放任何对象。
  2. 引用数据类型如String

遍历数组

for 下标循环

  1. 数组的索引从0开始
  2. 遍历
for(int i = 0;i<ids.length;i++){
   
	ids[i] = i;
}

for each 循环 (不考虑下标

for each循环可以用来依次处理数组(或其他元素集合)中的每个元素,而不比考虑指定下标值
for(variable:collection) statement

for(int element:a){
   
	System.out.println(element);
}

Arrays.toString(a)

调用Arrays.toString(a) 返回一个包含数组元素的字符串

System.out.println(Arrays.toString(a));

数组的内存解析

内存的简化结构

内存结构主要用到栈和堆。
栈(stack)是线性的,主要存放局部变量(放在方法中的变量都是局部变量)。
堆(heap)主要存放new出来的结构,一个是对象 一个是数组。
在这里插入图片描述

因为放在方法中的变量都是局部变量,局部变量都放在栈中。所以=左边的都是放在栈中。
new出来的是放在堆中,把在堆中的首地址赋给 栈中调用它的变量。
在这里插入图片描述

多维数组

二维数组的声明和初始化

  1. 静态初始化
int[][] arr = new int [][]{
   {
   1,2,3},{
   4,5,},{
   6,7,8}};
int[][] arr = {
   {
   1,2,3},{
   4,5,},{
   6,7,8}}; //也是正确的 类型推断
  1. 动态初始化1
    String[][] arr2 = new String[3][2]

默认初始化值:外层元素的初始化值为地址值,内层元素的初始化值与一维数组的初始化情况相同

int[][] arr = new int[4][3];
System.out.println(arr[0]);//是地址值
System.out.println(arr[0][0]);//是零

int[][] arr1 = new int[4][];
System.out.println(arr3[0]);//null 一维数组是引用类型,默认是null
  1. 动态初始化2
String[][] arr2 = new String[3][];
arr2[0] = new String[4];

默认初始化值:
外层元素的初始化值为null
内层不能调用,否则报错

int[][] arr1 = new int[4][];
System.out.println(arr3[0]);//null 一维数组是引用类型,默认是null

左边的中括号可以放在任意位置,如String arr2[][] 或String [] arr2[] 但一般不这么写

Arrays.deepToString() 快速打印二维数组

int[][] a = new int [][]{
   {
   1,2,3},{
   4,5},{
   6,7,8}};
System.out.println(Arrays.deepToString(a));
//输出:[[1,2,3],[4,5],[6,7,8]]

二维数组的内存解析

右上角的代码在内存中的情况如下
在这里插入图片描述
当这个方法结束后,arr1就会出栈,出栈后指针没有 那堆的部分就会被回收

数组中常见的异常

数组越界

ArrayIndexOutOfBoundsExcetion

如果数组的取值范围是[0,5],那小于等于-1的,和大于等于6的索引都是数组越界

空指针异常

NullPointerException

//情况一:
//是不是数组没有造,或者造了后来赋值null
int[] arr1 = new int[]{
   1,2,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值