Java數(shù)組的基本操作方法整理
1. 數(shù)組的定義
數(shù)組是相同類型數(shù)據(jù)的有序集合。
數(shù)組描述的是相同類型的若干個(gè)數(shù)據(jù),按照一定的先后次序排列組合而成。
其中,每一個(gè)數(shù)據(jù)稱作一個(gè)數(shù)組元素,每個(gè)數(shù)組元素可以通過一個(gè)下標(biāo)來訪問它們。
2. 數(shù)組的聲明、創(chuàng)建
首先必須聲明數(shù)組變量,才能在程序中使用數(shù)組。下面是聲明數(shù)組變量的語法:
dataType[] arrayRefVar; //首選的方法 int[] array; 聲明一個(gè)int型數(shù)組array。 或 dataType arrayRefVar[]; //效果相同,但不是首選方法 int array[];
Java語言使用new操作符來創(chuàng)建數(shù)組,語法如下:
dataType[] arrayRefVar = new dataType[arraySize]; //int[] array = new int[5];
數(shù)組的元素是通過索引訪問的,數(shù)組索引從0開始。
獲取數(shù)組長度:array.length
3. 內(nèi)存分析
4. 數(shù)組的三種初始化
靜態(tài)初始化
int[] a = {1,2,3};Man[] mans = {new Man(1,1),new Man(2,2)};
動(dòng)態(tài)初始化
int[] a = new int[3];a[0] = 2;a[1] = 4;a[2] = 6;
默認(rèn)值初始化
- 數(shù)組是引用類型,它的元素相當(dāng)于類的實(shí)例變量,因此數(shù)組一經(jīng)分配空間,其中的每個(gè)元素也被按照實(shí)例變量同樣的方式被隱式初始化。
5. 數(shù)組的四個(gè)基本特點(diǎn)
- 其長度是確定的。數(shù)組一旦被創(chuàng)建,它的大小就是不可以改變的。
- 其元素必須是相同類型,不允許出現(xiàn)混合類型。
- 數(shù)組中的元素可以是任何數(shù)據(jù)類型,包括基本類型和引用類型。
- 數(shù)組變量屬引用類型,數(shù)組也可以看成是對(duì)象,數(shù)組中的每個(gè)元素相當(dāng)于該對(duì)象的成員變量。
數(shù)組本身就是對(duì)象,Java中對(duì)象是在堆中的,因此數(shù)組無論保存原始類型還是其它對(duì)象類型,
數(shù)組對(duì)象本身是在堆中的。
6. 數(shù)組邊界
下標(biāo)的合法區(qū)間:[0,length-1],如果越界就會(huì)報(bào)錯(cuò);
public static void main(String[] args){ int[] a = new int[2]; System.out.println(a[2]); }
ArrayIndexOutOfBoundsException:數(shù)組下標(biāo)越界異常!
小結(jié):
①數(shù)組是相同數(shù)據(jù)類型(數(shù)據(jù)類型可以為任意類型)的有序集合
②數(shù)組也是對(duì)象。數(shù)組元素相當(dāng)于對(duì)象的成員變量
③數(shù)組長度是確定的,不可變得。如果越界,則報(bào):ArrayIndexOutOfBounds
7. 數(shù)組的使用
7.1 普通For循環(huán)
使用最多。
7.2 For-Each循環(huán)
用于打印數(shù)組,無下標(biāo)。
//增強(qiáng)for循環(huán):For-each循環(huán);JDK1.5開始,沒有下標(biāo) int[] arrays = {1,3,8,6,2}; for (int array : arrays) { System.out.println(array); }
7.3 數(shù)組作方法入?yún)?/h3>
//打印數(shù)組元素 <數(shù)組作方法入?yún)?gt;
public static void arrayPrint(int[] arrays){
for (int i = 0; i <arrays.length ; i++) {
System.out.print(arrays[i] + " ");
}
}
//打印數(shù)組元素 <數(shù)組作方法入?yún)?gt; public static void arrayPrint(int[] arrays){ for (int i = 0; i <arrays.length ; i++) { System.out.print(arrays[i] + " "); } }
7.4 數(shù)組作返回值
//反轉(zhuǎn)數(shù)組 <數(shù)組作返回值> public static int[] reverse(int[] arrays){ int[] arr = new int[arrays.length]; /* for(int i = 0,j = arr.length - 1;i < arrays.length;i++,j--){ arr[j] = arrays[i]; } */ for (int i = arrays.length - 1; i >= 0 ; i--) { int j = 0; if(j < arrays.length) { arr[j] = arrays[i]; System.out.print(arr[j] + " "); } j++; } return arr; }
8. 二維數(shù)組
多維數(shù)組可以看成是數(shù)組的數(shù)組,比如二維數(shù)組就是一個(gè)特殊的一位數(shù)組,其每一個(gè)元素都是一個(gè)一位數(shù)組。二維數(shù)組:
int[][] a = new int[2][5] //二維數(shù)組a可以看成一個(gè)兩行五列的數(shù)組。
9. Arrays類
數(shù)組的工具類java.util.Arrays
由于數(shù)組對(duì)象本身并沒有什么方法可以供我們調(diào)用,但API中提供了一個(gè)工具類Arrays供我們使用,從而可以對(duì)數(shù)據(jù)對(duì)象進(jìn)行一些基本的操作。
查看JDK幫助文檔
Arrays類中的方法都是static修飾的靜態(tài)方法,在使用的時(shí)候可以直接使用類名進(jìn)行調(diào)用,而“不用”使用對(duì)象來調(diào)用(注意:是“不用”而不是“不能”?。?/p>
具有以下常用方法:
//打印數(shù)組的三種方式: import java.util.Arrays; public class ArrayDemo6 { public static void main(String[] args) { int[] arr = {5,7,8,28,6}; //System.out.println(arr); //[I@1b6d3586 數(shù)組對(duì)象arr地址的哈希值 //打印數(shù)組一: 調(diào)用Arrays類的toString()方法 System.out.println(Arrays.toString(arr)); System.out.println("****************"); //打印數(shù)組二:調(diào)用返回值類型為void的arrayPrint1()方法 arrayPrint1(arr); System.out.println(); System.out.println("-----------------"); //打印數(shù)組三:調(diào)用返回值類型為String的arrayPrint2()方法 String str = arrayPrint2(arr); System.out.println(str); } //打印數(shù)組的方法: // ①返回值類型為void時(shí):arrayPrint1(); public static void arrayPrint1(int[] arrays){ System.out.print("["); for(int i = 0;i < arrays.length;i++) { if (i == arrays.length - 1) { System.out.print(arrays[i] + "]"); return; //終止方法 } System.out.print(arrays[i] + ", "); } } // ②返回值類型為String時(shí):arrayPrint2(); public static String arrayPrint2(int[] arrays){ String result = "["; for(int i = 0;i < arrays.length;i++) { if (i == arrays.length - 1) { result += (arrays[i] + "]"); break; //結(jié)束循環(huán) } result += (arrays[i] + ", "); } return result; } }
10. 冒泡排序
import java.util.Arrays; public class ArrayDemo9 { public static void main(String[] args) { int[] arr = {8,5,9,3,1,0,7,6}; sort(arr); System.out.println(Arrays.toString(sort(arr))); } //冒泡排序: public static int[] sort(int[] array){ //臨時(shí)變量 int temp = 0; for(int i = 0;i < array.length - 1;i++){ for (int j = 0; j < array.length - 1 - i; j++) { if(array[j] > array[j+1]){ //如果后一個(gè)數(shù)比前一個(gè)大,就交換位置 temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; } } } return array; } }
冒泡排序算法優(yōu)化:
11. 稀疏數(shù)組
//稀疏數(shù)組 △!! public class ArrayDemo10 { public static void main(String[] args) { int[][] arr = new int[11][11]; arr[1][2] = 1; arr[2][3] = 2; System.out.println("輸出原始的數(shù)組:"); //輸出數(shù)組 for(int[] array:arr){ for(int a:array){ System.out.print(a + "\t"); } System.out.println(); } System.out.println("=========================================="); //轉(zhuǎn)化為稀疏數(shù)組保存: // 1.獲取有效值個(gè)數(shù) int sum = 0; for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if(arr[i][j] != 0){ sum++; } } } System.out.println("有效值個(gè)數(shù):" + sum); System.out.println("轉(zhuǎn)化后的稀疏數(shù)組:\n" + "行\(zhòng)t" +"列\(zhòng)t" + "值\t" ); // 2.創(chuàng)建一個(gè)稀疏數(shù)組的數(shù)組 int[][] arr2 =new int[sum+1][3]; arr2[0][0] = 11; arr2[0][1] = 11; arr2[0][2] = sum; // 3.遍歷二維數(shù)組,將非零的值,存放稀疏數(shù)組中 int k = 1; for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr.length; j++) { if(arr[i][j] != 0){ //將非0的值,存放在稀疏數(shù)組 arr2[k][0] = i; arr2[k][1] = j; arr2[k][2] = arr[i][j]; k++; } } //優(yōu)化:當(dāng)k大于有效值個(gè)數(shù)時(shí),說明后續(xù)值都為0,不用再遍歷,直接退出整個(gè)循環(huán)體。 if(k > sum){ break; } } // 4.輸出轉(zhuǎn)化后的稀疏數(shù)組 for(int[] array:arr2){ for(int a:array){ System.out.print(a + "\t"); } System.out.println(); } //還原 System.out.println("=================================="); System.out.println("稀疏數(shù)組的還原:"); // 1、讀取稀疏數(shù)組 int[][] arr3 = new int[arr2[0][0]][arr2[0][1]]; // 2、給其中的元素還原它的值 for (int i = 1; i < arr2.length; i++) { arr3[arr2[i][0]][arr2[i][1]] = arr2[i][2]; } // 3、打印 for (int[] array:arr3) { for (int a:array) { System.out.print(a + "\t"); } System.out.println(); } } }
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
mybatis教程之增刪改查_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了mybatis教程之增刪改查,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09java實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)單鏈表示例(java單鏈表)
這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)單鏈表示例,需要的朋友可以參考下2014-03-03基于Java中進(jìn)制的轉(zhuǎn)換函數(shù)詳解
下面小編就為大家?guī)硪黄贘ava中進(jìn)制的轉(zhuǎn)換函數(shù)詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07Springboot 整合 Java DL4J 實(shí)現(xiàn)農(nóng)產(chǎn)品質(zhì)量檢測系統(tǒng)(推薦)
本文詳細(xì)介紹了系統(tǒng)的搭建過程,包括技術(shù)選型、數(shù)據(jù)處理、模型訓(xùn)練和評(píng)估等關(guān)鍵步驟,系統(tǒng)采用卷積神經(jīng)網(wǎng)絡(luò),對(duì)水果成熟度和缺陷進(jìn)行識(shí)別,有效解決了傳統(tǒng)方法成本高、效率低的問題,有助于提升農(nóng)產(chǎn)品檢測的科技含量和自動(dòng)化水平2024-10-10Java實(shí)現(xiàn)Kafka生產(chǎn)者和消費(fèi)者的示例
這篇文章主要介紹了Java實(shí)現(xiàn)Kafka生產(chǎn)者和消費(fèi)者的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02Springboot詳解RocketMQ實(shí)現(xiàn)廣播消息流程
RocketMQ作為一款純java、分布式、隊(duì)列模型的開源消息中間件,支持事務(wù)消息、順序消息、批量消息、定時(shí)消息、消息回溯等,本篇我們了解如何實(shí)現(xiàn)廣播消息2022-06-06關(guān)于IntelliJ IDEA 打包代碼報(bào)錯(cuò)的問題
這篇文章主要介紹了關(guān)于IntelliJ IDEA 打包代碼報(bào)錯(cuò)的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03