您的位置:首页 > 编程语言 > Java开发

java数组

2015-06-07 21:26 429 查看
数组:可以看成多个相同类型数据组合,对这些数据的统一管理。

1.声明、 创建

一维:type[] var 例如:int[] a或 int a[];

数组名= new 数组元素的类型[数组元素的个数]

public class TestNew  
    {  
         public static void main(String args[]) {  
             int[] s ;  //声明  或者int s[]   但是不可int s[5]      
             s = new int[5] ; //创建 new
             for(i = 0 ; i < 5 ; i++) {  
                 s[i] = i ;  
             }             
         }   
}


2初始化

静态初始化:在定义数组的同时就为数组元素分配空间并赋值。

动态初始化:数组定义和数组元素分配空间和赋值分开操作。

默认初始化:数组是引用类型,元素相当于成员变量,因此数组在分配空间后,系统默认给每个元素进行了隐式初始化。

public class Test  
{  
     public static void main(String args[]) {  
         //动态初始化
         int a[] ;  
         a = new int[22] ;  
         a[0] = 0 ;  
         a[1] = 1 ;  
         Date days[] ;  
         days = new Date[2] ;  
         days[0] = new Date(2015,6,1) ;  
         days[1] = new Date(2012,5,5) ;  

         //静态初始化
          int a[] = {0,1} ;     
          Date days[]= {new Date(2015,6,1),new Date(2012,5,5} 

         //默认初始化
         int a[] = new int [2] ;     
         Date days[] = new Date[2]
            //输出结果,基本类型默认为0应用类型默认为null
         System.out.println(a[1]+" "+Date[1]) ;   
     }  
}  
 
class Date  
{  
     int year,month,day ;  
     Date(int year ,int month ,int day) {  
         this.year = year ;  
         this.month = month ;  
         this.day = day ;  
     }  
}


3.数组拷贝

java的lang包中封装了arraycopy方法可以实现数组的拷贝

public static void arraycopy(Object s,int sbeginPos,Object scopy,int scopybeginPos,int slength )          
s:源数组
、 sbeginPos:源数组开始位置

scopy:目标数组 、 scopybeginPos:目标数组开始放置位置

slength:要拷贝源数组的长度

例子如下:

public class Array{
	
	//拷贝数组,
	public static void main(String[] args){
		//1.元素为基本类型的,目标数组和源数组的元素独立,不相互影响
		String[] s ={"IBM","Oracle","Apple"};
		String[] sBak = new String[6];
		
		//1.1从源数组s s[1]开始拷贝元素到目标数组sBak中从sBak[2]开始存放的拷贝进来的元素,拷贝的个数为s.length-1个
		System.arraycopy(s,1,sBak,2,s.length-1);
		
		for(int i=0;i<sBak.length;i++){
			System.out.print(sBak[i]+" ");
		}		
		//1.2修改目标数组一个元素值
		sBak[2]="tihuan";
        //1.2.1目标数组值改变
		System.out.print("\n");
		for(int i=0;i<sBak.length;i++){
			System.out.print(sBak[i]+" ");
		}
		//1.2.2源数组值不变
		System.out.print("\n");
		for(int i=0;i<s.length;i++){
			System.out.print(s[i]+" ");
		}
		
		//2.元素为引用类型的,拷贝的是数组的引用,对任意数组元素的修改都会影响其他数组。
		System.out.println();
		int[][] intArray ={{1,2},{1,2,3},{3,4}};
		int[][] intArrayBak = new int[3][];
		
		System.arraycopy(intArray,0,intArrayBak,0,intArray.length);
		//2.1修改目标数组的一个元素值
		intArrayBak[2][1] = 100;
		//2.2打印源数组看值是否发生变化
		for(int i=0;i<intArray.length;i++){
			for(int j=0;j<intArray[i].length;j++){
				System.out.print(intArray[i][j]+" ");
			}
			
			System.out.println();
		}  
	}
}


结果显示为:



数组属引用类型,同时数组可以看成对象,数组中的每个元素相当于该对对象的变量成员。作用声明数组的时候在栈内存中分配数组名的存储空间,创建的时候在堆内容中分配数组的存储空间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: