目錄
1.陣列概述
陣列的定義:
2.陣列宣告創建
宣告與創建:
3陣列創建的底層原理之三種初始化及記憶體分析:
1.靜態初始化
2.動態初始化
3.陣列的默認初始化
4.記憶體分析
4.陣列使用
四個基本特點
陣列邊界
陣列的使用具體介紹
陣列的一些基本使用:
進階使用:
陣列作方法入參
陣列作回傳值
5.多維陣列
二維陣列
記憶體結構:
基本格式:
兩種初始化方法:
獲取二維陣列長度:
6.Arrays類(關于陣列的工具類)
1.列印陣列
2.陣列排序
3.二分查找
4.元素填充
大家好,我是躺在床上混子日的躺平哥,今天我們來學習java中的陣列,希望給位大佬多多指教!
1.陣列概述及定義
陣列的概述:
陣列(Array),是多個相同型別資料按一定順序排列的集合,并使用一個名字命名,并通過編號的方式對這些資料進行統一管理,
陣列是一個最簡單的資料結構,
陣列的定義:
陣列是相同型別資料的有序集合,
陣列描述的是相同型別的若干個資料,按照一定的先后次序排列組合而成,
其中,每一個資料稱作為一個陣列元數,每一個陣列元數可以通過一個下表來訪問他們!
2.陣列宣告創建
宣告與創建:
首先必須宣告陣列變數,才能在程式中使用陣列,下面是宣告陣列變數的語法:
變數型別 變數的名字 =變數的值
陣列型別 比如:int[],是存盤整數型的陣列,
dateType[]arrayRefVar;//首選的方法
或dateType array RefVar[];//效果相同,但不是首選的方法
java語言使用new運算子來創建陣列,語法如下:
dateType[]arrayRefVar =new dateType[arraySize];
陣列的元素是通過索引訪問的,陣列索引從0開始,比如a[0],a[1],a[2],a[3],a[4],a[5] 這0,1,2,3,4,5,就是索引!
獲取陣列長度操作:
arrays.length
[下面我們來宣告一個陣列并創建一個陣列,然后參考陣列元素并求元素的和]
public static void main(String[] args) {
int[] nums;//1,宣告一個陣列
nums=new int[10];//2,創建一個陣列
//3,給陣列中元素賦值
nums[0]=1;
nums[1]=2;
nums[2]=3;
nums[3]=4;
nums[4]=5;
nums[5]=6;
nums[6]=7;
nums[7]=8;
nums[8]=9;
nums[9]=10;
System.out.println(nums[0]);
//4,計算所有元素的和
int sum =0;
for (int i=0;i<nums.length;i++)
{
sum =sum+nums[i];
}
System.out.println("總和為:"+sum);
}
運行結果為:

3陣列創建的底層原理之三種初始化及記憶體分析:
1.靜態初始化
(創建+賦值:即創建陣列的時候就要給資料!)
(初始化時由程式猿顯示指定每個陣列元素的初始值,由系統決定陣列的長度)
int[] a={1,2,3};
Man[] mans ={new Man(1,1),new Man(2,2)};
2.動態初始化
(包含默認初始化)
(動態初始化就是在初始化的時候指定陣列長度(這時已經分配記憶體))
int [] a=new int[2]
a[0]=1;
a[1]=2;
括號里的內容也是動態初始化和靜態初始化的區別!
3.陣列的默認初始化
(默認賦值:int型默認值為0,string型默認值為null(空))
陣列是參考型別,它的元素相當于類的實體變數,因此陣列一經分配空間,其中的每個元素也被按照實體變數同樣的方式被隱式初始化,
4.記憶體分析
下面的圖比較容易理解 
4.陣列使用
在使用陣列前要先掌握陣列的四個基本特點
四個基本特點
1.其長度是確定的,陣列一旦被創建,他的大小就是不可以改變的,
2.其元素必須是相同型別,不允許出現混合型別,
3.陣列中的元素可以是任何資料型別,包括基本型別和參考型別,
4.陣列變數屬于參考型別,陣列也可以看成是物件,陣列中的每個元素相當于該物件的成員變數
陣列本身就是物件,java中物件是在堆中的,因此陣列無論保存原始型別還是其他物件型別,陣列物件本身就是在堆中的
陣列邊界
下標的合法區間:【0,length-1】,如果越界就會報錯;
public static void main (String[] args){
int [] a=new int[2];
System.out.println(a[2]);
}

