一、数组的概念:
数组是一种数据结构。可以用于存储多个数据。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是几维数组类似的加几个中括号就完成了。
四、数组在内存中的表现形式。
图一:一维数组:

图二:多维数组。

五、数组的操作。
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)选择排序法:

分析:从数组的第一位元素开始,分别让每个元去去数组里比较一遍,以在第伦比较中得出第几大值或第几小值,并氢他们放入相对应的位置,最后得出排序后的结果。
实现代码如下:
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)冒泡排序法

分析:分别从数组的左端或者右端出了,逐一进行相临比较,如果不符合排序条件,就互换位值,以求达到排序。
代码如下:
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)二分查找法。

分析: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)查表法。
当有一组数据与一组序列数有着对应关系,我们就可以使用查表法。例如:星期,月分,年份等等。如图:

我们来做一个进制转换的实例。代码如下:
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;
}
}
本人学习笔记,如有不对请指教,请给予纠正 谢谢!!!