在我讲数组的时候,大家一定对数组有一定的了解或者学过一点,今天我会从一维和二维两方面来谈谈我的理解,多维的有兴趣也可以自己推一下。
下面我列一张表来比较一下一二维数组的异同:
| 一维数组 |
数组的属性和方法 | 唯一的属性length |
数组的长度 | 数组名.length |
对应下标的元素值 | 数组名[下标] |
数组的定义方式 | 数据类型 [] 数组名 = new 数据类型[长度]; 数据类型 [] 数组名 = {值,...}; 数据类型 [] 数组名; 数组名 = new 数据类型[长度]; 数据类型 [] 数组名; 数组名 = new 数据类型[]{值,...}; |
存储方式 | 连续的存储空间 |
数组的优点 | 按下标顺序访问,读取速度快 |
数组的缺点 | 内存空间在定义的时候就固定了,不能改变内存大小 |
索引开始位置 | a[0] |
| |
| 二维数组 |
数组的属性和方法 | 唯一的属性length |
数组的长度 | 行:数组名.length 列:数组名[行下标].length |
对应下标的元素值 | 数组名[行下标][列下标] |
数组的定义方式 | 数据类型 [][] 数组名 = new 数据类型[行][列]; 数据类型 [][] 数组名 = {{值,...},...}; 数据类型 [][] 数组名; 数组名 = new 数据类型[行][列]; 数据类型 [][] 数组名; 数组名 = new 数据类型[][]{{值,...},...}; |
存储方式 | 连续的存储空间 |
数组的优点 | 按下标顺序访问,读取速度快 |
数组的缺点 | 内存空间在定义的时候就固定了,不能改变内存大小 |
索引开始位置 | a[0][0] |
除此以外,Java中的数组分为两类,第一类,基本数据类型
第二类,引用类型(对象类型,类类型)
例如:
String [] array = new String[10];
Student stu = new Student();
此时,array不是String基本数据类型,而是引用类型。
下面我简单的附上我写的,一维数组的排序,我用的是插入排序:
import java.util.Random;
//插入排序
/*
* 外层的for循环要做n-1次,内层的for循环循环次数分析起来要更困难一些,
* 因为该循环次数依赖于i-1个记录中关键码值小于第i个记录的关键码值
* 规律:每一个数都与当前数列中的上面的数比较当遇到大于当前数的时候就交换,
* 最后最上面的数就是最小的
*/
public class Arrayone1 {
public static void main(String []args){
int []a = new int[6]; //定义一个数组
Random r = new Random(); //实例化一个随机数对象
for(int k=0;k<6;k++) //循环产生随机数
a[k] = r.nextInt(6);
for(int i = 1;i<6;i++)
for(int j = i;j>0&&(a[j]<a[j-1]);j--){ //比较大小
int temp = a[j]; //小的和打的交换
a[j]=a[j-1];
a[j-1]=temp;
}
for(int j=0;j<6;j++)
System.out.print("a[j]="+a[j]+" ");//循环输出
}
}
二维数组找最大值:我对选择排序进行了稍微的修改得到一个找最大值得方法
import java.util.Random;
public class Arraytwo {
public static int max=-1;
public static void main(String []args){
int [][]at = new int[3][3]; //定义二,一维数组
int []ao = new int[9];
Random r = new Random(); //产生随机数
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
at[i][j] = r.nextInt(9);
ao[i*3+j]=at[i][j];
}
}
for(int j=0;j<9;j++)
System.out.print("a0["+j+"]="+ao[j]+" ");//循环输出
System.out.println();
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
System.out.print("at["+i+"]["+j+"]"+at[i][j]+" ");//循环输出
}
}
selsort(ao,9); //调用排序的函数
int zheng = max/3; //取整,即行
int yu = max%3; //取余,即列
System.out.print("max="+max+" "+"yu="+yu+" "+"zheng="+zheng+" ");
System.out.println();
System.out.println("最大二维数组的行是"+zheng+"最大二维数组的列是"+yu);
}
/*
* 修改的选择排序
* 选择排序:将数组的最后一个和前面的比较,如果数大,则将下标记用Maxindex录下来,由于交换
*/
static void selsort(int[] a,int n){
int Maxindex = 1;
for(int j=n-1;j>0;j--){
if(a[j]>a[Maxindex]){
Maxindex = j;
}
}
max = Maxindex;
}
}
网上查过一些取二维数组最大值下表的方法,大部分是将二维转一维,在转回二维。
我的思路是:如果可以找到一维和二维的数组下表的关系就不用这么麻烦了,所以我用到了取余和取整。