Java 数组

Java 数组

概述

  • 数组是存储数据长度固定的容器,其中的数据类型保持一致
    • 是相同类型数据的有序集合
    • 每个数据称为数组元素,每个元素通过下标访问
    • 元素可以是任意数据类型,包括基本类型和引用类型
      • 数组变量属引用类型
      • 数组也可看成是对象,其每个元素可看成该对象的成员变量
  • 数组对象本身是在堆中的

定义

  • 数据类型名[] 数组名
  • 数据类型名 数组名[]
int[] arr;
int arr[];

初始化

动态初始化

  • 格式
    数据类型[] 数组名 = new 数据类型[数组长度];
    int[] arr = new int[3];
    
    • new:表示为数组开辟内存空间
    • 3表示数组长度
  • 系统自动为创建的数组赋初值
    • 如,int型则赋初值0
  • 包含:默认初始化
    • 数组是引用类型,其元素相当于类的实例变量
    • 数组一经分配空间,其中元素也按照实例变量同样的方式被隐式初始化

静态初始化

  • 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
  • 数据类型[] 数组名 = {元素1,元素2,...}
int[] arr = new int[]{11,22,33};
int[] arr = {11,22,33}

访问

打印数组

System.out.println(arr);

执行该语句结果为一串字符

  • 如:打印数组
    • [表示数组
    • I表示数组类型为整型
    • @是分隔符
    • 73a987ac表示数组的十六位地址

访问格式

  1. 索引:数组中元素的编号
    • 从0开始
  2. 格式:数组名[索引]
    System.out.println(arr[0]);
    
  3. 遍历
    • 将数组中元素遍历出来
    • 获取数组长度:arr.length
    • 方法
      • for循环
        public class ArrayTest01 {
        	public static void main(String[] args) {
        		//定义数组
        		int[] arr = {11, 22, 33, 44};
        		//使用通用的遍历格式
        		for(int x=0; x<arr.length; x++) {
        			System.out.println(arr[x]);
        		}
        	}
        }
        
      • forEach循环
        package com.cxl.demo26;
        
        public class Demo26_1 {
            public static void main(String[] args) {
                int[] arr = {11,22,33,44};
                for (int i : arr) {
                    System.out.println(i);
                }
            }
        }
        
        
      • 数组作方法参数
        package com.cxl.demo26;
        
        public class Demo26_2 {
            public static void main(String[] args) {
                int[] arr = {11,22,33,44};
                printArray(arr);
            }
            public static void printArray(int[] arr){
                for (int i = 0; i < arr.length; i++) {
                    System.out.print(arr[i]);
                }
            }
        }
        
      • 数组作返回值
        public static void main(String[] args) {
                int[] arr = {11,22,33,44};
        
            }
            public static int[] 方法名(int[] arr){
                int[] result = new  int[arr.length];
                return result;
            }
        

内存分配

  • 我们只需记住:栈内存堆内存
区域名称作用
寄存器给CPU使用,和我们开发无关。
本地方法栈JVM在使用操作系统功能的时候使用,和我们开发无关。
方法区存储可以运行的class文件。
堆内存存储对象或者数组,new来创建的,都存储在堆内存。
方法栈方法运行时使用的内存,比如main方法运行,进入方法栈中执行。
  • 一个数组的内存图
    一个数组的内存图

  • 多个数组的内存图
    多个数组的内存图

  • 多个数组指向同个数组的内存图
    多个数组指向同个数组的内存图

常见异常

索引越界异常

int[] arr = new int[3];	//索引:0 1 2
System.out.println(arr[3]);
  • 数组长度为3,索引最大只到2,却访问了索引3

空指针异常

//把null赋值给数组
arr = null;

多维数组

  • 可看成是数组的数组
    • 是特殊的一维数组
    • 每个数组元素都是一个数组

二维数组

  1. 定义
int arr[][] = new  int[2][5];	//可看成一个两行五列数组
int[][] arr = {{11,22},{33,44},{55,66}};
  1. 遍历
int[][] arr = {{11,22},{33,44},{55,66}};
for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.println(arr[i][j]);
            }
        }

Arrays类

  1. 数组的工具类:java.util.Arrays
  2. 数组本事没有方法供我们调用,但API中提供了工具类Arrays,可对数据对象进行基本操作
  3. Array类中方法都是static修饰的静态方法
    • 使用时可直接使用类名调用,不用使用对象调用
  4. 常用功能
    • 打印数组:toString方法
    • 给数组赋值:通过fill方法
    • 对数组排序:通过sort方法,按升序
    • 比较数组:通过equals方法
    • 查找数组元素:通过binarySearch方法,对排序好的数组进行二分查找
  5. 可通过JDK帮助文档查看其所含方法

稀疏数组

  1. 当一个数组中大部分元素为0或同一数值时,可用稀疏数组存储
  2. 处理方式
    • 记录数组共几行几列,有多少个不同值
    • 将具不同值元素和行列及值记录在一个小规模数组中,从而缩小程序的规模
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值