數組的初始化及其基本屬性
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);
}
這些就是上課老師講的,我自己理解的,最後彙總出來的。有些東西是老師的,有些是我自己的,我只是把自己認爲比較重要的寫出來了。關於最後的數組排序,查詢,還有上面提到過的程序效率問題,決定單獨再寫一篇來自己總結一下,八大排序,二分法查詢,目前自己已知的程序效率算法。