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 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> day04Java基础 -> 正文阅读

[数据结构与算法]day04Java基础

1.数组:

? ? ? ? 1.1:数组介绍:? ? ? ?

? ? ? ? ? ? ? ? 1)数组就是用来存储一组相同类型数据的数据结构(容器)。 ??
? ? ? ? ? ? ? ??2)数组本身属于引用类型
? ? ? ? ? ? ? ? 3)数组中的元素可以是基本数据类型也可以是引用数据类型
? ? ? ? ? ? ? ? 4)Java中支持多维数组,多维数组中的元素都是数组
? ? ? ? 1.2:数组的定义格式:
? ? ? ? ? ? ? ? 1.2.1? 第一种格式:
? ? ? ? ? ? ? ? ? ? ? ? 数组类型? [ ] 数组名
? ? ? ? ? ? ? ? ? ? ? ? 示例:
? ? ? ? ? ? ? ? ? ? ? ?????? ? ?? int [ ] arr;
? ? ? ? ? ? ? ? ? ? ? ? ???????? double ??[ ] arr;
? ? ? ? ? ? ? ? ? ? ? ? ???????? char [ ] arr;
? ? ? ? ? ? ? ? 1.2.2? 第二种格式:
????????????????????????数组类型 数组名 [ ]
? ? ? ? ? ? ? ? ? ? ? ? 示例:
? ? ? ? ? ? ? ? ? ? ? ?????? ? ?? int?arr [ ];
? ? ? ? ? ? ? ? ? ? ? ? ???????? double ??arr?[ ];
? ? ? ? ? ? ? ? ? ? ? ? ???????? char arr [ ];
???????????????? 解释:在定义数组时,所指定的数据类型,是用来表示数组中元素的数据类型。
? ? ? ? 1.3:数组的动态初始化:
? ? ? ? ? ? ? ? 1.3.1? 什么是动态初始化
????????????????????????数组动态初始化就是只给定数组的长度,由系统给出默认初始化值。
????????????????1.3.2 动态初始化格式
???????????????????????? 数据类型 [] 数组名 = new 数据类型 [ 数组长度 ];
???????????????????????? int [ ] arr = new int [ 3 ];
????????????????1.3.3 动态初始化格式详解
????????????????????????
? ? ? ? ? ? ? ? ? ? ? ? 1)等号左边:
????????????????????????????????int:数组的数据类型
????????????????????????????????[ ]:代表这是一个数组
????????????????????????????????arr:代表数组的名称
? ? ? ? ? ? ? ? ? ? ? ?2)等号右边:
????????????????????????????????new:为数组开辟内存空间
????????????????????????????????int:数组的数据类型
????????????????????????????????[ ]:代表这是一个数组
????????????????????????????????5:代表数组的长度
????????1.4 数组元素访问? ? ? ? ? ? ?
????????????????1.4.1 什么是索引(下标)
? ? ? ? ? ? ? ? ? ? ? ?1) 每一个存储到数组的元素,都会自动的拥有一个编号,从0开始。
? ? ? ? ? ? ? ? ? ? ?? 2)这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。
? ? ? ? ? ? ? ? ? ? ? ?3)?数组中索引的最大值,就是数组的长度-1。
? ? ? ? ? ? ? ? ? ? ? ? 4)数组可以通过 数组名 .length 获取数组的长度。
????????
????????????????1.4.2访问数组元素格式
????????????????????????数组名? [? 索引? ];
????????????????1.4.3 示例代码
? ?
????????
1.5 内存分配
????????1.5.1 内存概述
????????????????内存是计算机中的重要原件,临时存储区域,作用是运行程序。
? ? ? ? ? ? ? ? 我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的。
????????????????必须放进内存中才能运行,运行完毕后会清空内存。
????????????????Java虚拟机要运行程序,必须要对内存进行空间的分配和管理
????????1.5.2 java 中的内存分配
????????????????目前我们只需要记住两个内存,分别是:栈内存和堆内存

????????局部变量指的是在方法内部或者语句块内定义的变量。
? ? ? ? 内存的运行:
?程序在执行时,首先把字节码文件加载到方法区,main 方法会被 jvm自动调用,此时就会进入main 法的栈内存,如果在 main 方法中声明并创建了一个数组对象,则数组声明的对象位于栈内存中,而当前 数组实际存放数据位于堆内存中,堆内存会产生一个地址,并且把该地址赋值给数组名,所以数组名实 际上是对堆内存地址的引用。
? ? ????????注意:引用类型,对象位于栈内存,对象存储的数据都会位于堆内存。
1.6? 数组的静态初始化
????????1.6.1 什么是静态初始化
????????????????????????在创建数组时,直接将元素确定。
????????1.6.2 静态初始化格式
? ????????????1)?完整版格式
???????????????????????? 数据类型? [ ]?? 数组名 = new 数据类型 []{ 元素 1 , 元素 2 ,...};
? ? ? ? ? ? ? 2) 简化版格式
???????????????????????? 数据类型? [ ] 数组名 = { 元素 1 , 元素 2 ,...};
? ?????????? 1.6.3 示例代码
? ? ? ?

1.7? 数组操作的两个常见问题
????????1.7.1 索引越界异常
? ? ? ? ? ? ? ?1)?出现原因
? ? ? ? ? ?
? ?
????????????????数组长度为3,索引范围是 0~2 ,但是我们却访问了一个 3 的索引。
????????????????程序运行后,将会抛出ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。
? ? ? ? ? ? ? ? 2) 解决方案
????????????????????????将错误的索引修改为正确的索引范围即可!
????????1.7.2 空指针异常
? ? ? ? ? ? ? ? 1)出现原因
????????????????arr = null 这行代码,意味着变量arr 将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候会抛出 NullPointerException 空指针异常。在开发中,空指针异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。
? ? ? ? ? ? ? ? 2)解决方案
????????????????????????给数组一个真正的堆内存空间引用即可!
1.8? 数组遍历
???????数组遍历:就是将数组中的每个元素分别获取出来,就是遍历。遍历也是数组操作中的基石。
????????
?????? 以上代码是可以将数组中每个元素全部遍历出来,但是如果数组元素非常多,这种写法肯定不行,因此我们需要改造成循环的写法。数组的索引是 0 lenght-1 ,可以作为循环的条件出现。

1.9? 多维数组
? ? ? ? 1)Java中其实并没有真正的多维数组,但是 Java 支持把一维数组可以作为其它数组的元素,这样就形成了多维数组
? ? ? ? 2)Java中只有一维数组
? ? ? ? 3)多维数组可以通过[ ] 来表示,一个 [ ] 表示一维数组,几个中括号就表示几维数组
1.9.1 二维数组
????????动态初始化语法格式:
???????? 静态初始化语法格式:

?

注意:多维数组在进行迭代输出时,数组的维数和使用的循环的嵌套数是一一匹配的。例如:三维数组,就要使用三重for 循环才能把数据迭代输出。
----------------------------------------------------------------------------------------
/**
多维数组
*/
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 ]);
}
}
// 动态初始化 , 二维数组的长度必须要指定
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 ;
}
}
---------------------------------------------------------------------------------------
1.9.2 内存分析
解析:
????????上面图中所表示的,就相当于我们在堆中开辟了四个一维数组,其中一个一维数组用来存放二维数组的元素,然后由二维数组的元素各自指向一个一维数组,栈中定义了一个变量arr1,存放的是二维数组的内存地址。

?

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

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/9 15:24:09-

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