數(shù)組的定義與操作
收錄更新:https://github.com/cunyu1943/JavaPark
目錄
前言
數(shù)組簡介
一維數(shù)組
二維數(shù)組
數(shù)組遍歷
標準 for 循環(huán)
增強 for 循環(huán)
標準庫遍歷
數(shù)組排序
使用排序算法
標準庫排序
常用方法
總結(jié)
前言
前邊已經(jīng)講過了 Java 中的 8 大基本數(shù)據(jù)類型,這篇文章主要就來講講引用類型中的數(shù)組。主要內(nèi)容安排如下:
數(shù)組簡介 遍歷 排序 常用方法
數(shù)組簡介
所謂數(shù)組,其實就是多個相同數(shù)據(jù)類型的元素按一定順序排列而成的集合。即將有限個類型相同的變量放到一個容器中,然后按照編號去訪問各個元素,而這個容器的名字就叫做數(shù)組名,各個元素的編號就叫做索引位置。而其中索引位置是從 0 開始計數(shù),而不是我們?nèi)粘K晳T的 1。
要定義一個數(shù)組類型的遍歷,其語法為 數(shù)據(jù)類型 [],比如 int[],而且在初始化時必須指定數(shù)組大小,如 int[] arr = new int[10],表示 arr 數(shù)組可以容納 10 個 int 類型的元素。
數(shù)組的特點:
數(shù)組中的元素初始化時都是有默認值的,整型對應 0,浮點型對應0.0,而布爾型對應false。數(shù)組一經(jīng)創(chuàng)建,其大?。ㄩL度)就不可再變。 要訪問數(shù)組中的某一元素,需要用到索引,索引從 0開始。如果要修改數(shù)組中的某一元素,直接對對應索引位置的元素使用賦值語句即可。
和變量一樣,既然定義了,那么就要對數(shù)組進行初始化。所謂數(shù)組的初始化,指的是在內(nèi)存中,為數(shù)組容器開辟空間,然后將數(shù)據(jù)存入容器中的過程。而常用的初始化方式主要有兩種:
靜態(tài)初始化 動態(tài)初始化
一維數(shù)組
初始化
靜態(tài)初始化
所謂靜態(tài)初始化,就是在定義數(shù)組的同時將其初始化。
靜態(tài)初始化的完整格式如下:
數(shù)據(jù)類型[] 數(shù)組名 = new 數(shù)據(jù)類型[]{元素 1, 元素 2, 元素 3…};
但在開發(fā)時,為了方便,也可以對上面的代碼進行簡寫:
數(shù)據(jù)類型[] 數(shù)組名 = {元素 1, 元素 2, 元素 3…};
兩種方式最終得到的結(jié)果是一樣的,但第二種更加簡潔方便。
int[] arr1 = {1, 3, 5, 8, 10};
int[] arr2 = new int[] {1, 3, 5, 8, 10};
動態(tài)初始化
動態(tài)初始化,就是先聲明數(shù)組長度定義之后,再由系統(tǒng)對其分配初始值。
數(shù)據(jù)類型[] 數(shù)組名 = new 數(shù)據(jù)類型[數(shù)組長度];
int[] arr = new int[5];
arr[0] = 1;
arr[1] = 3;
arr[2] = 5;
arr[3] = 8;
arr[4] = 10;
PS:注意數(shù)組的索引位置不能超過數(shù)組的長度,如上面例子中的數(shù)組長度為 5,所以我們數(shù)組的索引位置最大只能為 4,否則就會報數(shù)組越界錯誤。
求數(shù)組長度
求數(shù)組的長度,利用數(shù)組的 length 屬性即可;
int[] arr = new int[10];
int size = arr.length; // 10
System.out.println("size = " + size);
二維數(shù)組
初始化
靜態(tài)初始化
int[][] arr1 = {{1, 2, 4}, {5, 7, 9}, {19, 12, 18}};
動態(tài)初始化
二位數(shù)組動態(tài)聲明時,一種是把行和列的長度都指定,而另一種是只需要指定行的長度,不用指定列的長度,列的長度會在初始化時自動確認。
int[][] arr1= new int[3][3];
arr1 = new int[][]{{1, 2, 4}, {5, 7, 9}, {19, 12, 18}};
int[][] arr2= new int[3][];
arr2 = new int[][]{{1, 2, 4}, {5, 7, 9}, {19, 12, 18}};
求數(shù)組長度
不同于一維數(shù)組,因為二維數(shù)組有行和列,所需求長度時需要分別求。
int[][] arr = new int[10][20];
// 求行的長度
int row = arr.lenght;
// 求列的長度,此時求任意一行所在的列的長度即可
int col = arr[0].length;
數(shù)組遍歷
既然我們已經(jīng)學會了數(shù)組的聲明及初始化,接下來就是對數(shù)組進行操作,而最常見的則是遍歷數(shù)組。所謂遍歷,就是將數(shù)組中的所有元素取出來,然后操作這些取出來的元素。
假設(shè)我們有一個數(shù)組如下:
String[] arr = new String[5];
arr = new String[]{"村雨遙", "海賊王", "進擊的巨人", "鬼滅之刃", "斗羅大陸"};
標準 for 循環(huán)
首先,我們來使用標準的 for 循環(huán)來遍歷該數(shù)組,只需要通過數(shù)組的索引位置來訪問即可。
/**
* @author : cunyu1943
* @version : 1.0
* @className : TraverseTest
* @date : 2021/4/25 11:52
* @description : 遍歷
*/
public class TraverseTest {
public static void main(String[] args) {
String[] arr = new String[5];
arr = new String[]{"村雨遙", "海賊王", "進擊的巨人", "鬼滅之刃", "斗羅大陸"};
// 數(shù)組長度
int size = arr.length;
for (int i = 0; i < size; i++) {
System.out.println("第 " + (i + 1) + " 個元素:" + arr[i]);
}
}
}

