| |
|
开发:
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,存放的是二维数组的内存地址。
? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |