一,数组的概念

    数组是一种数据结构,用来存储同一类型值得集合,即批量存储数据的容器,数据的集合体

    数组是一种引用型变量

二,数组的声明  与 初始化

    声明     类型 [ ]  标识符;

    声明 +  初始化 :

    a 静态初始化

    类型 [ ]  标识符 = { 数据1, 数据2, 数据3,数据4,,,};    //方便在初始化处不断为数组增加值 

    eg int [ ] A ={1, 2, 3, 4}; 

    b. 动态初始化

    类型 [ ]  标识符 = new 类型 [  大小 ] ;

    eg int[ ]  A = new int [5];

    c . 数组初始化默认值   int  -- 0    float/double  -- 0.0   boolean  -- false   char   --  '\0'  引用类型  String/Person -- null

          null != ”“; null 不等于空串  如果希望数组包含空串则需要赋空串值

    匿名数组

    new  类型 [ ] {数据1, 数据2, 数据3}

    运行会容易出现问题,不建议使用

    注意:1.一旦创建了数组,就不能改变它的长度,如果程序运行中需要经常扩展数组的大小,则应该使用 array list 数据结构

               2.java中长度0数组与null数组  ,长度为0的数组与null数组并不相同

                  a.  new elementType[0]

                  b.  new elementType[ ] { } 

              3.静态初始化与动态初始化只能单独使用,即一个数组不可能被初始化两次

int[] boy = new int [4];

    为数组分配元素后,数组 boy 获得4个用来存放int类型数据的变量,即四个int类型元素

    数组变量 boy 中存放着这些元素的首地址,该地址称为数组的引用,数组通过new在堆区建立逻辑上的数组空间

     

java怎样理解数字常量 java常量数组_数据

三  ,  访问数组元素

    1.for   循环

for (int i = 0; i < a.length; i++)
    System.out.println(a[i]);

    2.for each   循环

    依次处理数组(或其他元素集合)中的每一个元素,不必考虑指定下标值

    for (variable : collection) statement

    collection 集合表达式必须是一个数组或者是一个实现了Iterable接口的类对象

    打印数组a的每一个元素,一个元素一行,依次循环打印

for (int element : a)
    System.out.println(element);

    3.区别

        a. for each 循环语句更加简洁,更不容易出错,不必在意下标开始与结束

        b. for each 无法通过循环变量更改数组内容,无法定位数组位置

import java.util.Arrays;

public class Test {
    public static void main (String [] args){
	int[] B = new int [5];
	B[0] = 1;
	B[4] = 2;
	System.out.println("for");
	for(int i=0; i < B.length; i++)
		System.out.println(B[i]);
	
	System.out.println("for each ");
	for (int b : B)
		System.out.println(b);
	System.out.println("Arrays.toString ");
		System.out.println(Arrays.toString(B));
	
	}
}

java怎样理解数字常量 java常量数组_数组_02

四,数组拷贝

    a. 在Java中,允许将一个数组变量拷贝到另一个数组变量,这时,两个变量将引用同一个数组:

int[] A = B;
A[5] = 12; //now B[5] is also 12

    数组A 与 B 引用的是同一个数组 ,即指向的地址相同

java怎样理解数字常量 java常量数组_数据_03

    b. 拷贝到新的数组      B.length  定义新的数组长度

        import java.util.Arrays;  这是Array的包名

        int [] A = Arrays.copyOf (B, B.length);

    c.这个方法常用来增加数组长度    增加的长度部分按照默认值对应元素

        A = Arrays.copyOf (A, 2*A.length);

五 . 多维数组

    1.定义 

      类型  [] [] 标识符 = { {  },{ } };

      类型  [] [] 标识符 = new 类型 [大小] [大小];

    A ={{ }, {  } ,{  }, {  } ,{  } }; 的内存位置

java怎样理解数字常量 java常量数组_java怎样理解数字常量_04

    注意 :for each  不能自动处理二维数组每一个元素 ,但是会循环处理一位数组    

for (int [] A : a)
    for (int value : A)
        do something with value

    快速访问方法 

   System.out.println(Arrays.tdeeptoString(A));

六, 不规则数组

    多维数组的另一种理解方式:多维数组  = 数组的数组  二级数组为一级数组的元素内容,即一级数组的类型是多个元素

    构造不规则数组

   不同于C++ Java数组分配的是指针的数组 ,指针数组每个元素被填充了一个包含多个数字的数组

int [][] odds = new int [NMAX +1] [];
for(int n = 0; n <= NMAX; n++)
    odds[n] = new int[n+1];   //创建一级数组大小
for(int n = 0; n <= odds.length; n++)
    for(inr k = 0; k < odds[n].length; k++)
        {
            //compute lotteryOdds
            int lotteryOdds = 1;
            odds[n][k] = lotteryOdds;
    }

 

public class Test2 {
    public static void main (String [] args){
		final int NMAX = 10;
	int [][] odds = new int [NMAX +1] [];
	for(int n = 0; n <= NMAX; n++)
		odds[n] = new int[n + 1];   
	for(int n = 0; n < odds.length; n++)
		for(int k = 0; k < odds[n].length; k++)
			{
            int lotteryOdds = 1;
			for (int i = 1; i <= k; i++)
				lotteryOdds = lotteryOdds * (n - i + 1) / i;
            odds[n][k] = lotteryOdds;
		}
	for(int[] row : odds)
	{
		for(int odd : row)
			System.out.printf("%4d",odd);
		System.out.println();
	}
	}
}

java怎样理解数字常量 java常量数组_System_05