盘点JAVA对数组的支持,以及数组实用Arrays.

  • 一维数组

1.一维数组的定义如下:

 类型标识符  数组名[];
   eg: int intArray[];
 类型标识符[]  数组名;
    eg: double[]  example;

2.一维数组的初始化

(1).直接指定初值的方式

int[] a1 = {1,2,3};
声明了数组名为a1的数组,并为其赋初值。共有3个初值,故数组元素个数为3。

(2).用new初始化数组:

类型标识符 数组名[];
eg: int[] intArray;
数组名 = new 类型标识符 [ 数组长度 ] ;
eg: intArray = new int[3];

上述代码为一个整型数组分配了3个Int型整数所占据的内存空间。通常,这两个语句可以合在一起,格式如下:

类型标识符 数组名 = new 类型标识符 [数组长度];
eg:int a = new int[3];

3.一维数组元素的引用

注意:a.length指明数组a的长度。下面例子演示了java语法定义数组,和引用数组元素的方式。

功能: 对数组的每个元素进行赋值,然后逆序输出。

【Shuzu.java】
    public class Shuzu{
        public static void main(String[] args){
          int i;
          int a[] = new int[5];
          for(i=0;i<5;i++){
              a[i] = i;
          }
          for(i=a.length-1;i>=0;i--){
              System.out.println("a["+i+"]="+a[i]);
          }
        }
    }
    程序运行结果:
    a[4]=4
    a[3]=3
    a[2]=2
    a[1]=1
    a[0]=0

4.一维数组程序举例

**功能:**利用数组处理FIbonacci数列,并打印出前十行。

  【Fibonacci.java】
    public class Fibonacci{
        public static void main(String[] args){
            int i;
           int a[] = new int[10];
           a[0] = a[1] = 1;
           for(i=2;i<10;i++)
           {
               a[i] = a[i-1]+a[i-2];
           }
           for(i=1;i<=10;i++)
           {
               System.out.println("a["+i+"]="+a[i-1]);
           }
        }
    }
    程序运行结果:
    a[1]=1
    a[2]=1
    a[3]=2
    a[4]=3
    a[5]=5
    a[6]=8
    a[7]=13
    a[8]=21
    a[9]=34
    a[10]=55
  • 二维数组

1.二维数组的声明

类型标识符 数组名[ ][ ];
eg: int intArray[ ][ ];

与一维数组一样,二维数组对数组元素也没有分配内存空间,同样要使用运算符new来分配内存,然后才可以访问每个元素。
分配空间的方法:

(1).直接为每一维分配空间 int a[ ][ ] = new int[2][3];
(2).从最高维开始,分别为每一维分配空间
int a[ ][ ] = new int[2][ ];
a[0] = new int[3];
a[1] = new int[3];

  • 动态初始化
    数据类型[ ][ ] 对象数组 = new 数据类型[行个数] [列个数] ;
  • 静态初始化
    数据类型[ ][ ] 对象数组 = new 数据类型[ ][ ]{{值,值,…},{值,值,…},…} ;

2.二维数组元素的引用

数组名【下标1】【下标2】
其中,下标1,下标2为整型常数或表达式,如a[2][3]等,同样,每一维的下标都是从0开始。

3.二维数组的初始化

(1).直接对每个元素进行赋值
(2).在声明数组的同时进行初始化
Int[ ][ ] = {{1,2},{3,4},{5,6}};
上面定义了一个3x2的数组,并对每个元素进行赋值。

匿名数组:

public class ArrayDemo{
public static void main(String[] args) {
System.out.println(new int[]{1,2,5,55,555,223,45545,666465,6443}.length) ; // 匿名数组
}
}

数组最大的缺陷:长度固定(存在越界问题)

定义一个二维数组:

public class ArrayDemo{
	public static void main(String[] args) {
		// 数组并不是等列数组
	  int[][] data = new int[][] {
							 {1,2,3},{4,5},{6,7,8,9}
							};
			// 在进行输出的时候一定要使用双重循环
		for (int x = 0; x<data.length ; x++) {
			for (int y = 0; y<data[x].length ; y ++) {
				System.out.println("data{"+x+"]["+y+"]="+data[x][y]+"、") ;
			}
		System.out.println();
		 }
	 }
}
  • 数组与方法互操作(重点)

