數(shù)組的基本概念
所有的開發(fā)中都可能使用到數(shù)組榔袋,但并沒有特別復雜,更多的是為了防止筆試中出現(xiàn)的問題
數(shù)組指的是一組相關(guān)變量的集合
在Java中數(shù)組屬于引用數(shù)據(jù)類型,牽扯到內(nèi)存的關(guān)系讯嫂。對于數(shù)組的定義有以下兩種語法形式:
聲明并開辟數(shù)組:
數(shù)據(jù)類型 數(shù)組名稱[] = new 數(shù)據(jù)類型[長度];
如:int data[] = new int[3];
聲明數(shù)組:
數(shù)據(jù)類型 數(shù)組名稱[] = null;
如:int data[];
開辟數(shù)組:數(shù)組名稱 = new 數(shù)據(jù)類型[長度];
如:data = new int[3];
當數(shù)組開辟之后浇垦,可采用數(shù)組[索引]
的形式進行數(shù)組的訪問炕置,但是需要注意的是,任何長度的數(shù)組其范圍一定是從“0”開始的男韧。如果操作中超過了數(shù)組所允許的索引范圍朴摊,則程序會出現(xiàn)ArrayIndexOutOfBoundsException
報錯
以上是數(shù)組的動態(tài)初始化,特點:數(shù)組開辟空間之后此虑,數(shù)組中每個元素的內(nèi)容都是其對應數(shù)據(jù)類型的默認值
數(shù)組輸出
由于數(shù)組本身是一種順序式的結(jié)構(gòu)甚纲,且長度固定,所以在進行數(shù)組內(nèi)容輸出的時候朦前,往往可以采用for循環(huán)的方式完成介杆。因此就牽扯到數(shù)組長度的獲取,在Java中可以使用數(shù)組.length
的屬性獲取數(shù)組的長度
public class MyClass {
public static void main(String[] args){
int data[] = new int[3];//聲明并創(chuàng)建數(shù)組
//對數(shù)組賦值
data[0] = 10;
data[1] = 20;
data[2] = 30;
//利用數(shù)據(jù).length與for循環(huán)輸出數(shù)組
for (int i = 0;i < data.length;i++){
System.out.print(data[i]+"韭寸、");
}
}
}
數(shù)組的引用分析
引用數(shù)據(jù)類型的分析過程基本相同春哨,所以數(shù)組的引用分析其本質(zhì)也是一樣的,與對象的流程是相同的
聲明并開辟數(shù)組賦值內(nèi)存關(guān)系圖
下圖的流程與普通對象的流程本質(zhì)上是沒有任何差別的恩伺,唯一的區(qū)別是普通對象保存的是屬性赴背,利用屬性名稱來操作,而數(shù)組保存的是一組內(nèi)容晶渠,用索引來操作
數(shù)組的引用內(nèi)存關(guān)系圖
引用的本質(zhì)是同一個堆內(nèi)存可以被不同的棧內(nèi)存所指向并修改
數(shù)組的靜態(tài)初始化
動態(tài)初始化:只能在開辟數(shù)組空間之后才可以進行賦值
-
靜態(tài)初始化:在數(shù)組開辟的同時就可以存在明確的內(nèi)容凰荚,語法如下:
簡化型:
數(shù)據(jù)類型 數(shù)組名稱[] = {值,值褒脯,...};
完全型(推薦使用):數(shù)據(jù)類型 數(shù)組名稱[] = new 數(shù)據(jù)類型[] {值便瑟,值,...};
匿名對象的用法:
new 數(shù)據(jù)類型[]{值番川,值到涂,...};
二維數(shù)組
二維數(shù)組實際上與數(shù)據(jù)表的形式是相同的,由行和列組成爽彤,想要確定一個數(shù)據(jù)需要得知他的行和列的編號
列索引 0 | 列索引 1 | 列索引 2 | |
---|---|---|---|
行索引 0 | 23 | 5611 | 845 |
行索引 1 | 223 | 61 | 8 |
-
靜態(tài)初始化:
int data[] = new int[]{{值,值,...},{值,值,...},...}
-
動態(tài)初始化:
int data[] = new int[行個數(shù)][列個數(shù)]
data = {{值,值,...},{值,值,...},...}
二維數(shù)組的置換:
public class MyClass {
public static void main(String[] args){
int data[][] = new int[][]{{1,2,3},{4,5,6},{7,8,9}};//創(chuàng)建二維數(shù)組
for (int i = 0; i < data.length; i++){
for (int j = 0; j < data[i].length; j++){
//將二維數(shù)組進行置換
int temp = data[i][j];
data[i][j] = data[j][i];
data[j][i] = temp;
}
}
for (int i = 0; i < data.length; i++){
for (int j = 0; j < data[i].length; j++){
System.out.print(data[i][j]);//輸出
}
System.out.println();
}
}
}
一般用于訓練邏輯思維
數(shù)組相關(guān)操作方法
數(shù)組拷貝
System.arraycopy(原始數(shù)組养盗,原始數(shù)組開始點,目標數(shù)組适篙,目標數(shù)組開始點往核,拷貝長度);
范例:
- 原始數(shù)組①: 1、
嚷节、
聂儒、
虎锚、5、6衩婚、7窜护、8、9非春;
- 原始數(shù)組②:10柱徙、20、30奇昙、40护侮、50、
储耐、
羊初、
、90什湘;
- 希望將數(shù)組②的部分內(nèi)容替換掉數(shù)組1的內(nèi)容:
class ArrCopy{
public static void main(String[] args){
int data1[] = new int[]{1,2,3,4,5,6,7,8,9};
int data2[] = new int[]{10,20,30,40,50,60,70,80,90};
System.arraycopy(data2,5,data1,1,3);
printArr(data1);
}
public static void printArr(int data[]){
for (int i = 0; i < data.length; i++){
System.out.print(data[i]+"闽撤、");
}
}
}
運行結(jié)果:1得哆、60、70腹尖、80柳恐、5、6热幔、7、8讼庇、9
數(shù)組排序
Arrays.sort(原始數(shù)組);
范例:
- 原始數(shù)組:2绎巨、1、6蠕啄、4场勤、3、9歼跟、7和媳、8、5
class ArrSort{
public static void main(String[] args){
int data[] = new int[]{2,1,6,4,3,9,7,8,5};
Arrays.sort(data);
printArr(data);
}
public static void printArr(int data[]){
for (int i = 0; i < data.length; i++){
System.out.print(data[i]);
}
}
}
運行結(jié)果:1哈街、2留瞳、3、4骚秦、5她倘、6璧微、7、8硬梁、9
總結(jié)
- 數(shù)組屬于引用數(shù)據(jù)類型
- 數(shù)組屬于線性的存儲結(jié)構(gòu)前硫,里面的內(nèi)容可以根據(jù)索引線性操作
- 數(shù)組里面容易出現(xiàn)面試題!