增強 for 循環(huán)
/**
* @author : cunyu
* @version : 1.0
* @className : EnforceTraverseTest
* @date : 2021/4/26 9:14
* @description : 增強 for 循環(huán)
*/
public class EnforceTraverseTest {
public static void main(String[] args) {
String[] arr = new String[5];
arr = new String[]{"村雨遙", "海賊王", "進擊的巨人", "鬼滅之刃", "斗羅大陸"};
int index = 0;
for (String name : arr) {
System.out.println("第 " + (index + 1) + " 個元素:" + name);
index++;
}
}
}

兩者的區(qū)別:標準 for 循環(huán)是通過計數(shù)器來進行遍歷,我們能夠很清晰的得知每個元素所對應的索引位置,而增強 for each 循環(huán)則是直接訪問數(shù)組中的元素值,而不關(guān)心每個元素對應的索引位置。
標準庫遍歷
通過調(diào)用標準庫 Arrays 中的 toString() 方法,我們可以將任意類型的數(shù)組轉(zhuǎn)換為一個字符串表示形式,從而打印出來。
import java.util.Arrays;
/**
* @author : cunyu
* @version : 1.0
* @className : StandardLibraryTest
* @date : 2021/4/26 9:22
* @description : 標準庫遍歷
*/
public class StandardLibraryTest {
public static void main(String[] args) {
String[] arr = new String[5];
arr = new String[]{"村雨遙", "海賊王", "進擊的巨人", "鬼滅之刃", "斗羅大陸"};
System.out.println(Arrays.toString(arr));
}
}

以上的遍歷主要是針對一維數(shù)組,而針對二維數(shù)組,當我們要訪問其中的一個元素時,可以使用 array[row][col] 來進行訪問,而對于二維及更多維的數(shù)組,可以使用 Arrays.deepToString()。
數(shù)組排序
使用排序算法
排序算法多樣,最常用的則有 冒泡排序、插入排序、快速排序等,進行排序時會修改數(shù)組本身;
冒泡排序:經(jīng)過一輪循環(huán),將最大的數(shù)置換到末尾,然后進入下一輪循環(huán),每輪均比上一輪的結(jié)束位置靠前一位;
import java.util.Arrays;
/**
* @author : cunyu
* @version : 1.0
* @className : BubbleSort
* @date : 2021/4/26 10:16
* @description : 冒泡排序
*/
public class BubbleSort {
public static void main(String[] args) {
char[] chArray = {'c', 'u', 'n', 'y', 'u'};
// 排序前
System.out.println(Arrays.toString(chArray));
for (int i = 0; i < chArray.length - 1; i++) {
for (int j = 0; j < chArray.length - 1 - i; j++) {
// 從大到小
if (chArray[j] < chArray[j + 1]) {
// 交換
char temp = chArray[j];
chArray[j] = chArray[j + 1];
chArray[j + 1] = temp;
}
}
}
// 冒泡排序后
System.out.println(Arrays.toString(chArray));
}
}

標準庫排序
import java.util.Arrays;
/**
* @author : cunyu
* @version : 1.0
* @className : StandardLibrarySortTest
* @date : 2021/4/26 10:22
* @description : 標準庫排序
*/
public class StandardLibrarySortTest {
public static void main(String[] args) {
String[] arr = new String[]{"村雨遙", "海賊王", "進擊的巨人", "鬼滅之刃", "斗羅大陸"};
// 排序前
System.out.println(Arrays.toString(arr));
// 標準庫排序
Arrays.sort(arr);
// 排序后
System.out.println(Arrays.toString(arr));
}
}

常用方法
對于數(shù)組而言,Java 標準庫中已經(jīng)內(nèi)置了許多方法,常用的有如下一些方法:
| 返回值 | 方法 | 描述 |
|---|---|---|
static String | toString(Object[] a) | 輸出數(shù)組的字符串形式 |
static <T> List<T> | asList(T…… a) | 數(shù)組轉(zhuǎn) List |
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author : cunyu
* @version : 1.0
* @className : CommonMethodsTest
* @date : 2021/4/26 10:37
* @description : 常用方法
*/
public class CommonMethodsTest {
public static void main(String[] args) {
String[] arr = new String[]{"村雨遙", "海賊王", "進擊的巨人", "鬼滅之刃", "斗羅大陸"};
// 輸出數(shù)組的字符串形式
System.out.println("打印數(shù)組");
System.out.println(Arrays.toString(arr));
// 數(shù)組轉(zhuǎn)列表
System.out.println("數(shù)組轉(zhuǎn)列表");
List<String> list = new ArrayList<String>(Arrays.asList(arr));
System.out.println(list);
System.out.println("列表轉(zhuǎn)數(shù)組");
list.add("鎮(zhèn)魂街");
String[] newArr = new String[list.size()];
list.toArray(newArr);
System.out.println(Arrays.toString(newArr));
System.out.println("數(shù)組是否包含某一元素");
System.out.println(Arrays.asList(newArr).contains("進擊的巨人"));
System.out.println(Arrays.asList(newArr).contains("網(wǎng)球王子"));
}
}

總結(jié)
數(shù)組相關(guān)的內(nèi)容就到此結(jié)束了,主要從 4 個方面簡單介紹了數(shù)組的一些相關(guān)用法,如果你有更多想要了解的內(nèi)容,歡迎評論區(qū)留言交流。最后,都看到這兒了,不給個贊和關(guān)注再走么 ??.
- END -