Java 數組簡單介紹

數組簡單介紹

  • 數組是一種引用類型

  • 數組是一種簡單的數據結構線性的結構

  • 數組是一個容器,可以用來存儲其他元素,數組可以存儲任意數據類型的元素

    • 數組中存儲的元素的類型是統一的。
  • 數組分爲:一維數組、多維數組

  • 數組長度不可以改變

    • 數組一旦創建,對應的長度是固定的,不可變的。
  • 數組的索引效率較高,增刪元素的效率較低(涉及到元素的移動)

一維數組初始化

初始化以爲數組有兩種方式:

  • 靜態初始化

    int[] a1 = {1, 2 3, 5};
    
  • 動態初始化

    • 會先再堆內存中分配這個數組,並且數組中的每一個元素都採用默認值
      • byte short int long 0
      • float double 0.0
      • boolean false
      • char \u0000
      • 引用 null
  // 動態初始化一維數組, 最多可以存儲4個元素
  int[] a2 = new int[4];

什麼時候使用動態初始化,什麼時候使用靜態初始化?

  • 無論是靜態初始化還是靜態初始化,最終在內存的分佈都是一樣的
  • 在創建數組的時候,如果已經知道數組中存儲什麼數據,當然採用靜態初始化
  • 在創建數組的時候,無法預測到數組中存儲什麼數據,只是開闢空間,則使用動態初始化

深入一維數組:

  • 創建一個數組,使得該數組既可以存儲Dog,又可以存儲Cat
public class Test02 {
	public static void main(String[] args) {
		// 需求: 創建一個數組,這個數組既可以存儲Dog,又可以存儲Cat
		Animal[] as = new Animal[4];
		Dog d1 = new Dog();
		Dog d2 = new Dog();
		Cat c1 = new Cat();
		Cat c2 = new Cat();
		as[0] = d1; 
		as[1] = d2; 
		as[2] = c1; 
		as[3] = c2; 
		for(Animal a: as) {
			if(a instanceof Dog) {
				Dog d = (Dog)a;
				d.eat();
			}else if(a instanceof Cat) {
				Cat c = (Cat)a;
				c.move();
			}
		}
	}
}

class Animal{
	
}
class Dog extends Animal{
	public void eat() {
		System.out.println("Dog eat");
	}
}
class Cat extends Animal{
	public void move() {
		System.out.println("Cat move");
	}
}
  • 數組的參數傳遞
public class Test03 {
	public static void main(String[] args) {
		int[] arr = new int[4];
		arr[0] = 23;
		arr[1] = 223;
		arr[2] = 766;
		arr[3] = 43;
		m1(new int[] {1,2,4,23});
		m1(arr);
	}
	private static void m1(int[] a) {
		for (int item : a) {
			System.out.println(item);
		}
	}
}

main()方法中的參數列表String[] args參數詳解

  • String[] args是專門用來接收命令行參數的

    // Test04.java
    public class Test04 {
    	public static void main(String[] args) {
    		System.out.println("args 元素的個數:" + args.length);
    	}
    }
    
    • 運行過程

      java Test04 abc dfd ggf
      

      輸出結果爲:3

      JVM 在調用Test04的 main方法之前,先將 “abc dfd ggf” 這個字符串以“空格”的方式分割,然後存儲在 args 數組中, 等價爲:

      JVM {
          String[] args = {"abc", "dfd", "ggf"};
          Test04.main(args);
      }
      

數組的拷貝

System類中有 arraycopy方法,可以用來實現數組的拷貝:

public static native void arraycopy(Object src,  int  srcPos,
                                        Object dest, int destPos,
                                        int length);
// arraycopy 方法底層是由C++ 實現的

數組拷貝舉例:

public class Test05 {
	public static void main(String[] args) {
//		System.arraycopy(src, srcPos, dest, destPos, length);
		int[] src = {1,2,3,4,5,6,7};
		int[] dest = {10, 20, 30, 40, 50, 60, 70, 80};
		System.arraycopy(src, 2, dest, 4, 2);
		for (int i = 0; i < dest.length; i++) {
			System.out.print (dest[i] + " ");
		}
	}
}

輸出:

10 20 30 40 3 4 70 80

二維數組分析

二維數組是特殊的一維數組,二維數組的每一個元素都是一個一維數組

靜態初始化二維數組

int[][] a = {
    {1,2,3}, 
    {4}, 
    {54,34,2}
}
  • 二維數組的每一個元素的長度可以不同

遍歷二維數組

for(int i=0; i<a.length; i++){
    for(int j=0; j<a[i].length; j++){
        System.out.print(a[i][j] + " ");
    }
    System.out.println();
}

動態初始化二維數組

int[][] a = new int[3][4];

遍歷二維數組

for(int i=0; i<a.length; i++){
    for(int j=0; j<a[i].length; j++){
        System.out.print(a[i][j] + " ");
    }
    System.out.println();
}

數組(Arrays)工具類

java.util.Arrays;
  • 排序

    import java.util.Arrays;
    
    public class Test07 {
    	public static void main(String[] args) {
    		int[] a = {1,2,3,4,21,4,1,5,2,63,25,63,23,52};
    		System.out.println(a);
    		Arrays.sort(a);
    		for(int i=0; i< a.length; i++) {
    			System.out.print(a[i] + " ");
    		}
    	}
    }
    
    
  • 二分查找

    import java.util.Arrays;
    
    public class Test08 {
    	public static void main(String[] args) {
    		//int[] a = {1,2,3,4,21,4,1,5,2,63,25,63,23,52};
    		// 二分查找要求數組是已經排好序的
    		int[] a = {1, 1, 2, 2, 3, 4, 4, 5, 21, 23, 25, 52, 63, 63};
    		int index = Arrays.binarySearch(a, 63);
    		System.out.println(index);
    	}
    }
    
  • 填充數組

    public class Test09 {
    	//程序入口
    	public static void main(String[] args) {
    		int[] a = {1,4,3,2,5};
    		Arrays.fill(a, 3);
    		for(int i=0; i<a.length; i++) {
    			System.out.print(a[i] + " ");
    		}
    	}
    }
    // 輸出:3 3 3 3 3 
    

接收用戶鍵盤輸入

java.utils.Scanner;
System.in; // java中的標準輸入流

舉例

import java.util.Scanner;

public class Test06 {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		String msg = s.next();
		System.out.println("你輸入的是:" + msg);
	}
}


以上

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