JAVA数组介绍

        数组是五大引用类型(类、数组、枚举、接口、注解)中的一种,数组中的元素都是同一类型。数组的长度在创建时确定,并且在创建后不变,如果需要建立存储不同类型的集合,或者要求这种数据存储结构的长度可以动态变化,可以使用java.util包中的各种集合(Collection)类,例如Vector等。

数组的声明
       可以声明任何类型的数组,包括基本类型和引用类型的数组。数组声明和其他类型的变量声明一样,包括两个部分:数组的类型和数组的名字。数组声明语句有两种格式:

		//		将表示数组的"[ ]"跟随在数组变量之后。
		//		这种格式是C,C++和JAVA标准格式,例如
		char   s[ ];
		Point   p[ ];   //Point是一个类
		//		将表示数组的"[ ]"跟随在数组类型之后。
		//		这种格式是Java中特有的,例如,
		char   [ ]s;
		Point   [ ]p;   //Point是一个类
		//		这种格式中,在数组标志”[ ]“后出现的所有变量将都是数组变量,例如,
		char[ ] s,m,n;  //声明了3个字符数组变量s,m和n
		//		注意:在数组的声明中不指定数组的长度。
		//		在Java中只有基本数据类型和引用类型两大类数据类型,所以数组是类。在Java中类类型变量的声明并不创建该类的对象。
		//		所以数组的声明并不创建实例数组的数据空间,而是给该数组变量分配了一个可用来引用该数组的引用空间。

数组的创建与初始化

		//	       用new创建数组
		//	       数组元素所需的内存空间是通过new运算符或通过数组初始化分配的。通过new运算符创建数组的格式如下:
		//	       new  elementType[arraySize]
		//	       例如,对于前面已经声明的字符串数组s,可以利用下列语句创建它的数据空间,从而创建了一个能够容纳20个字符的数组:
		char[] s;
		s = new  char[20];
		//	       数组在创建后,基本数据类型的数组,其元素是被系统自动进行初始化的。比如字符数组,每个元素都被初始化为‘\u0000’,
		//		而对于对象数组,每个元素都被初始化为null。在通过new实例化一个数组后,就可以对数组元素进行赋值,并进行其他操作。例如对于上面创建的数组s:
		s[0]='a'; s[1]='b';
		//	       对数组元素操作时,要注意不要产生数组越界错误。Java数组下标的取值范围是0到数组长度减1。数组s在创建后内存布局如何所示。


数组的长度
       Java中为所有数组设置了一个表示数组元素个数的特型变量length,它作为数组一部分存储起来。Java用该变量在运行时进行数组越界检查,应用程序中也可以访问该变量获取数组的长度,格式如下:
       arrayname.length
       例如:s.length
       数组在创建后长度是不可变的。因此我们不能改变数组的长度,但可以使用该数组变量指向另一个全新的数组,则通过该变量将不能访问到原来数组的值,例如,

        int a[ ] = new int[6];
        a[0]=10;
        a = new int[10];// 不用再次声明a,此时a[0]的值为0,而不是10


对象数组
        我们除了创建基本类型数组,还可以创建对象数组。例如,下列语句声明、创建了一个Point类型的数组:

        Point  p[ ];
        p = new Point[10];  //创建包含10个Point类型对象引用的数组
        //创建10个Point对象
       for(int i=0; i<10; i++){
            p[i] = new Point(i,i++);
       }

数组的拷贝、复制、扩容

    public static native void arraycopy(Object src,  int  srcPos, Object dest, int destPos, int length);

       该方法是将src数组中从srcPos开始的length个数据,拷贝到dest数组从destPos开始的位置。如果destPos容纳不下则会出错。所以该方法实现不了扩容。想实现扩容我们可以使用如下API。

    public static <T> T[] copyOf(T[] original, int newLength) {
        return (T[]) copyOf(original, newLength, original.getClass());
    }
      该方法会生一个新的数组的副本,并且副本的长度为newLength。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值