陣列(array):是一種用于存盤多個相同資料型別的存盤模型(可以理解為容器)
陣列定義和靜態初始化
陣列的兩種定義格式:
??格式1:
????資料型別[] 變數名;
????范例: int[] arr; // 定義了一個int型別的陣列,陣列名是arr
??格式2:
????資料型別 變數名[];
????范例: int arr[]; 定義了一個int型別的變數,變數名是arr陣列
public class Test { public static void main(String args[ ]) { int[ ] s; // 宣告陣列; s = new int[10]; // 動態初始化,給陣列分配空間; for (int i = 0; i < 10; i++) { // 遍歷陣列 s[i] = 2 * i + 1;//給陣列元素賦值; 陣列是物件,陣列中的元素就是物件的屬性 System.out.println(s[i]); } } }
靜態初始化
??初始化時指定每個陣列元素的初始值,由系統決定陣列長度
??格式:
????資料型別[] 變數名 = new 資料型別[]{資料1,資料2,資料3,…};
????范例:int[] arr = new int[]{1,2,3};
簡化格式:
????資料型別[] 變數名 = {資料1,資料2,資料3,…};
????范例:int[] arr = {1,2,3};
動態初始化
動態初始化:初始化時只指定陣列長度,由系統為陣列分配初始值
格式:
資料型別[ ] 變數名 = new 資料型別 [陣列長度]; // new:開辟陣列記憶體空間
范例:
int[] arr = new int[3]; 表示我們定義了一個int型別的陣列,初始化為3個元素,
- 靜態初始化:開始就存入元素值,適合一開始就能確定元素值的業務場景
- 動態初始化:指定陣列長度,后期賦值,適合開始知道資料的數量,但是不確定具體元素值的業務場景
- 注意:兩種初始化的方式是獨立的,不可以混用
陣列使用中的兩個小問題
1:索引越界:訪問了陣列中不存在的索引對應的元素,造成索引越界問題
ArrayIndexOutOfBoundsException
2:空指標例外:物件不再指向堆記憶體,還想繼續訪問資料,訪問失敗
NullPointerException
3:null:空值,參考資料型別的默認值,表示不指向任何有效物件
陣列的遍歷
陣列特征:
①:索引從0開始
②:索引是連續的
③:索引逐一增加,每次加1
陣列元素下標的合法區間:[0, length-1],我們可以通過下標來遍歷陣列中的元素,遍 歷時可以讀取元素的值或者修改元素的值,
使用回圈初始化和遍歷數
public class Test { public static void main(String[ ] args) { int[ ] a = new int[4]; // 動態初始化 //初始化陣列元素的值 for(int i=0;i<a.length;i++){ a[i] = 100*i; } //讀取元素的值 for(int i=0;i<a.length;i++){ System.out.println(a[i]); } } }
for-each 回圈
for-each 專門用于讀取陣列或容器中所有的元素,
public class Test { public static void main(String[ ] args) { String[ ] ss = { "aa", "bbb", "ccc", "ddd" }; // 【靜態初始化】定義一個字串陣列 for (String temp : ss) { System.out.println(temp); } } }
- for-each 增強 for 回圈在遍歷陣列程序中不能修改陣列中某元素的值,
- for-each 僅適用于遍歷,不涉及有關索引(下標)的操作,
陣列常見操作之獲取最大值
public class ArrayTest { public static void main(String[] args) { //定義陣列 int[] arr = {12, 45, 98, 73, 60}; //定義變數max存盤最大值,取第一個資料為變數的初始值 int max = arr[0]; //將這個max初始值與陣列中剩余資料逐個比對,每次比對將最大值覆寫到變數max中 for (int i=1; i<arr.length; i++) { if(arr[i] > max) { max = arr[i]; } } //回圈結束后輸出變數max的值 System.out.println("max:" + max); } }
陣列常見操作之元素打亂
public class ArrayTesttwo { public static void main(String[] args) { //定義陣列 int[] arr = {12, 45, 98, 73, 60}; // 靜態初始化一個整型陣列 Random r = new Random(); // 生成亂數 for (int i = 0; i < arr.length; i++) { int index = r.nextInt(arr.length); int temp = arr[i]; arr[i] = arr[index]; arr[index] = temp; } //遍歷陣列 for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } }
關于random類的一些方法
import java.util.Random; public class Test06 { public static void main(String[] args) { Random r = new Random(); double d1 = r.nextDouble(); // 生成[0,1.0]區間的小數 double d2 = r.nextDouble() * 7; // 生成[0,7.0]區間的小數
// 如果是加“+”,則區間里面的數都要加“例如 * 7 改為 + 1,區間里面為99,--則最終區間范圍為:1-100”
double d2 = r.nextDouble() + 1; // 則最終區間范圍為:1-100
int i1 = r.nextInt(10); // 生成[0,10]區間的整數 int i2 = r.nextInt(18) - 3; // 生成[-3,15)區間的整數 long l1 = r.nextLong(); // 生成一個隨機長整型值 boolean b1 = r.nextBoolean(); // 生成一個隨機布爾型值 float f1 = r.nextFloat(); // 生成一個隨機浮點型值 System.out.println("生成的[0,1.0]區間的小數是:" + d1); System.out.println("生成的[0,7.0]區間的小數是:" + d2); System.out.println("生成的[0,10]區間的整數是:" + i1); System.out.println("生成的[-3,15]區間的整數是:" + i2); System.out.println("生成一個隨機長整型值:" + l1); System.out.println("生成一個隨機布爾型值:" + b1); System.out.println("生成一個隨機浮點型值:" + f1); System.out.print("下期七星彩開獎號碼預測:"); for (int i = 1; i < 8; i++) { int num = r.nextInt(9); // 生成[0,9]區間的整數 System.out.print(num); } } }
本實體每次運行時結果都不相同,這就實作了隨機產生資料的功能,該程式的運行結果如下: 生成的[0,1.0]區間的小數是:0.8773165855918825 生成的[0,7.0]區間的小數是:6.407083074782282 生成的[0,10]區間的整數是:5 生成的[-3,15]區間的整數是:4 生成一個隨機長整型值:-8462847591661221914 生成一個隨機布爾型值:false 生成一個隨機浮點型值:0.6397003 下期七星彩開獎號碼預測:0227168
陣列的拷貝
System.arraycopy(object src,int srcpos,object dest, int destpos,int length)
該方法可以將 src 陣列里的元素值賦給 dest 陣列的元素,其中 srcpos 指定從 src 陣列的第幾個 元素 開始賦值,
length 引數指定將 src 陣列的多少個元素賦給 dest 陣列的元素
public class Test { public static void main(String args[ ]) {
// 一個靜態初始化陣列,一個賦有值,一個動態初始化陣列,只分配陣列記憶體空間 String[ ] s = {"阿里","位元組","京東","搜狐","網易"}; String[ ] sBak = new String[6]; System.arraycopy(s,0,sBak,0,s.length); for (int i = 0; i < sBak.length; i++) { System.out.print(sBak[i]+ "\t"); } } }

java.util.Arrays 類
Arrays 類包含了:排序、查找、填充、列印內容等常見的陣列操作,
import java.util.Arrays; public class Test { public static void main(String args[ ]) { int[ ] a = { 1, 2 }; // 靜態初始化一個2個元素的int型 System.out.println(a); // 列印陣列參考的值; System.out.println(Arrays.toString(a)); // 列印陣列元素的值; } }
直接列印a,出來的是其地址;Arrays.toString(a)直接遍歷列印出陣列的元素
此處的 Arrays.toString()方法是 Arrays 類的靜態方法,不是前面講的 Object 的 toString() 方法,
使用 Arrays 類對陣列元素進行排序
import java.util.Arrays; class Test { public static void main(String args[]) { int[] a = {1, 2, 323, 23, 543, 12, 59}; System.out.println(Arrays.toString(a)); Arrays.sort(a); // sort(); 排序方法 將指定陣列按升序排序, System.out.println(Arrays.toString(a)); } }

使用 Arrays 類對陣列進行填充
import java.util.Arrays; public class Test { public static void main(String[] args) { int[] a = {1, 2, 323, 23, 543, 12, 59}; System.out.println(Arrays.toString(a)); Arrays.fill(a, 2, 4, 100); //把陣列a中的2到4索引的元素替換為100; System.out.println(Arrays.toString(a)); } }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/503351.html
標籤:其他
