數組是相同類型數據的有序集合。數組描述的是相同類型的若干個數據,按照必定的前後次序排列組合而成。其中,每個數據稱做一個元素,每一個元素能夠經過一個索引(下標)來訪問它們。java
這些按序排列的同類數據元素的集合稱爲數組「[]」。編程
長度一旦肯定不能夠改變。數組
其元素必須是 相同 類型,不容許出現混合類型。數組中的元素能夠是任何數據類型,包括基本類型和引用類型。dom
元素所在的位置是有序的。編碼
數組變量屬引用類型,數組也能夠當作是對象,數組中的每一個元素至關於該對象的成員變量。數組自己就是對象Java 中對象是在堆中的,所以數組不管保存基本類型仍是其餘對象類型,數組對象自己是在堆中的。code
數據類型[] 數組名稱; --推薦使用 數據類型 數組名稱[];
double[] arr; char arr2[];
注意 : 引用數據類型只聲明不賦值存在默認值null對象
數組定義與爲數組元素分配空間和賦值的操做分開進行排序
數據類型[] 數組名=new 數據類型[長度];
int[] data = new int[5];
注意:元素爲引用數據類型的數組中的每個元素都須要實例化。索引
Person[] people; //聲明說組 people = new Person[3]; //建立數組 people[0] = new Person(); //數組中元素實例化 people[1] = new Person(); people[2] = new Person();
在定義數組的同時就爲數組元素分配空間並賦值圖片
數據類型[] 數組名=new 數據類型[]{值1,值2...}; 數據類型[] 數組名={值1,值2...}; --當面的簡寫方式
int[] arr=new int[]{1,3,4,6}; int[] arr2={1,2,3,4,5};
注意:
對於返回值類型爲數組類型的方法來講,咱們能夠return new int[3];
,咱們也能夠return new int[]{1, 2, 3};
,但咱們不能夠return {1, 2, 3};
。即簡寫方式,其不能脫離數組的聲明,{1, 2, 3}
並不能返回一個數組對象。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-fznINj1S-1606962908310)(/1581389339459.png)]
數組中的元素只聲明不賦值存在默認值,數組是引用類型,它的元素至關於類的成員變量,所以數組分配空間後,每一個元素也被按照成員變量的規則被隱式初始化。
通常規律爲數值型數組默認值爲 0,引用型數組默認值爲 null:
數組類型 | 默認初始值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0 |
char | 編碼爲0的字符 |
String(引用類型) | null |
float | 0.0 |
double | 0.0 |
boolean | false |
定義並用 new 爲之分配空間以後,才能夠引用數組中的每一個元素,數組元素的引用方式爲:
arrayName[index];
index爲數組元素下標|索引,能夠是整型常量或整型表達式 , 能夠根據數組元素的下標操做數組中數據。如:
arr1[3] = 5; //爲數組索引爲0的空間位置賦值 arr2[0] = "張三"; //爲數組索引爲0的空間位置賦值 System.out.println(arr3[2]);//獲取數組中索引爲2的數據值
數組元素下標從0開始;長度爲n的數組的合法下標取值範圍爲
0~n-1
每一個數組都有一個屬性length指明它的長度
a.length的值爲數組a的長度(元素的個數)
(1)普通for循環
for(int 索引=0;索引<長度; 索引++){ 數組名稱[索引] = 值; }
int[] arr={1,2,3,4}; //1.遍歷數組---基本for循環 for(int i=0;i<arr.length;i++){ //變量i表明索引/元素的下標 System.out.println(arr[i]); }
(2)加強for循環
for(元素類型 局部變量 : 數組){ 局部變量-->爲數組中的每個元素值,從左向右以此獲取 }
//2.遍歷數組---加強for循環 for(int i : arr){ System.out.println(i); //i中存儲數組的元素值,非索引 }
//A:遍歷int類型的數組 依次輸出每一個數組元素 public static void printArray(int[] arr){ //循環遍歷數組下標 for(int i=0;i<arr.length;i++){ System.out.println("輸出int類型數組的每個元素"+arr[i]); } }
//B:逆序:倒敘輸出數組元素 public static void printArr(String[] arr){ for(int i=arr.length-1;i>=0;i--){ System.out.println(arr[i]); } }
//C:最值:獲取數組中的最大值和最小值 public static void maxMinValue(int[] arr){ //假設數組中的第一個元素當成最大值 int max=arr[0]; //假設數組中的第一個元素當成最大值 int min=arr[0]; //遍歷數組 for(int i=0;i<arr.length;i++){ //比較數組元素與max if(max<arr[i]){ max=arr[i]; } //比較數組元素與min if(min>arr[i]){ min=arr[i]; } System.out.println("數組中最大的值爲max"+max); System.out.println("數組中最小的值爲min"+min); } }
該類提供了關於數組操做的API.
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-KAXglmlj-1606962908317)(/1581394901601.png)]
String[] arr1={"hello","shsxt"}; String[] arr2={"hello","shsxt"}; System.out.println(arr1.equals(arr2)); //false //1.Arrays.equals() 先判斷兩個數組的length是否相等,若是相等,再比內容,若是不相等,直接返回false System.out.println(Arrays.equals(arr1, arr2)); //2.Arrays.toString 字符串形式打印數組信息 System.out.println(Arrays.toString(arr1)); //3.Arrays.sort() 升序 int[] arr3={12,7,0,6,-32}; Arrays.sort(arr3); //-32 0 6 7 12 String[] arr4={"ab","a","bc","abc"}; //根據Unicode表中的值 Arrays.sort(arr4); //a ab abc bc //4.Arrays.binarySearch( 數組, 元素) ) :二分法查找 查找元素在數組中出現的索引 //前提:先升序排序,才能二分法查找 //找到返回索引,找不到返回-(插入點)-1 Arrays.sort(arr3); System.out.println(Arrays.binarySearch( arr3, 16)); // -6
運行代碼,隨機打印班級同窗名字
//1.數組存儲姓名,用String數據類型 String[] names={"傑克","戴維瓊斯","伊麗莎白","愛麗絲"}; //2.遍歷數組,打印出全部姓名 for(int i=0;i<names.length;i++){ System.out.println(names[i]); } //3.隨機出一我的名 //利用隨機數,生成一個證書,做爲索引,到數組中查找對應的元素 Random ran=new Random(); //隨機數的範圍是[0,names.length-1] int index=ran.nextInt(names.length); //括號中填寫的最大數是獲取不到的,由於nextInt獲取的範圍是左閉右開區間 System.out.println(names[index]);
二維數組能夠當作以數組爲元素的數組。
其實多維數組不只僅只有二維數組,還有三維數組,四維數組..., 可是三維以上不多見到,因此你們重點了解二維數組便可。
int [][] a = {{1,2},{3,4,0,9},{5,6,7}};
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-KMk5ckSA-1606962908322)(/1581392542509.png)]
數組定義與爲數組元素分配空間和賦值的操做分開進行
數據類型[][] 數組名 = new 數據類型[一維][二維];
注意:這種初始化方式,每個內層的二位數組長度相同
int[][] a=new int[3][2]; a[0][0] = 1; a[0][1] = 2;
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-T2WKnLOE-1606962908325)(/1581393583651.png)]
數據類型[][] 數組名 = new 數據類型[一維][]; 內層數組須要咱們本身去建立(下面能夠用一維數組的建立方式) 數組名[一維數組索引值] = new 數據類型[二維];
int[][] a=new int[3][]; arr[0]=new int[2]; arr[1]=new int[]{3,4,5,6}; arr[2]=new int[]{7,8,9}; arr[0][0] = 1; arr[0][1] = 2;
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Z3A7nO8h-1606962908328)(/1581394324396.png)]
在定義數組的同時就爲數組元素分配空間並賦值
數據類型[][] 數組名 = new 數據類型[][]{{...},{...},{...}}; 數據類型[][] 數組名 = {{...},{...},{...}}; --簡化寫法
int[][] arr1=new int[][]{{5,4,8},{3,8},{1}}; char[][] arr2={{'a'},{'b','c'}};
雙重循環實現多維數組的遍歷
//普通for循環嵌套加強for循環 for(int i=0;i<=arr1.length-1;i++){ for(int j:arr1[i]){ System.out.println(j); } } //加強 for循環嵌套普通for循環 for(int[] arr:arr1){ for(int i=0;i<=arr.length-1;i++){ System.out.println(arr[i]); } } //普通for嵌套普通for循環 ... //加強for嵌套加強for循環 ...
Arrays中提供操做多維數組的方法:
static boolean deepEquals(Object[] a1, Object[] a2) 若是兩個指定的數組彼此 深度相等 ,則返回 true 。 static String deepToString(Object[] a) 返回指定數組的「深度內容」的字符串表示形式。
double[][] arr1= new double[][] {{1.0,2.0},{3.0,4.0,5.0},{6.0}}; double[][] arr2= new double[][] {{1.0,2.0},{3.0,4.0,5.0},{6.0}}; System.out.println(Arrays.deepToString(arr1)); //[[1.0, 2.0], [3.0, 4.0, 5.0], [6.0]] System.out.println(Arrays.deepEquals(arr1, arr2)); //true
bject[] a1, Object[] a2) 若是兩個指定的數組彼此 深度相等 ,則返回 true 。
static String deepToString(Object[] a) 返回指定數組的「深度內容」的字符串表示形式。
double[][] arr1= new double[][] {{1.0,2.0},{3.0,4.0,5.0},{6.0}};double[][] arr2= new double[][] {{1.0,2.0},{3.0,4.0,5.0},{6.0}};System.out.println(Arrays.deepToString(arr1)); //[[1.0, 2.0], [3.0, 4.0, 5.0], [6.0]]System.out.println(Arrays.deepEquals(arr1, arr2)); //true