IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数组笔记. -> 正文阅读

[数据结构与算法]数组笔记.

1.数组介绍

数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致。

数组就是用来存储一组相同类型数据的数据结构。

数组本身属于引用类型

数组中的元素可以是基本数据类型也可以是引用数据类型

Java中支持多维数组,多维数组中的元素都是数组

2.数组的定义格式? ? ? ?

在定义数组时,所指定的数据类型,是用来表示数组中元素的数据类型

1.数据类型[] 数组名

示例:

int[] arr;

2.数据类型 数组名[]

示例:

int arr[];

3.数组的动态初始化

数组动态初始化就是只给定数组的长度,由系统给出默认初始化值

格式:

数据类型[] 数组名 = new 数据类型[数组长度];

示例:

int[] arr = new int[5];

/*等号左边:
int:数组的数据类型
[]:代表这是一个数组
arr:代表数组的名称
等号右边:
new:为数组开辟内存空间
int:数组的数据类型
[]:代表这是一个数组
5:代表数组的长度

*/

4.数组元素访问

每一个存储到数组的元素,都会自动的拥有一个编号,从0开始。

这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。

数组中索引的最大值,就是数组的长度-1。

数组可以通过 数组名.length 获取数组的长度。

格式:

数组名[索引];

package com.sunlw.array;
public class Demo3ArrayIndex {
    public static void main(String[] args) {
        int[] arr = new int[3]; // 0 1 2
        System.out.println(arr); // 数组的内存地址 [I@10f87f48
        // 数组名[索引] 访问数组容器中的空间位置
        System.out.println(arr[0]); // 0 系统自动分配的默认初始化值
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        System.out.println("--------------");
// 数组名[索引]
        arr[0] = 11;
        arr[1] = 22;
        arr[2] = 33;
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
    }
}

5.内存分配

内存概述

内存是计算机中的重要原件,临时存储区域,作用是运行程序。

我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的。

必须放进内存中才能运行,运行完毕后会清空内存。

java虚拟机要运行程序,必须要对内存进行空间的分配和管理。

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

程序在执行时,首先把字节码文件加载到方法区,main方法会被jvm自动调用,此时就会进入main方 法的栈内存,如果在main方法中声明并创建了一个数组对象,则数组声明的对象位于栈内存中,而当前 数组实际存放数据位于堆内存中,堆内存会产生一个地址,并且把该地址赋值给数组名,所以数组名实 际上是对堆内存地址的引用。

引用类型,对象位于栈内存,对象存储的数据都会位于堆内存

6.数组的静态初始化

格式:

数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...}

示例:

package com.sunlw.array2;
public class Demo1Array {
        public static void main(String[] args) {
        // 数据类型[] 数组名 = new 数据类型[]{数据1,数据2,数据3...};
        int[] arr = new int[]{11,22,33};
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        // 数据类型[] 数组名 = {数据1,数据2,数据3...};
        int[] arr2 = {44,55,66};
        System.out.println(arr2);
        System.out.println(arr2[0]);
        System.out.println(arr2[1]);
        System.out.println(arr2[2]);
    }
}

7.数组操作的两个常见问题

1.索引越界异常

数组长度为3,索引范围是0~2,但是我们却访问了一个3的索引。

程序运行后,将会抛出ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越 界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。

解决方案

将错误的索引修改为正确的索引范围即可!

2.空指针异常

arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因 此运行的时候会抛出 NullPointerException 空指针异常。在开发中,空指针异常是不能出现的, 一旦出现了,就必须要修改我们编写的代码。

解决方案

给数组一个真正的堆内存空间引用即可!

8.多维数组

Java中其实并没有真正的多维数组,但是Java支持把一维数组可以作为其它数组的元素,这样就形成了多维数组

Java中只有一维数组

多维数组可以通过[]来表示,一个[]表示一维数组,几个中括号就表示几维数组

示例静态初始化:

public class Demo5{
    public static void main(String[]args){
        //二维数组,静态初始化
        int[][]arr1={{10,20,30},{40,50,60},{7,8,9}};
        int[][]arr4=new int[][]{{1,2,3},{4,5,6},{7,8,9}};
        //二维数组的长度,其实就是一维数组的个数
        System.out.println(arr1.length);
        //迭代数据
        for(int i=0;i<arr1.length;i++){
            for(int j=0;j<arr1[i].length;j++){
                System.out.println(arr1[i][j]);
            }
        }

示例动态初始化:

public class Demo5{
    public static void main(String[]args){
        //动态初始化,二维数组的长度必须要指定
        char[][]arr2=new char[3][];
        //初始化,必须创建一维数组
        arr2[0]=new char[2];
        arr2[0][0]='a';
        arr2[0][1]='b';        
        arr2[1]=new char[3];
        arr2[1][0]='c';
        arr2[1][1]='d';
        arr2[1][2]='e';
        arr2[2]=new char[2];
        arr2[2][0]='f';
        arr2[2][1]='g';
        System.out.println(arr2[0][0]);
        System.out.println(arr2[0][1]);
        System.out.println(arr2[1][0]);
        System.out.println(arr2[1][1]);
        System.out.println(arr2[1][2]);
        System.out.println(arr2[2][0]);
        System.out.println(arr2[2][1]);    
        int[][][]arr3={{{1,2},{3,4}},{{5,6},{7,8,9}}};
        System.out.println(arr3.length);
        int[][][]arr4=new int[3][][];
        arr4[0]=new int[2][];
        arr4[0][0]=new int[3];
        arr4[0][0][0]=10;
        arr4[0][0][1]=20;
    }
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-29 16:33:23  更:2021-11-29 16:35:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:31:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码