小結:
1.陣列是相同資料型別(陣列型別可以為任意型別)的有序集合,
2.陣列也是物件,陣列元素相當于物件的成員變數,
3.陣列長度是確定的,不可變的,如果越界,則會報上方的紅色陳述句!
陣列的使用具體介紹
陣列的一些基本使用:
普通的for回圈(用的最多)
我們要從陣列里取出一些資料或者下標進行操作時使用
public static void main(String[] args) {
int[] arrays ={1,2,3,4,5};
//列印全部的陣列元素
for(int i=0;i< arrays.length;i++){
System.out.println(arrays[i]);
}
System.out.println("========");
//計算所有元素的和
int sum=0;
for(int i=0;i<arrays.length;i++){
sum+=arrays[i];
}
System.out.println("sum"+sum);
System.out.println("============");
//查找最大元素
int max=arrays[0];
for(int i=1;i< arrays.length;i++)
if(arrays[i]>max){
max=arrays[i];
}
System.out.println("max"+max);
}
進階使用:
For-Each回圈(即增強for回圈)
一般用來列印一些結果時使用
public static void main(String[] args) {
int[]arrays ={1,2,3,4,5};
//JDK1.5,沒有下標
for (int array : arrays) {
System.out.println(array);
}
}
陣列作方法入參
就是咱們可以對陣列進行操作
陣列可以做引數傳遞給方法,
例如:
//列印陣列元素
public static void printArray(int[] array) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
}
陣列作回傳值
當我們想把陣列修改一下,然后回傳一個新的陣列的時候使用!
return后的是回傳值
//反轉陣列
public static int[] reverse(int[] arrays) {
int[] result = new int[arrays.length];
//反轉操作
for (int i = 0, j = result.length - 1; i < arrays.length; i++, j--) {
result[j] = arrays[i];
}
return result;
}
記住就行,操作固定!
5.多維陣列
多維陣列可以看成是陣列的陣列,比如二維陣列就是一個特殊的一個一維陣列.
二維陣列
記憶體結構:

基本格式:
int a[][]=new int[2][5];
因為二維陣列只有兩個下標都知道才能定位具體位置!所以后面兩個數!
兩種初始化方法:
1: 動態初始化
資料型別 陣列名 [ ][ ] = new 資料型別[m][n]
資料型別 [ ][ ] 陣列名 = new 資料型別[m][n]
資料型別 [ ] 陣列名 [ ] = new 資料型別[m][n]
舉例:int [ ][ ] arr=new int [5][3]; 也可以理解為“5行3例”
2: 靜態初始化
資料型別 [ ][ ] 陣列名 = {{元素1,元素2....},{元素1,元素2....},{元素1,元素2....}.....};
舉例:int [ ][ ] arr={{22,15,32,20,18},{12,21,25,19,33},{14,58,34,24,66},};
靜態初始化可用于不規則二維陣列的初始化
public static void main(String[]args){
int [][] arr=new int[][]{{4,5,6,8},{2,3},{1,6,9}};
System.out.println(arr.length);//輸出行數
System.out.println(arr[0].length);//輸出列數
}
二者區別跟一維陣列的動態初始化和靜態初始化相同,詳見上方!
獲取二維陣列長度:
陣列值arr[x][y]表示指定的是第x行第y列的值,
在使用二維陣列物件時,注意length所代表的長度,
陣列名后直接加上length(如arr.length),所指的是有幾行(Row),
指定索引后加上length(如arr[0].length),指的是該行所擁有的元素,也就是列(Column)數目,
6.Arrays類(關于陣列的工具類)
想一下我們之前是不是學過scanner類,他是接收鍵盤輸入的一個類,而Arrays類是操作陣列的類,說白了java的學習就是在學習一個又一個的類!
Java 8 中文版 - 在線API中文手冊 - 碼工具

