八、Java陣列
阿新 • • 發佈:2021-08-03
Java陣列
陣列概述
相同型別資料的有序集合
按先後次序排列組合
每一個數據都可稱作陣列元素,每個陣列元素可以通過一個下標訪問它們
陣列定義
宣告陣列:變數型別[] 陣列名 = new 變數型別[大小];
陣列長度:array.lenth()
陣列第一個下標為0
記憶體分析
Java記憶體:堆、棧和方法區
堆:
- 存放new的物件和陣列
- 可以被所有執行緒共享,不會存放別的物件引用
棧:
- 存放基本的變數型別(包含這個基本型別的具體數值)
- 引用物件的變數(會存放這個引用在堆裡面的具體地址)
方法區:
- 可以被所有執行緒共享
- 包含了所有的class和static變數
-
宣告陣列
int[] array =null; 在棧中
-
建立陣列 在堆中開闢一個空間
array = new int[10];
-
給陣列元素賦值 在堆中空間記憶體放
array[0]=1;
初始化
靜態初始化
定義之後不可改變
建立+賦值
int[] a ={0,1,2};
動態初始化 (包含預設初始化)
int[] b =new int[10];
b[0]=1;
陣列特點
- 長度是確定的,一旦被建立,其大小不可以改變
- 元素必須為相同型別
- 陣列中元素可以是任何資料型別,包括基本型別和引用型別
- 陣列的變數屬於引用型別,陣列本身就是物件,物件在堆中(new 出來的都是堆中的)陣列元素相當於物件的成員變數
- java.lang.ArrayIndexOutOfBoundsException
多維陣列
多維陣列可以看成陣列的陣列
二維陣列定義: int a[] []=new int[2] [5];
package com.dy.array; public class Demo02 { public static void main(String[] args) { int a[][]={{1,2},{2,3},{3,4},{4,5}}; for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[0].length; j++) { System.out.print(a[i][j]+" "); } System.out.println(); } } }
Arrays類
Arrays裡的方法都是static修飾的靜態方法,可以直接通過類名進行呼叫
package com.dy.array;
import java.util.Arrays;
public class Demo03 {
public static void main(String[] args) {
int[] a ={1,3,6,3,80,3874,9940,293};
System.out.println(a);//地址
//列印陣列元素
System.out.println(Arrays.toString(a));
//排序
Arrays.sort(a);
System.out.println(Arrays.toString(a));
//填充
Arrays.fill(a,500);
System.out.println(Arrays.toString(a));
}
}
氣泡排序
八大排序
package com.dy.array;
import java.util.Arrays;
public class Demo04 {
public static void main(String[] args) {
int[] a = {1,26,13,7,2};
int[] b=sort(a);
System.out.println(Arrays.toString(b));
}
//氣泡排序
//比較相鄰兩個元素,如果第一個比第二個大,交換他們的位置
//每次比較,會產出一個最大,或者一個最小
//下一輪可以少一次拍訊 直至結束
private static int[] sort(int[] arrays){
int max;
for (int i = 0; i < arrays.length-1; i++) {
for (int j = 0; j < arrays.length-1-i; j++) {
if (arrays[j+1]>arrays[j]){
max=arrays[j];
arrays[j]=arrays[j+1];
arrays[j+1]=max;
}
}
}
return arrays;
}
}
稀疏陣列
package com.dy.array;
import java.util.Arrays;
public class Demo05 {
public static void main(String[] args) {
int[][] a =new int[11][11];
a[1][2]=1;
a[2][3]=2;
for (int[] ints : a) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
System.out.println("=========================");
//轉化為稀疏陣列儲存
//1.獲取有效值的個數
int sum = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (a[i][j]!=0){
sum++;
}
}
}
//2.建立一個稀疏陣列
int[][] array2=new int[sum+1][3];
array2[0][0]=a.length;
array2[0][1]=a[0].length;
array2[0][2]=sum;
int count=0;
//遍歷二維陣列,將非零的值,存放稀疏陣列中
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (a[i][j]!=0){
count++;
array2[count][0]=i;
array2[count][1]=j;
array2[count][2]=a[i][j];
}
}
}
for (int[] ints : array2) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
System.out.println("==========================");
//還原
int[][] arrays=new int[array2[0][0]][array2[0][1]];
for (int i = 1; i < array2.length; i++) {
arrays[array2[i][0]][array2[i][1]]=array2[i][2];
}
for (int[] ints : arrays) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
}
}