一、数组
数组是一种数据结构,用来存储同一类型的数值的集合。通过一个整型下标可以访问数组中的每一个值。例如,如果a是一个数组,a[i] 就是数组下标为i 的整数。在声明数组类型(数据元素类型跟[ ])和数据变量的名字
数组声明的方式为: int [] a;
但是这条语句只是声明了变量a,并没有将a初始化一个真正的数组,应该使用new运算符创建数组。
Int [] a = new int[100];(数组的长度不要求是常量 ,new int [n ] 会创建一个长度为n的数组)
注意:
A.可以用一下两种方式声明数组(强烈推荐第一种):
1. int [] a
2. Int a [] ;
B. 创建一个数字数组时,所有的元素初始化为0。Boolean 类型的数组默认值为false。对象数组的元素则初始化为一个特殊值null,表示这些元素还没有存放任何对象。
C. 如果创建了一个100个元素的数组,而试图访问a[100]元素,程序会引发一个“ array index out of bounds”异常而终止执行。
D. 一旦创建了一个数组,那么不能改变其大小。
二、for each 循环
Java中的一种功能很强的循环结构,依次处理数组中的每一个元素(其他类型的元素集合也可以)
for each 语句相比较之前传统的for循环,语句更加简洁,不易出错(不必考虑数组下标的起始指和终止值)
String [] aa = new String[100];
for(int i = 0;i<aa.length;i++) {
aa[i] = i + "==";
}
for(String a : aa ) {
System.out.println(a);
}
输出结果: 0~99 === ( 格式简写 )
三、数组初始化和匿名数组
在Java中提供了一种创建数组对象并同时赋值的简化书写形式:
Int [ ] small = {1 ,2, 3 ,4 ,5 }
使用这种方法时,不需要调用new,甚至还可以初始化一个匿名数组:
New int [] { 1,2,3,4,5,}
四、数组拷贝
在Java中允许将一个数组变量拷贝给另一个数组变量,这时,两个变量将会引用一个数组:
int [] cc =new int[] {1,2,3,4,5,6,7};
int [] bb = cc;
cc[3] = 100;
bb[3] = 200;
System.out.println(bb[3]);//100
System.out.println(cc[3]);//200
int [] ee = Arrays.copyOf(cc, 10);//深复制 开辟了一个新的内存地址 非常重要的方法
cc[3] = 600;
System.out.println(ee[3]);
解释:因为数组类型的变量是引用类型,如果进行复制的话,两个数组变量指向内存的同一个区域,该区域中存放这数组的值,通过任何一个数组改变值得大小,另一个数组会受到影响,这种复制叫做浅复制。而如果希望将数组的所有值拷贝到一个新的数组中去,要使用Arrays类的copyOf方法,上面代码已经展示:
Arrays.copyOf(cc, 10)
该方法中有两个参数,第一个为要拷贝的目标数组变量,第二个参数为要新开辟的数组的长度,如果该长度的大小大于要复制的数组的长度,则新数组剩余的位置补0,如果不够目标复制数组的长度,则只复制目标数组前边的数组元素的值。
五、命令行参数
每一个java应用程序都有一个带String arg[] 参数的main方法,这个参数表明main方法将接受到一组字符串,这就是命令行参数。
在管理员模式下运行命令行管理器,进入到java文件的目录下,在cmd中输入 javac . 文件名.java 然后回车 ,这时会在文件存放目录下产生一个 文件名.class的字节码文件,这是 .java文件编译后产生的。此时回到cmd中输入 java 文件名,此时要求输入参数,输入参数值,回车,将会输出刚刚传入的参数。
六、数组中几个重要的方法
static String toString( type[] a ):返回包含a中数据元素的字符串,这些数据元素被放在括号里,并用逗号隔开。
static viod sort(type[] a ):采用优先的快速排序方法对数组进行排序。
static boolean equals(type[] a ,type[] b):如果两个数组的大小相等,并且下标相等的元素对应相等,返回true。
static typecopyOf(type [] a ,int length ):对数组进行深复制
int [] ff = new int[] {22,3,4,12,6,4,1};
Arrays.sort(ff);// 排序函数
int [] fff = Arrays.copyOf(ff, 7);//深赋值 开辟了一个新的内存地址 非常重要的方法
for(int f:ff) {
System.out.println(f);
}
String gg = Arrays.toString(ff);
System.out.println(gg);
boolean result =Arrays.equals(ff, fff);
System.out.println(result);
结果:
[1, 3, 4, 4, 6, 12, 22]
true
七、多维数组的定义
Java中其实没有多维数组,只有以为数组,所谓的多维数组只不过是一维数组的不断嵌套,成为“数组的数组”。
首先定义二维数组(也可以称之为矩阵):
int [] [] balance ; 与一维数组一样,在调用new 对多位数组进行初始化之前不能使用该数组,也可以这样定义
balance = new int [ 行 ] [ 列];
当然,对于非常小的二维数组,在知道数组元素值且值不轻易变化的情况下可以直接定义的时候进行初始化:
int [] [] balance ={ {1,2,3,4,}, {2,3,4,5} }
int [] [] balance = new int [3][4];
for(int i = 0;i<balance.length;i++) {
for(int j = 0;j<balance[i].length;j++) {
balance[i][j]=i+j;
System.out.print(balance[i][j]);
}
System.out.println("\n");
}
输出结果:
0123
1234
2345
三维数组的定义与二维数组类似,其实我定义的是不规则的数组,代码如下:
int [][][] three = {
{ {1,2},{3,4}},
{{5},},
{{6,7},{8}}
};
System.out.println(three[1][0][0]);
输出结果:5
八、不规则数组:
下面通过代码展示一个简单的不规则二维数组
int [][] odd = new int [5][];
for( int i = 0;i<5;i++) {
odd[i] = new int [i+1];
for( int j = 0;j<i+1;j++) {
odd[i][j] = 0;
System.out.print(odd[i][j]);
}
System.out.println();
}
结果:
0
00
000
0000
00000