JavaSE学习笔记之-----数组,javase学习笔记
分享于 点击 28944 次 点评:74
JavaSE学习笔记之-----数组,javase学习笔记
一、与C语言数组的区别
Java的数组和C语言还是很大区别的,我认为两点区别最大:
1、首先Java的数组都是引用,用C语言的角度来讲就是数组全是指针,举个例子,一维数组:
int[] a = new int[3];
a[0] = 1;
a[1] = 2;
a[2] = 3;
数组经历三个步骤,声明、分配空间、赋值。第一行代码是将声明和分配空间放在一条语句,等同于:
int[] a;//声明
a = new int[3];//分配空间
a是在栈空间上生成的变量,它是一个引用类型,指向堆空间上的3个元素,而这三个元素并不直接保存数组的值,保存的同样是引用,是指向各自数值(实际的1、2、3数值保存在堆空间的另一块地方)的引用,画图表示:
可以看到,a指向数new出来的数组,当代码只声明不赋值的时候数组里面保存的就是NULL,不指向任何东西,当赋值以后,指向具体的数值,由此可见,数组里面存放的是引用而不是数值本身。
注意:在声明数组的时候是不能指明长度的,例如:
int a[5];
这是非法的。
2、二维数组的区别
Java的二维数组很好理解,就是以数组为元素的数组,就是每一个一维数组的元素都是另一个一维数组,如下:
int A[][] = {{1,2},{2,3},{3,4,5}};
int B[3][2] = {{1,2},{2,3},{3,5}};//非法,声明的时候不能指明长度
int C[][];
C = new int[3][];
C[0] = new int[2];
C[1] = new int[3];
C[2] = new int[2];
//赋值省略
内存图是:
数组里面全都是存的引用。
二、例程
public class arg {
public static void main(String args[]) {
int a[] = new int[args.length];
for(int i=0;i<args.length;i++) {
a[i] = Integer.parseInt(args[i]);//查api文档,把字符串转成整型
}
print(a);
select(a);
print(a);
}
private static void select(int a[]) {
int temp = 0;
for(int i=0;i<a.length;i++) {
for(int j=i+1;j<a.length;j++) {
if(a[i]>a[j]) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
private static void print(int a[]) {
for(int i=0;i<a.length;i++) {
System.out.print(a[i]+" ");
}
System.out.println();
}
}
这个例子是排序,使用了选择排序的算法,当然还不是最优的,有几处可以改进的地方。
二维数组的例子;
public class dou {
public static void main(String[] args) {
String[][] s;
s = new String[3][];
s[0] = new String[2];
s[1] = new String[3];
s[2] = new String[2];
for(int i=0;i<s.length;i++) {
for(int j=0;j<s[i].length;j++) {
s[i][j] = new String("我的位置"+i+","+j);
}
}
for(int i=0;i<s.length;i++) {
for(int j=0;j<s[i].length;j++) {
System.out.println(s[i][j]);
}
}
}
}
功能就是显示现在元素的位置,Java的二维数组和C不一样,不一定得是几行几列,Java的二维数组,每一个一维的元素都是一个一维的数组,这样理解就好了。
三、数组的拷贝
1、使用java.lang.System类的静态方法
一维数组的拷贝:
String[] s =
{"Mircosoft","IBM","Sun","Oracle","Apple"};
String[] sBak = new String[6];
System.arraycopy(s,0,sBak,0,s.length);
二维数组的拷贝:
int[][] intArray = {{1,2},{1,2,3},{3,4}};
int[][] intArrayBak = new int[3][];
System.arraycopy
(intArray,0,intArrayBak,0,intArray.length);
方法名:System.arraycopy
参数:
第1个参数:从哪个数组拷贝; 第2个参数:从第几个元素开始拷贝; 第3个参数:往哪里拷贝;
第4个参数:对于要拷贝进去的数组,从哪里元素开始写入; 第5个参数:拷贝多长。
相关文章
- 暂无相关文章
用户点评