簡述Java數組的基本屬性及其用法

數組的初始化及其基本屬性

1. 數組:屬於引用類型,就是一個存放同類型變量數據的容器。(容器概念以後再補)

2. 數組初始化

第一種:數據類型[] 數組名 = new 數據類型[數據長度];(動態初始化過程)
int[] arr = new int [5];
第二種:數據類型 數組名[] = {數據1,數據2,數據3……};(靜態初始化過程)
int arr[] = {1,2,3,4,5};
動態初始化:我們自己指定了數組長度,系統會自動開闢相應的內存空間,並且給所有位置分配一個默認值。
靜態初始化:我們在初始化開始就給定了數組值,系統會根據值的數量,開闢內存空,所以不需要我們指定數組長度。
靜態對象還可以用在匿名對象上(參考面向對象的匿名對象)

例:String str = Arrays.toString(new int[] {1,2,3,4,5})(這裏的數組沒有名字,是臨時定義的)

3.訪問數組的元素

數組名[下標/索引]引用存儲數據的地址(實際上就是使用了指針,而Java中沒有指針,故使用引用對象)。

例:int arr[] ={1,2,3,4,5};
 	System.out.println(Arrays.toString(arr));
輸出:
	[1,2,3,4,5]
	int arr1[]=arr; //這裏是把數組arr引用對象的地址給了arr1,所以這倆數組實際上都是一個東西,
					//對其中一個修改,兩邊引用的數組都會發生改變。
	arr1[0]=5;
	System.out.println(Arrays.toString(arr));
	System.out.println(Arrays.toString(arr1));
輸出:
	[5,2,3,4,5]
	[5,2,3,4,5]

當引用對象賦值給其他對象時,修改的是地址上的數據,所以只要引用這個對象的值都會發生變化。
這裏得說說引用傳遞,值傳遞。
引用傳遞:引用傳遞最終操作的是引用指向JVM虛擬機堆裏面存儲的數據,所有引用這組數據的引用對象都會受到影響。
值傳遞:直接對數據進行操作,改變的只是裝着這個值的單個變量。

4.數組的基本操作

首先建立一個數組

package com.study.monday;

import java.util.Arrays;
import java.util.Scanner;

public class ArrayPractice2 {

	public static void main(String[] args) {
		/*
		 * 有一個數列:8,4,2,1,23,344,12
		 * 求出最大值 
		 * 數組查找
		 * 數組排序
		 */
		int[] arr= {8,4,2,1,23,344,12};
		System.out.println("最大值爲:" + getArrMax(arr));		//獲取最大值
		ascOrder(arr);		//升序排列數組
		descOrder(arr);		//降序排列數組
		lookupArr(arr);		//查找數組中是否存在相同的數值
	}

遍歷數組的用法,主要是利用for循環來對數組每一個數進行訪問使用。

	/*
	 * 方法名:getArrMax
	 * 功能:求出數組的最大值max
	 * 返回值類型:int
	 */
	public static int getArrMax(int arr3[]) {
		int max = arr3[0];
		for (int i = 1; i < arr3.length; i++) {
			max = max > arr3[i] ? max : arr3[i];
		}
		return max;
	}

對數組的排序(冒泡法),檢索。(排序、查找單獨寫一篇詳細記錄)

	/*
	 * 方法名:lookupArr
	 * 功能:鍵盤輸入一個值,查看數組內是否有相同的值
	 * 返回值類型:void
	 */
	public static void lookupArr(int arr5[]) {
		Scanner input = new Scanner(System.in);
		int a = input.nextInt();
		for (int i = 0; i < arr5.length; i++) {
			if (a == arr5[i]) {
				System.out.println("有!!在a[" + i + "]");
			}
		}
	}
	/*
	 * 方法名:ascOrder
	 * 功能:對數組進行升序排列,並且輸出
	 * 返回值類型:void
	 */
	public static void ascOrder(int arr6[]) {
		int a;
		for (int i = 0; i < arr6.length; i++) {
			for (int j = 0; j < arr6.length -1-i; j++) {
				if (arr6[j] > arr6[j + 1]) {
					a = arr6[j];
					arr6[j] = arr6[j + 1];
				    arr6[j + 1] = a;
				}
			}
		}
		System.out.print("升序排列爲:");
		printArray(arr6);
	}


這些就是上課老師講的,我自己理解的,最後彙總出來的。有些東西是老師的,有些是我自己的,我只是把自己認爲比較重要的寫出來了。關於最後的數組排序,查詢,還有上面提到過的程序效率問題,決定單獨再寫一篇來自己總結一下,八大排序,二分法查詢,目前自己已知的程序效率算法。

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