Java数组概要笔记

Posted on 2006-11-13 17:54 hig 阅读(1448) 评论(0)  编辑  收藏 所属分类: Java

<<Thinking in java>>

=========================================
第4张末节
=========================================

 

【数组的初始化】

1.int[] a1; int a2[];采用第一种方式较好
2.拥有的只是对数组的引用,没有给数组分配存储空间,要写初始化表达式。初始化动作可以在代码的任何地方。用一对花括号只能在创建数组的地方出现。
3.可以将一个数组赋值给另一个数组a1=a2;其实是复制了一个引用。
4.a1.length,a1的最大索引是length-1。java有边界检查,但是会在时间和代码上有所开销。
5.不能确定数组里有多少个元素,可以用new在数组里创建元素,尽管创建的是基本类型数组。不能用new创建单个的基本类型数据。
static Random rand = new Random();
int[] a;
a = new int[rand.nextInt(20)];
可见数组的创建是在运行时刻进行的,数组元素中的数据类型会自动初始化为“空”(数字和字符是0,boolean是false)。
6.数组在定义的时候也可以初始化int[] a = new int[rand.nextInt(20)];尽量如此做。
7.数组中的元素不是基本数据类型,那么你必须使用new。
Integer[] a = new Integer[rand.nextInt(20)];
它还只是个引用数组,指导通过创建新的Integer对象,并且把对象赋值给引用,初始化进程才结束:a[i]=new Integer[rand.nextInt(500))];
如果使用数组中的空引用,就会在运行时刻产生异常。
8.Integer[] a = {new Integer(1), new Integer(2), new Integer(3),};
Integer[] b = new Integer[]{new Integer(1), new Integer(2), new Integer(3),};
最后一个逗号可选。


【多维数组】
1.基本数据类型的多维数组
int[][] a1 = {{1,2,3,}, {4,5,6,},};
2.用new分配一个三位数组,这里正个数组分配是一次完成的。
int[][][] a2 = new int[2][3][4];
3.数组中用以构成矩阵的向量可以有任意的长度:
int[][][] a3 = new int[rand.nextInt(7)][][];
for(int i=0;i<a3.length;i++){
    a3[i] = new int[rand.nextInt(5)];
    for(int j=0;j<a3[i].length;j++){
        a3[i][j] = new int[rand.nextInt(5)];
    }
}
4.非基本数据类型的对象数组。
Integer[][] a4={{new Integer(1), new Integer(2)}, {new Integer(3), new Integer(4)}, {new Integer(5), new Integer(6)},};
5.逐步创建非基本类型的对象数组。
Integer[][] a5;
a5 = new Integer[3][];
for(int i=0;i<a5.length;i++){
    a5[i] = new Integer[3];
    for(int j=0;j<a5[i].length;j++){
        a5[i][j]=new Integer(i*j);
    }
}


=========================================
第11章
=========================================
数组和其他种类容器的区别:
效率高,确定类型,可持有基本类

【数组是第一级对象】
1.数组标识符只是一个引用,指向在堆heap中创建的一个真实对象,这个数组对象用以保存指向其他对象的引用。
2.对象数组和基本数据类型数组在使用上基本一致,不同在于对象数组保存的是引用,基本类型数组直接保存基本类型。

【返回一个数组】
C和C++不能返回一个数组,只能返回指向数组的指针,它使得控制数组的生命周期变得困难,并且容易造成内存泄漏。java允许直接返回一个数组,你需要它,就会一直存在,使用完后,垃圾回收器会负责清理。


【Arrays类】
1.java.util
有一套static方法:
equals()比较两个数组是否相等
fill()用某个值填充整个数组
sort()对数组进行排序
binarySearch()在已经排序得数组中查找元素
asList()接受任意得数组为参数,并将其转化为List容器

2.StringBuffer比String更高效。

3.System.exit(0)与System.exit(1)的区别。
(实例Arrays)


【填充数组】
java标准类库Arrays也有fill()方法,但是只能用同一个值填充各个位置,对于保存对象的数组,就是复制同一个引用进行填充。

 

【赋值数组】
System.arraycopy(),它复制数组比for循环快很多。System.arraycopy()为所有类型作了重载。
public static void arraycopy(Object src,
                             int srcPos,
                             Object dest,
                             int destPos,
                             int length)

基本类型数组和对象数组都可以复制,对象数组只是复制引用--不会出现两份对象的拷贝。这被称作浅复制(shallow copy)


只有注册用户登录后才能发表评论。


网站导航:
 

posts - 4, comments - 1, trackbacks - 0, articles - 0

Copyright © hig