一维数组
数组
:
数组是一种数据结构
,
用于存储同意类型值的集合
.
数组的定义
:
数组类型
[]
数组名
数组类型
数组名
[];
//
两种方式表达的效果一样 一般使用第一种 类型和数组表示符号放一起比较符合逻辑思维
.
//
上面两种格式格式知识声明了变量
,
并没有初始化值 没有初始化值的数组是不能被使用的
数组的初始化
:
分为两种
动态初始化和静态初始化
动态初始化
: // n
为指定的数组长度
,
数组中的元素值由系统默认指定
.
数组类型
[]
数组名
= new
数组类型
[ n];
例如
: int[] a = new int[3] //
定义了数组中数组长度为
3.
注意
:
静态初始化后是系统默认赋值 而且不同类型的数组默认赋值还不一样
Int
类型默认赋值
0 ;double
是
0 ; char
是
‘
\u0000
’
String
是
null ; boolean
是
false
静态初始化
:
给定数组中元素的值
,
系统的长度由系统给定
.
一定不要给数组长度赋值
.
数组类型
[]
数组名
= new
数组类型
[]{//
在这里面按顺序给数组赋值
};
例
:int[] a = new int[]{11,22,33,44}
下面这种是动态初始化的常用形式
两种形式表达的效果一样
数组类型
[]
数组名
= {//
在这里按顺序给数组赋值
}
例
:String[] a = {“11”,”22”,”33”,”44”};
获取数组中的元素
因为每个数组都有一个下标又称为索引值
索引值从
0
开始
,
最大索引值为数组长度
-1;
例如
//
定义一个数组
int[] a = {11,22,33,44};
想要获取
11
这个值
;
由于它是第一个数所以它的索引值是
0;
故可以这样获取
int b = a[0];
数组赋值
数组名
[
替换的数在数组中的下标
] =
替换值
.
例
:
定义数组
int[] a ={11,22,33};
赋值
a[2] = 44 ;
原本中
a[2]
的值对应的是
33,
但是被后来赋值的
44
给替换掉了
.
Java
内存分配
Java
为了提供程序的执行效率
,
将内存分配为五个部分
1.
栈内存
:
可以存储局部变量
进栈的方式
:
压栈 出栈的方式
:
弹栈
.
遵循先进后出
后进先出原则
栈内存中的局部变量
,
当方法调用或者代码块执行完毕时
,
会及时从内存中释放出去
2.
堆内存
:new
出来的定西在堆内存
New
出来的东西都存储再堆内存中
,
然后给当前对象名分配一个内存地址值
;
堆内存中穿件对象
,
当对象被输出之后
,GC
会将对象释放掉
,
不是立即释放
,
而是等待垃圾回收器空闲状态的时候
,
将对象释放
.
3.
方法区
:
4. 本地方法区
5.
寄存器
(cpu
有关
)
Java
中一个数组的内存分配图解
流程解析
:
首先在栈中创建一个局部变量
int[] arr
然后再堆内存中创建一个
new int[3] ,
系统会默认给出三个长度
,
三个长度默认
0,0,0;
当值分配完之后会给当前一个地址值
,
这个值会赋给栈内存中的
int[] arr , int[] arr
可以同过这个地址值访问
new
对象 进而可以进行取值等操作
.
Java
中两个数组的内存分配图解
创建前两个数组
,
分别输出数组名称和元素
,
给前两个数组中的赋值
;
创建第三个数组
,
将第一个对象名称赋值第三个数组名称
,
通过第三个数组的名称进行赋值
,
输出第一个数组的元素
Java
中三个数组的内存分配图解
(
这里面有多个引用指向同一个堆内存
)
流程解析与一个数组大致上没有差异
需要注意的是
:arr 1
和
arr3
用的是同一个堆内存 并没有给
arr3
一个新的堆内存空间
.
Arr3
中的赋值同样会替换掉原有的值
.
数数组的具体应用
1.)
遍历一个数组
//
提供一个
for
循环为数组遍历
,
值得注意的是数组的索引值最大值为
length – 1
核心代码
:
for(int i = 0 ; i < arr.length ; i++){
System.out.println(arr[i]);
}
2) .
给出一个静态数组
,
求最大值和最小值
需要定义一个参照物
核心代码
:
Int max = arr[0];
for(int i = 1 ; i < arr.length ; i++ ){
If(max < arr[i]){
max = arr[i] ;
}
}
3)
定义一个数组
,
元素逆序
分析
:
这要求元素中第一个数与最后一个数交换
,
第二个数与倒数第二个数交换
,
依次推类
;
核心代码
:
/*
需要一个中间变量来存储这个交换的值
,
值得注意的是需要交换的次数知识数组长度的一般
*/
Int temp = 0 ;
For(int i = 0 ; i < arr.length/2 ; i++){
Temp = arr[i];
arr[i] = arr[arr.length – 1 – x]
}
4)
数组中的元素查找法
(
数组中的基本查找法
)
定义一个数组
,
静态初始化
,
查找某个元素在该数组中第一次出现的索引
//
代码截图
运行结果
5)数组的元素查找法
想查找某个元素的在该数组中第一次出现的索引值
分析:
1)给出了数组
2)写一个查找数组中的元素的索引的方法
核心代码:
()
二维数组
二维数组:
1)动态初始化:
数据类型[][] 数组名 = new 数据类型[m][n];
(最常用的动态初始化方式,推荐使用
)
m代表二维数组中有几个一维数组
n代表每一个一维数组的长度.
例如:int[][] arr = new int[3][2] 代表有三个一维数组和2长度的一维数组;
定义的方式还有以下两种情况
数据类型[] 数组名[] = new 数据类型[m][n]
数据类型 数组名[][] = new 数据类型[m][n]
2)二维数组定义的第二种格式:
数据类型[][] 数组名 = new 数据类型[m][]
上面给定了一维数组的个数 数组长度,每个数组长度动态给定.
值得注意的是在不给定一维数组长度之前是无法给数组赋值的
第三种格式:静态初始化
格式 :数据类型[][] 数组名 ={
{元素1,元素2,元素3},{….}};
例:int[][] 数组名 = {
{1,2,3},{4,5,6},{7,8}} ///数组的长度可以不一样
二维数组的遍历
通过数组的个数和长度作为循环的判断,for循环外层控制数组个数,内层控制数组长度