------- android培训、java培训、期待与您交流!--------
数组的基本概念
数组是一种简单的复合数据类型。它是存放具有相同数据类型的数值的数据结构,它的每一个元素都具有同一个类型,先后顺序也是固定的,数组一旦创建之后,大小就固定了,不再发生变化,它的数据类型既可以是简单类型,也可以是类,数组通常分为一维数组,二维数组和多维,但是使用比较多的还是一维数组和二维数组。
一维数组
一维数组可以存放成千上万个数据,它们是一组相关的存储单元,这些存储单元在逻辑上被看作是相互独立的若元素,它们具有相同的名字和数据类型,数组中的某个特定的元素有它的下标决定,只有一个下标的数组称为一维数组。声明一个一维数组的形式如下:
数据类型 数组名[ ]或者数据类型 [ ] 数组名
class ArrayClass
{
public static void main(String[] args)
{
int i;
int [] arr = new int [10];//声明数组并赋值开辟空间
System.out.println("数组长度是: "+arr.length);//输出数组长度
for (i=0;i<10;i++)//输出数组的元素内容。
{
System.out.print("a["+i+"]="+arr[i])+",");
if (i%2==1)//控制打印行数,每行打印2个元素
{
System.out.println();
}
}
}
}
运行结果:数组长度是:10
a[0] =0;a[1]=0;
a[2] =0;a[3]=0;
a[4] =0;a[5]=0;
a[6] =0;a[7]=0;
a[8] =0;a[9]=0;
上述代码声明了一个整型数组arr并用new运算符为其分配空间,其元素个数为10,然后利用for循环输出数组内容。由于程序中没有赋具体值,所以数组元素指向了int的默认值0,因此输出为0。arr .ength代表数组的长度为10,也就说数组元素个数是10个。
引用 :
Java是通过以下方式来引用二维数组的元素的,引用形式为;
数组名 [行号] [列号] 例如:
n = a[3][4]; 表示要访问二维数组a的第4个一维数组中的第5个元素,如果要访问所以元素中的第一个应该这么些:n = a[0] [0];
如果要直接访问所以元素中的最后一个,要这么写:
r = a.length-1;
c1 =a[r].length-1;
k = a[r] [c1];
!注意:不管在多维数组中还是在一维数组中,下标都是从0开始到数组的长度-1为止
数组名.length //取得数组的行号即一维数组的个数。
数组名[行的索引].length //取得特定行元素的个数即指定的一维数组内的元素的个数。
下面是关于二维数组使用方法的程序:
class ArrayClass_2
{
public static void main(String[] args)
{
int i,j,sum=0;
int score[][]={{60,70,85,45},{89,78,86,66},{56,84,76,91}};//声明数组并设置初值
for (i=0;i<score.length;i++ )
{
sum = 0;
System.out.println("第"+(i+1)+"个人成绩为:");
for (j=0;j<score[i].length ;j++)
{
System.out.println(score[i][j]+" ");//输出个人单科成绩
sum+=score[i][j];//计算总成绩
}
System.out.println("总成绩为: "+sum);
}
}
}
运行结果:
第1个人的成绩为:60 70 85 45 总成绩为:260
第2个人的成绩为:89 78 86 66 总成绩为:319
第3个人的成绩为:56 84 76 91 总成绩为:307
上面这段程序利用整数变量i、j作为外层循环与内层循环控制变量及数组的下标,变量i控制行的个数,变量j控制一行中列的个数;而sum则用来存放所以数组元素的和,也就是总成绩。
数组最值
class ArrayDemo2{
public static void main(String[] args){
//数组求最值
//思路
//两两相比,留一个大的,再与下面的所有的
//数重复两两相比,直到所有的数字全部比完
int[] arr = {4,2,6,8,11,3,9};
int max = 0;
//遍历数组,使用每一个元素与max相比
//如果比较的值比max小,跳过
//如果比较的值比max大,将max改成比较的值
//对数组循环完毕后,max就是最大值
for(int i = 0;i<arr.length;i++){
if(max<arr[i]){
max = arr[i];
}
}
System.out.println(max);
}
数组排序
选择排序
的区域中找出最大/小值并将其放
置到未完成排序区域的首位,然
后改变两个区域的空间大小,并
反复上述过程,直到未排序区只
有一个数据
/*
数组的排序
选择排序法
选择排序法改良
*/
class SortDemo2{
public static void main(String[] args){
/*
int[] arr = {4,26,51,38,3,45,69,87,70,92};
for(int x = 0 ; x<arr.length -1 ;x++){
//一轮
//使用第一个作为参考值,然后与后面的每个元素进行比较,大就换
for(int i = x+1 ;i<arr.length;i++){
if(arr[x]>arr[i]){
int temp = arr[x];
arr[x] = arr[i];
arr[i] = temp;
}
}
}
for(int i = 0;i<arr.length;i++){
System.out.println(arr[i]);
}
*/
int[] arr = {4,26,51,38,3,45,69,87,70,92};
//一轮
//设置0号为参考值
for(int x = 0;x < arr.length-1;x++){
int temp = x;
//使用参考值与1号比,谁大谁做参考值
for(int i = x+1; i < arr.length ;i++){
if(arr[temp]<arr[i]){
temp = i;
}
}
//交换
//0位置与temp位置交换
int temps = arr[x];
arr[x] = arr[temp];
arr[temp] = temps;
}
for(int i = 0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
冒泡排序
进行比较,并将其较大/小的放在后面,然后
使用第二个与第三个元素进行比较,重复上
述操作,当数组遍历一轮时,最大/小的元素
将置于数组末端;第二轮,改变遍历数组范
围,从第一个元素到倒数第二个元素,对其
进行上述操作;第三轮对第一个元素到倒数
第三个元素进行上述操作,如此反复,最终
对数组实现排序
class SortDemo{//冒泡排序法
public static void main(String[] args){
int[] arr = {4,2,6,1,8,3,5,9,7,0};
//找出最大的,把最大的放到队尾
for(int i = 1 ;i<= arr.length - 1;i++){
for(int j = 0;j<arr.length - i;j++){
//比较两个相邻的数据,如果前面的大,交换位置
if( arr[j] > arr[j+1]){
//数据交换
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
for(int i = 0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
减少排序过程中数据移动次数
数组元素查找
/*
二分法查找
*/
class QueryDemo{
public static void main(String[] args){
//查找得到的一定是对应所在的位置
int num = 9;
int[] arr = {1,2,3,4,5,6,7,8,9};
int min = 0;
int max = arr.length-1;
while(min<max){
//比对值对应的索引
int mid = (min+max)/2;
//使用你要查找的数据域要比对的索引上的数据进行比对
if(num > arr[mid]){
//min要移动到mid+1,max不动
min = mid + 1;
}else if(num < arr[mid]){
//max要移动到mid-1,min不动
max = mid - 1;
}else{
System.out.println(mid);
break;
}
}
}
}
关于数组暂时总结出这些,欢迎各位批评指正!
----------------- android培训、java培训、期待与您交流!------------------
详细请查看:http://edu.csdn.net