目錄
- 陣列
- 陣列的定義
- 陣列的創建
- 陣列的特點
- 陣列的使用
- 二維陣列
- Arrays類
- 冒泡排序
- 簡單優化
- 稀疏陣列
陣列
https://www.bilibili.com/video/BV12J41137hu/?p=51
陣列的定義
陣列是相同型別資料的有序集合,
陣列的創建
//靜態初始化
int[] nums1 = {1,2,3};
//動態初始化
int[] nums2 = new int[10];
nums2[0] = 1;
nums2[1] = 2;
陣列的特點
- 其長度是確定的,陣列一旦被創建,它的大小是不可改變的,
- 其元素必須是相同型別,不允許出現混合型別,
- 陣列中的元素可以是任何資料型別,包括基本型別和參考型別,
- 陣列變數屬參考型別,陣列可以看成是物件,陣列中的每個元素相當于該物件的成員變數,陣列本身就是物件,Java中物件是在堆中的,因此陣列無論保存的是基本型別還是參考型別,陣列物件本身是在堆中,
陣列的使用
- for回圈或for-each回圈
- 陣列作方法入參
- 陣列作為回傳值
二維陣列
int[][] nums = {{1,2},{2,3},{3,4}};
int[][] nums = new int[3][2];
nums[0] = {1,2};
nums[0][0] = 1;
Arrays類
- 陣列的工具類java.util.Arrays,
- 查看jdk幫助檔案或查看原始碼,
冒泡排序
package com.qing.array;
import java.util.Arrays;
public class Demo01 {
public static void main(String[] args) {
int[] array = {12,455,22,23,25,3,443,44};
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(sort(array)));
}
/*
冒泡排序
1.從前開始兩兩比較,大的交換
2.外層回圈:回圈的輪數,長度-1,最后一位不需要比較
3.內層回圈:比較的次數,第一次長度-1,依次遞減,比較一次會產生最大值,不需要再比較
*/
public static int[] sort(int[] array) {
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]) {
temp = array[j + 1];
array[j + 1] = array[j];
array[j] = temp;
}
}
}
return array;
}
}
[12, 455, 22, 23, 25, 3, 443, 44]
[3, 12, 22, 23, 25, 44, 443, 455]
簡單優化
package com.qing.array;
import java.util.Arrays;
public class Demo01 {
public static void main(String[] args) {
// int[] array = {12,455,22,23,25,3,443,44};
int[] array = {12,45,12,11,125,133,143,144};
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(sort(array)));
int[] array1 = {12,45,12,11,125,133,143,144};
System.out.println(Arrays.toString(sort1(array1)));
}
/*
冒泡排序
1.從前開始兩兩比較,大的交換
2.外層回圈:回圈的輪數,長度-1,最后一位不需要比較
3.內層回圈:比較的次數,第一次長度-1,依次遞減,比較一次會產生最大值,不需要再比較
簡單優化
4.如果一輪比較都不交換,說明已成功排序,不需要再比較
*/
public static int[] sort1(int[] array) {
int temp = 0;
int count = 0;
for (int i = 0; i < array.length - 1; i++) {
boolean flag = true;
for (int j = 0; j < array.length - 1 - i; j++) {
if (array[j] > array[j + 1]) {
temp = array[j + 1];
array[j + 1] = array[j];
array[j] = temp;
flag = false;
}
}
count+=1;
if (flag) {
System.out.println("sort1回圈輪數:" + (count));
return array;
}
}
System.out.println("sort1回圈輪數:" + (count));
return array;
}
/*
冒泡排序
1.從前開始兩兩比較,大的交換
2.外層回圈:回圈的輪數,長度-1,最后一位不需要比較
3.內層回圈:比較的次數,第一次長度-1,依次遞減,比較一次會產生最大值,不需要再比較
*/
public static int[] sort(int[] array) {
int temp = 0;
int count = 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]) {
temp = array[j + 1];
array[j + 1] = array[j];
array[j] = temp;
}
}
count+=1;
}
System.out.println("sort回圈輪數:" + (count));
return array;
}
}
[12, 45, 12, 11, 125, 133, 143, 144]
sort回圈輪數:7
[11, 12, 12, 45, 125, 133, 143, 144]
sort1回圈輪數:4
[11, 12, 12, 45, 125, 133, 143, 144]
稀疏陣列
- 當一個陣列中大部分元素為0或者為同一值時,可以使用稀疏陣列來保存該陣列,
- 稀疏陣列的處理方式:
- 第一行記錄陣列一共有幾行幾列,有多少個不同值,
- 把具有不同值得元素和行列及值記錄在一個小規模的陣列中,從而縮小程式的規模,
- 如下圖:左邊是原始陣列,右邊是稀疏陣列,

package com.qing.array;
public class Demo02 {
public static void main(String[] args) {
//1. 創建一個二維陣列,記錄棋局,11 * 11 ,0:沒有棋子,1:黑棋,2:白棋
int[][] arr1 = new int[11][11];
arr1[1][2] = 1;
arr1[2][3] = 2;
System.out.println("輸出原始的陣列");
for (int[] ints : arr1) {
for (int anInt : ints) {
System.out.print(anInt + "\t");
}
System.out.println();
}
System.out.println("=========================");
/*
2. 轉換為稀疏陣列
稀疏陣列的列數為3,行數為原始陣列有效值+1,
第一行記錄陣列一共有幾行幾列,有多少個不同值,
*/
int sum = 0;
//計算原始陣列有效值
for (int[] ints : arr1) {
for (int anInt : ints) {
if (anInt != 0) {
sum ++;
}
}
}
System.out.println("原始陣列有效值:" + sum);
//稀疏陣列的列數為3,行數為原始陣列有效值+1,
//第一行記錄陣列一共有幾行幾列,有多少個不同值,
int[][] arr2 = new int[sum + 1][3];
arr2[0][0] = 11;
arr2[0][1] = 11;
arr2[0][2] = sum;
int count = 1;
//記錄有效值的行,列,值
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr1[i].length; j++) {
if (arr1[i][j] != 0) {
arr2[count][0] = i;
arr2[count][1] = j;
arr2[count][2] = arr1[i][j];
count++;
}
}
}
System.out.println("輸出稀疏陣列");
for (int[] ints : arr2) {
for (int anInt : ints) {
System.out.print(anInt + "\t");
}
System.out.println();
}
System.out.println("===================");
//3. 還原原始陣列
int[][] arr3 = new int[arr2[0][0]][arr2[0][1]];
for (int i = 1; i < arr2.length; i++) {
arr3[arr2[i][0]][arr2[i][1]] = arr2[i][2];
}
System.out.println("輸出還原的原始陣列");
for (int[] ints : arr3) {
for (int anInt : ints) {
System.out.print(anInt + "\t");
}
System.out.println();
}
}
}
輸出原始的陣列
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
=========================
原始陣列有效值:2
輸出稀疏陣列
11 11 2
1 2 1
2 3 2
===================
輸出還原的原始陣列
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/200877.html
標籤:其他
上一篇:java中常見的六種執行緒池詳解
下一篇:Java多執行緒之CAS
