JAVA数组详解

最近看了一些关于java数组的资料,在此总结一下:

一、数组的定义和类型:
      数组就是类型相同的数据对象元素集合。简单的说:就是类型相同的数据存储在一个容器里面【注意:Java中的数组是引用类型,即使一个数组中存放的都是基本数据类型,但这个数组类型同样是引用类型】。
二、数组的声明和初始化:
     1、  数组的声明有两种方式:一种是[]放在类型的后面,另一种是放在变量名的后面。建议使用第一种类型,数组本身就是一种类型,也就是说int[] 是一种类型。第一种也符合Java中变量的声明规范。
      eg:  int[]  arrayOne;   或   int arrayTwo[];
    2、数组的初始化有两种方式:
                第一种动态初始化:在数组定义的时候只指定了数组的长度。
                第二种静态初始化:在定义数组的同时显示的为数组元素赋值。
     eg: 
  一维数组的初始化:
   1)   int[] a;   //声明,没有初始化


   2)   int[] a=new int[5];   //初始化为默认值,int型为0


   3)   int[] a={1,2,3,4,5};   //初始化为给定值 


   4)   int[] a=new int[]{1,2,3,4,5};   //同(3)  
          int[] a=new int[5]{1,2,3,4,5};   //错误,如果提供了数组初始化操作,则不能定义维表达式 


   5)   int[] a;   
         a=new int[5];    //正确,同(2)一样
         int[] a;
        a={1,2,3,4,5};   //错误,数组常量只能在初始化操作中使用,如(3)


  6)   int a[];
        a[0]=1;   //错误,因为数组没有初始化,不能赋值
        a[1]=2;  
 
 三、数组的长度:
    数组长度在初始化的时候就已经被指定了,数组长度一旦被指定长度,就不能进行修改。也就是说,数组的长度是不可变。

    获取数组的长度是通过length属性得到。而不是length()方法。

四、数组的遍历方法:
    方法一、通过普通的for循环遍历数组元素
   eg:

int[]  arrayX=new int[]{1,2,3,5,9,10};//定义一个整型数组arrayX
for(int i=0;i<arrayX.lenght;i++){   //循环遍历数组元素
     System.out.println(arrayX[i]);   //输出数组中的每一个元素的值。
}
   方法二、通过特殊for循环遍历数组元素
   eg:
 String[]  arrayStr=new String[]{"aa","bb","cc","dd"}
       for(String str:arrayStr){
          System.out.println(str);
          }

五、多维数组:
    多维数组可以理解为数组中的数组。Java中数组类型是引用类型,因此,数组变量其实就是一个引用,这个引用指向真实的数组内存。数组元素的类型也可以是引用,如果数组元素的引用再次指向真实的数组内存[Java中允许多维数组当成一维数组处理。初始化多维数组时可以先只初始化最左边的维数,此时该数组的每个元素都相当于一个数组引用变量,这些元素还需要进一步初始化]。
下面以二维数组为例:

public static void main(String[] args) {
		//定义一个二维数组
		int[][] array;
		//把二维数组当成一维数组进行初始化,系统默认值是null
		array=new int[4][];
		//把array数组当成一维数组,遍历array数组中的每一个元素、
		for(int i=0;i<array.length;i++){
			System.out.println(array[i]);
		}
		//初始化array数组的第一个元素
		array[0]=new int[3];
		//给array数组中的第一个元素所指数组的第二个元素赋值
		array[0][1]=12;		
		//array数组的第一个元素是一个一维数组。遍历该一维数组
		for(int j=0;j<array[0].length;j++){
			System.out.println(array[0][j]);
		}
	}


该实例在内存中示意图:



二位数组实例:
定义一个二维数组,动态指定数组的行和列的大小,动态给数组赋值,并打印输出二维数组的元素。

public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入二维数组行的大小:");
		int row=sc.nextInt();
		int[][] array;
		array=new int[row][];
		for(int i=0;i<array.length;i++){
			System.out.println("请输入列的大小:");
			int cols=sc.nextInt();
			array[i]=new int[cols];
			for(int j=0;j<array[i].length;j++){
				System.out.println("请输入第"+(i+1)+"行的第"+(j+1)+"列的值:");
				array[i][j]=sc.nextInt();
			}
		}
		System.out.println("\n\n");
		for(int i=0;i<array.length;i++){
			for(int j=0;j<array[i].length;j++){
				System.out.print(array[i][j]+"  ");
			}
			System.out.println();
		}
	}
  

六、操作数组的工具类:

Java提供的Arrays类里包含了一些static修饰方法可以直接操作数组,下面简单的列举几个常见的方法:

    1.void sort(type[] a) 该方法对数组a的数组元素进行排序。
    2.void sort(type[] a,int fromIndex,int toIndex):该方法和上面的方法类似,区别在与该方法仅仅对fromIndex到toIndex索引的元素进行排序。
    3.boolean equals(type[] a,type[] b):如果a数组和b数组的长度相等,而且a数组和b数组的数组元素一一相同,该方法返回true。
    4.type[] copyOf(type[] original,int newLength):这个方法将会把original数组复制成一个新数组,其中length是新数组的长度,如果length小于original数组的长度          则新数组就是原数组的前面length个元素;相反,如果length大于original数组的长度,则新数组的前面元素就是原数组的所有元素。后面补充0(数值型)、false(布尔类型)或者null(引用类型)。
    5.String toString(type[] a):该方法将一个数组转换成一个字符串,该方法按顺序把多个数组元素连缀在一起。多个数组元素使用英文逗号和空格隔开。
    6.void fill(type[] a,type val):该方法将会把a数组所有元素值都赋值为val。
下面是一个简单的实例:
     
public static void main(String[] args) {
		//定义一个数组a
		int[] a=new int[]{3,4,5,7,6,2};
		//定义一个数组b
		int[] b=new int[]{3,4,5,7,6,2};
		System.out.println("a数组和b数组是否相等:"+Arrays.equals(a, b));
		int[] c=Arrays.copyOf(a, 7);
		System.out.println("a数组和c数组是否相等:"+Arrays.equals(a, c));
		System.out.println("c数组的元素为:"+Arrays.toString(c));
		//将b数组中的所有元素都赋值为30
		Arrays.fill(b, 30);
		System.out.println("b数组元素的为:"+Arrays.toString(b));
		Arrays.sort(a);
		System.out.println("a数组排序后的元素为:"+Arrays.toString(a));
	}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章