由于陣列物件本身并沒有什么方法可以供我們呼叫,但API中提供了一個工具類Arrays供我們使用,從
而可以對資料物件進行一些基本的操作,
而且Arrays類中的方法都是static修飾的靜態方法,在使用的時候可以直接使用類名進行呼叫!
而"不用"使用物件來呼叫(注意:是"不用" 而不是 "不能")
java.util.Arrays 類能方便地操作陣列. 使用之前需要導包!
具有一下常用功能:
1.給陣列賦值:通過 fifill 方法,
2.對陣列排序:通過 sort 方法,按升序,
3.比較陣列:通過 equals 方法比較陣列中元素值是否相等,
4.查找陣列元素:通過 binarySearch 方法能對排序好的陣列進行二分查找法操作,
1.列印陣列
public class java1 {
public static void main(String[] args) {
int[] nums = new int[5];
nums[0] = 1;
nums[1] = 2;
nums[2] = 3;
nums[3] = 4;
nums[4] = 5;
System.out.println(Arrays.toString(nums));
}
}
2.陣列排序
public static void sort(int[] a) :對指定的 int 型陣列按數字升序進行排序,
public class java1 {
public static void main(String[] args) {
int[] nums = new int[5];
nums[0] = 1;
nums[1] = 6;
nums[2] = 55;
nums[3] = 15;
nums[4] = 45;
System.out.println(Arrays.toString(nums));
Arrays.sort(nums);
System.out.println(Arrays.toString(nums));
}
}
3.二分查找
在陣列中查找指定元素并回傳其下標
注意:使用二分搜索法來搜索指定的陣列,以獲得指定的值,必須在進行此呼叫之前對陣列進行排序(通過sort方法等),如果沒有對陣列進行排序,則結果是不確定的,
如果陣列包含多個帶有指定值的元素,則無法保證找到的是哪一個,
Arrays.binarySearch(); //二分查找法找指定元素的索引值(下標):
陣列一定是排好序的,否則會出錯,找到元素,只會回傳最后一個位置
int[] arr = {10,20,30,40,50};
System.out.println(Arrays.binarySearch(arr, 30));
//輸出:2 (下標索引值從0開始)
int[] arr = {10,20,30,40,50};
System.out.println(Arrays.binarySearch(arr, 36));
//輸出:-4 (找不到元素,回傳-x,從-1開始數,如題,回傳-4)
int []arr = {10,20,30,40,50};
System.out.println(Arrays.binarySearch(arr, 0,3,30));
//輸出:2 (從0到3位(不包括)找30,找到了,在第2位,回傳2)
int []arr = {10,20,30,40,50};
System.out.println(Arrays.binarySearch(arr, 0,3,40));
//輸出:-4 (從0到3位(不包括)找40,找不到,從-1開始數,回傳-4)
4.元素填充
Arrays.fill(); //填充陣列
int[] arr = new int[5];//新建一個大小為5的陣列
Arrays.fill(arr,4);//給所有值賦值4
String str = Arrays.toString(arr); // Arrays類的toString()方法能將陣列中的內容全部列印出來
System.out.print(str);
//輸出:[4, 4, 4, 4, 4]
int[] arr = new int[5];//新建一個大小為5的陣列
Arrays.fill(arr, 2,4,6);//給第2位(0開始)到第4位(不包括)賦值6
String str = Arrays.toString(arr); // Arrays類的toString()方法能將陣列中的內容全部列印出來
System.out.print(str);
//輸出:[0, 0, 6, 6, 0]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/413382.html
標籤:java
上一篇:為什么我不能在反應中使用來自jsonwebtoken的jwt.verify()?
下一篇:資料結構java版之堆疊
