黑马程序员—关于数组的应用

本文详细介绍了Java中的数组概念、种类及定义方式,并通过示例讲解了一维数组与多维数组的操作方法,包括遍历、排序及查找等实用技巧。
------- android培训java培训、期待与您交流! ----------

一、数组的概念:

数组是一种数据结构。可以用于存储多个数据。Java数组要求所有的数组元素都具有相同的数据类型。而且一旦一个数组初始化完毕,数组在内存中所占用的空间将被固定下来,因此数组的长度将不可改变,即使把某个数组元素的数据清空,但它所占的空间依然被保留,依然属于该数组,数组长度依然不可变。

Java的数组不但可以存储基本类型的数据,也可以存储引用类型的数据。只要所有的数组元素具有相同的类型就可以了。

数组它是一种引用类型,数组变量保存在栈内存中,变量的值是指向堆内存相应的的地址引用。

二、数组种类:

Java数组有一维数组,二维数据,三维数组,甚至五维、六维等,其实java没有多维数组。Java多维数组其实是一种特殊的数组,即是数组中的数组,一个数组中保存着别一个数组的地址引用而已。

三、数组的定义:

1)一维数组的定义:

第一种:type[] arrName=new type[length];

第二种:type[] arrName=new type[length]{元素,元素,元素,元素,......}

第三种:type[] arrName={元素,元素,元素,元素,......}

例如:

Int[] arr=new int[10];

Int[] arr=new int[10]{10,20,30,1,2,1,2,3,4,5}

int[] arr={10,20,30,1,2,1,2,3,4,5}

String[] strArr=new String[2]

Char[] cArr=new Char[2];

2)多维数组的定义:

1、二维数组:

Type[][] arr=new type[10][10]

Type[][] arr=new type[2][2]{{元素,元素},{元素,元素}}

Type[] arr={{元素,元素},{元素,元素}}

2是几维数组类似的加几个中括号就完成了。

四、数组在内存中的表现形式。

图一:一维数组:

黑马程序员—关于数组的应用 - xybiao85 - xybiao85的博客

 

图二:多维数组。

黑马程序员—关于数组的应用 - xybiao85 - xybiao85的博客

 

五、数组的操作。

1)对数组的作操作其实就是对其数组角标的操作.

一维数组:

例如:int[] arr=new int[10];

  Int a=arr[0];//a=0.

 arr[1]=20;

多维数组:

例如:int[][] arr=new int[10][2];

 Int a=arr[1][0];//获取角标为1下的组数角标为0的值。

    Arr[1][0]=20;//arr数组下标为1下元素的数组的下标为0的元素设置值为20

注意:数组的角标从0开始,到数组长度减1

2)遍历数组

一维数组的遍历:

例如:

Class arrTest

{

Public static void main(String[] args)

{

Int[] arr=new int[10];

For(int i=0;i<arr.length;i++)

{
System.out.println(arr[i]);

}

}

}

二维数组的遍历:

例如:

Class  arrTest

{

Public static void main(String[] args)

{

Int[][] arr=new int[10][2];

For(int i=0;i<arr.length;i++)

{

For(int j=0;j<arr[i].length;j++)

{

System.out.println(arr[i][j]);

}

}

}

}

六、数组实际的应用。

1)选择排序法:

黑马程序员—关于数组的应用 - xybiao85 - xybiao85的博客

 

分析:从数组的第一位元素开始,分别让每个元去去数组里比较一遍,以在第伦比较中得出第几大值或第几小值,并氢他们放入相对应的位置,最后得出排序后的结果。

实现代码如下:

Class sortTest

{

Public static void main(String[] args)

{

Int[] arr=new int[]{20,25,10,30,60};

For(int i=0;i<arr.length-1;i++)

{

For(int j=i+1;j<arr.lenght-1;j++)

{

If(arr[i]>arr[j])

{

Int temp=arr[i];

arr[i]=arr[j];

arr[j]=temp;

}

}

}

For(int i=0;i<arr.length;i++)

System.out.println(arr[i]);

}

}

2)冒泡排序法

黑马程序员—关于数组的应用 - xybiao85 - xybiao85的博客

 

分析:分别从数组的左端或者右端出了,逐一进行相临比较,如果不符合排序条件,就互换位值,以求达到排序。

代码如下:

Class arrtest

{

Public static void main(String[] args)

{

Int[] arr=new int[]{20,25,10,30,40,60};

For(int i=0;i<arr.length;i++)

{

For(int j=0;j<arr.length-i-1;j++)

{

If(arr[j]>arr[j+1)

{

Int temp=arr[j];

arr[j]=arr[j+1];

arr[j+1]=temp;

}

}

}

}

}

3)二分查找法。

 

黑马程序员—关于数组的应用 - xybiao85 - xybiao85的博客

 

分析:1、在二分查找法中有三个变量值:第一个最小索引,中间索引,最大索引

2、(最小索引+最大索引)/2=中间索引

3、当要查找的值小于中间索引对应的值时

最小索引不变,最大索引角标计算为
max=mid-1;

4、当要查找的值大于中间索引对应的值时最大索引不变,最小索引计算为:

Min=mid+1

5、如果要查找的值等于中间索引对应的值时,查找成功。

6、max<min时,查找结束,数组中没有要查找的值。

代码如下:

Class arrtest

{

Public static void main(String[] args)

{

int[] arr=new int[]{20,25,10,30,40,60}

Int key=30;

Int index=-1;

Int min,mid,max;

min=0;

max=arr.length-1;

While(max>=min)

{

mid=(min+max)/2

If(key>arr[mid])

min=mid+1;

else if(key<arr[mid])

max=mid-1;

else

index=mid;

}

}

}

4)查表法。

当有一组数据与一组序列数有着对应关系,我们就可以使用查表法。例如:星期,月分,年份等等。如图:

 

黑马程序员—关于数组的应用 - xybiao85 - xybiao85的博客

 

我们来做一个进制转换的实例。代码如下:

Class transform

{

Public string tran(int tranData,int base,offset)

{

Char[] c={'0','1','2','3','4','5','6','7',

'8','9','A','B','C','D','E','F'}

Int[] arr=new int[32];

Int pos=arr.length;

Int temp=tranDate;

While(temp!=0)

{

arr[--pos]=c[temp&offset]

temp=temp>>>base;

}

String hex="";

for(int i=pos;i<arr.length;i++)

hex=hex+(char)arr[i];

If(base=3)

return 0+hex;

Else if(base==4)

return 0x+hex;

else

return hex;

}

}

本人学习笔记,如有不对请指教,请给予纠正 谢谢!!!

------- android培训java培训、期待与您交流! ----------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值