Java基础(3数组)

  • Post author:
  • Post category:java



一维数组


数组

:

数组是一种数据结构


,


用于存储同意类型值的集合


.


数组的定义

:


数组类型

[]

数组名


数组类型


数组名

[];

//

两种方式表达的效果一样   一般使用第一种  类型和数组表示符号放一起比较符合逻辑思维


.

//

上面两种格式格式知识声明了变量


,


并没有初始化值 没有初始化值的数组是不能被使用的


数组的初始化

:

分为两种

动态初始化和静态初始化


动态初始化

: // 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循环外层控制数组个数,内层控制数组长度




版权声明:本文为qq_35501660原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。