一维数组
数组:数组是一种数据结构,用于存储同意类型值的集合.
数组的定义:
数组类型[] 数组名
数组类型 数组名[];
// 两种方式表达的效果一样 一般使用第一种 类型和数组表示符号放一起比较符合逻辑思维.
//上面两种格式格式知识声明了变量,并没有初始化值 没有初始化值的数组是不能被使用的
数组的初始化:
分为两种
动态初始化和静态初始化
动态初始化: // 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循环外层控制数组个数,内层控制数组长度