> 数组是引用数据类型,所有引用数据类型都可以为其设置多个栈内存指向。所以在进行数组操作的时候,也可以将其通过方法进行处理。

范例:方法接收数组

public class ArrayDemo{
   		 	public static void main(String[] args) {
   					 int[] data = new int[] {1,2,3,4,5} ;
   					 printArray(data) ; // 其效果等价于 int[] temp = data ;
   			 }
    	public static void printArray(int[] temp) {
   				 for (int i = 0 ; i<temp.length ; i++) {
    				System.out.println(temp[i]) ;
    			}
   		 }
    }

范例:方法返回数组

 public class ArrayDemo{
    	public static void main(String[] args) {
    		int[] data = init() ;
   		 printArray(data) ;
    	}
   		 // 定义一个返回数组的方法
    	public static int[] init(){
    		return new int[] {1,2,3,4,5} ; // 匿名数组
    	}
    	public static void printArray(int[] temp) {
   			 for (int i = 0 ; i<temp.length ; i++) {
   					 System.out.println(temp[i]) ;
   			 }
  		  }
    }

现在的数组上发生了引用传递,那么就意味着方法在接收数组后也可以修改数组。
范例:方法修改数组

public class ArrayDemo{
	public static void main(String[] args) {
		int[] data = init() ;
		 bigger(data) ;
		 printArray(data) ;
	 }
	 // 定义一个返回数组的方法
	public static int[] init(){
		 return new int[] {1,2,3,4,5} ; // 匿名数组
	 }
	// 将数组中每个元素的值扩大5倍
	public static void bigger(int[] arr){
		 for (int i =0 ; i<arr.length ; i++) {
			 arr[i]*=5 ; // 每个元素扩大5倍
		 }
	 }
	public static void printArray(int[] temp) {
		 for (int i = 0 ; i<temp.length ; i++) {
			System.out.println(temp[i]) ;
		 }
	 }
}
  • Java对数组的支持

在Java.util 包中,有一个用于操作数组的实用类—java.util.Arrays。它提供了一系列静态方法完成数组的常用操作。

1.binarySearch(二分查找):

表达形式:binarySearch(type[ ]a, int fromIndex, int toIndex, type key)

这个方法只搜索a 数组中fromIndex 到toIndex索引的元素。调用该方法时要求数组中的元素已经按升序排列,这样才能得到正确的结果。

2.copyOf(拷贝):

表达形式:type[ ] copyOf(type[ ]original, int newLength)

这个方法会把original数组复制成一个新数组,其中length是新数组的长度,如果Length小于original数组的长度,则新数组就是原数组前面的length个元素;如果Length大于original数组的长度则新数组前面的元素就是原数组的所有元素,后面补充0(数值型),false(布尔型),null(引用型)。

3.copyOfRange

表达形式如下: type[ ] copyOfRenge(type[ ] orange, int from, int to)

这个方法与前面的方法相似,但这个方法只复制了original数组的from索引到to索引的元素。

4.equals(相等)

表达式如下: boolean equals(type[] a,type[] a2)

如果a数组和a2数组的长度相等,而且a数组和a2数组的元素也一一相同,则该方法返回true。

5.fill(填充)

表达形式如下: void fill(type[] a,type val)

该方法会把a数组所有元素都赋值为val。另一个表达形式如下:

void fill(type[] a, int fromIndex, int toIndex , type val)

该方法与前一个方法的作用下相同,区别只是该方法仅仅将a数组的fromIndex到toIndex索引的数组元素赋值为val。

6.sort(排序)

表达形式如下: void sort(type[] a)

该方法对a数组的数组元素进行排序。另一个表达形式如下:

void sort(type[] a, int fromIndex, int toIndex)

该方法与前一个方法相似,区别是该方法仅仅对fromIndex 到toIndex索引的元素进行排序。

7.toString(转换为字符串)

表达形式如下:String toString(type[] a)

该方法将一个数组转换成一个字符串。该方法按顺序把多个数组元素连缀在一起,多个数组元素使用英文逗号(,)和空格隔开。(利用该方法可以很清楚看到各数组元素。)

猜你喜欢

转载自blog.csdn.net/qq_41420688/article/details/83271976