數組的使用


一:數組的介紹
數組是一種數據結構,它可以存儲多個數據,一個數據就是一個元素,通常可以通過元素的下標來訪問元素和爲元素賦值!
一個數組中,只能存儲一種數據類型的數據

二:數組的創建方式
2.1:靜態初始化:由程序員顯示的指定每個元素的初始值,由系統決定長度

int[] arr = new int[]{1,2,3};
int[] arr = {1,2,3}; //簡化形式: 推薦

2.2:動態初始化:由程序員指定長度,由系統爲數組元素分配初始值
byte,short, int, long: 0
float,double: 0.0
char: '\u0000'
boolean: false
引用類型(類,接口,數組): null

int[] arr = new int[3];

注:動態初始化和靜態初始化不能同時使用! 

三:遍歷數組
3.1:普通for

public class Demo7 {

	public static void main(String[] args) {
		
		String[] ss = {"hello","world","java"};
		
		for(int i=0; i<ss.length; i++) {
			ss[i] = "test";
		}
		
		System.out.println(Arrays.toString(ss));//[test, test, test]
		
	}
}

3.2:增強for(foreach並不能改變數組元素的值)

public class Demo {

	public static void main(String[] args) {
		

		for (String s : ss) {
			s = "test";
		}
		System.out.println(Arrays.toString(ss));//[hello, world, java]

	}
}


四:數組的內存圖解
4.1:基本類型數組的初始化

public class Demo {

	public static void main(String[] args) {
		//定義一個int[]類型的引用變量
		int[] arr; //①
		
		//初始化數組,長度爲3
		arr = new int[3];//②
		
		//爲數組元素賦值
		for(int i=0; i<arr.length; i++) { //③
			arr[i] = i+10;
		}
	}
}


解釋:
①步驟的時候,只是定義了一個引用變量,該變量沒有指向任何有效的內存!
②步驟的時候,new關鍵字出現了,這時系統爲數組開闢了空間,並給了默認值(因爲數組的元素類型是int,所以默認值爲0)
③步驟的時候,爲數組中每一個元素賦完值後的效果圖

4.2:引用類型數組的初始化

public class Demo{

	public static void main(String[] args) {
		//定義一個Person[]類型的引用變量ps
		Person[] ps;
		
		//爲這個數組動態初始化,長度爲2
		ps = new Person[2];
		
		//創建Person實例
		Person p1 = new Person("wzj",22);
		Person p2 = new Person("sbt",30);
		
		ps[0] = p1;
		ps[1] = p2;
		
		//下面兩句執行效果一樣!
		System.out.println(p1.MySelfIntroduce());;
		System.out.println(ps[0].MySelfIntroduce());;
	}
}


class Person{
	String name; 
	int age;
	
	public Person() {
		super();
	}

	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public String MySelfIntroduce() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
	
}


 爲什麼最後兩句輸出的內容相同呢?原因是p1和ps[0]指向的是同一個對象!

五:沒有多維數組:
int[][],你可以看成就是一個一維數組,只不過裏面的元素是int[]類型的罷了

int[][] arr = new int[3][2];

public class Demo {

	public static void main(String[] args) {
        //靜態初始化,可以看出來數組的長度爲2,元素是一個一維數組長度也是2
		int[][] arr = new int[][] {
			{1,2},
			{3,4}
		};

        //動態初始化
        //方式一: 同時初始化兩個維數
        int[][] arr = new int[3][2];

        //方式二: 先初始化數組的長度
        int[][] arr = new int[3][];
	}
}

 注:int[][] arr = new int[x][]; 如果是動態初始化第一個[]必須寫明長度

六:數組的工具類 Arrays
查找,複製,填充,排序等等

public class Demo7 {

	public static void main(String[] args) {
		
		int[] arr = {4,2,5,8,1,7};
		int[] arr2 = {4,2,5,8,1,7};
		int[] arr3 = {4,2,5,8,1,9};
		int[] arr4 = {1,2,3};
		int[] arr5 = {1,2,3,4};
//		System.out.println(binarySearch(arr,23));
		System.out.println(equals(arr,arr2));//爲了不影響效果,應該把上一行註釋掉!
		System.out.println(file(arr3, 1));
		
		int[] copy = copy(arr4,6); //大於原數組的長度--> copy:{1,2,3,0,0,0}
		System.out.println(Arrays.toString(copy));//[1, 2, 3, 0, 0, 0]
		
		int[] copyOfRange = copyOfRange(arr5,0,2);
		System.out.println(Arrays.toString(copyOfRange));
	}
	
	/**
	  *   只複製: 數組中from...to的索引,包左不包右,不會發生數組越界異常!
	 * @param arr5
	 * @param from
	 * @param to
	 * @return
	 */
	private static int[] copyOfRange(int[] arr5, int from, int to) {
		return Arrays.copyOfRange(arr5, from, to);
	}

	/**
	 * 	將原數組複製成一個新數組,參數i是新數組的長度
	 * 	如果i>原數組的長度,那麼多出來的就根據原數組的類型補默認值
	 *        如果i<原數組的長度, 那就只複製這麼長!
	 * @param arr4
	 * @param i
	 * @return
	 */
	private static int[] copy(int[] arr4, int i) {
		return Arrays.copyOf(arr4, i);
	}

	/**
	 * 	 將數組中所以元素都填充成 i
	   *    注:也可以在數組中指定範圍填充
	 * @param arr3
	 * @param i
	 * @return 
	 */
	private static String file(int[] arr3, int i) {
		Arrays.fill(arr3, i);
		return Arrays.toString(arr3);
	}

	/**
	  *  比較兩個數組的長度和元素是否相同
	 *  	相同:返回true, 否則返回false
	 * @param arr
	 * @param arr2
	 * @return 
	 */
	private static boolean equals(int[] arr, int[] arr2) {
		return Arrays.equals(arr, arr2);
	}

	/**
	 * binarySearch(byte[], byte key): 
	 * 		查詢key在byte[]中的索引,前提是該數組是排完順序的
	 * 		否則返回負數:怎麼判斷負數:(變量 & 1) != 0
	   *                注:也可以在數組中指定範圍查找key
	 */
	private static int binarySearch(int[] arr, int i) {
		Arrays.sort(arr);
//		System.out.println(Arrays.toString(arr));//[1, 2, 4, 5, 7, 8]
		return Arrays.binarySearch(arr,i);
	}
}

七:數組的應用:一般是裝一些固定的值:比如一年中的月份

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