? 作者:小胡_不糊涂
🌱 作者主頁:小胡_不糊涂的個人主頁
📀 收錄專欄:淺談Java
💖 持續更文,關注博主少走彎路,謝謝大家支持 💖
數組練習
- 1. 數組轉字符串
- 2. 數組拷貝
- 3. 求數組中的元素的平均值
- 4. 順序查找數組中指定元素
- 5. 二分查找數組中指定元素
- 6. 數組排序(冒泡排序)
- 7. 數組逆序

1. 數組轉字符串
toString()
:可以將Array 對象轉換為字符串。
//語法格式:
arraylist.toString()
實例1:
import java.util.Arrays;//調用Arrays類,包含了常用的數組操作
public class test {public static void main(String[] args) {int[] arr = {1,2,3,4,5,6};String newArr = Arrays.toString(arr);System.out.println(newArr);}
}
🍤 運行結果:
實例2:
import java.util.ArrayList;
public class test {public static void main(String[] args) {// 創建一個動態數組ArrayList<String> sites = new ArrayList<>();sites.add("Runoob");sites.add("Google");sites.add("Wiki");sites.add("Taobao");System.out.println("網站列表: " + sites);// 將ArrayList轉換為String類型String list = sites.toString();System.out.println("String: " + list);}
🍤 運行結果:
2. 數組拷貝
實例1:
import java.util.Arrays;
public class test {public static void func(){// newArr和arr引用的是同一個數組// 因此newArr修改空間中內容之后,arr也可以看到修改的結果int[] arr = {1,2,3,4,5,6};int[] newArr = arr;newArr[0] = 10;System.out.println("newArr: " + Arrays.toString(arr));
}
public static void main(String[] args) {func();}
🍤 圖解:
🍤 運行結果:
實例2:使用Arrays中copyOf方法完成數組的拷貝
import java.util.Arrays;
public class test {public static void func(){int[] arr = {1,2,3,4,5,6};int[] newArr = arr;// copyOf方法在進行數組拷貝時,創建了一個新的數組// arr和newArr引用的不是同一個數組arr[0] = 1;newArr = Arrays.copyOf(arr, arr.length);System.out.println("newArr: " + Arrays.toString(newArr));}public static void main(String[] args) {func();}}
🍤 圖解:
🍤 運行結果:
實例3:拷貝某個范圍
import java.util.Arrays;
public class test {public static void func(){int[] arr = {1,2,3,4,5,6};int[] newArr = arr;int[] newArr2 = Arrays.copyOfRange(arr, 2, 4);System.out.println("newArr2: " + Arrays.toString(newArr2));}public static void main(String[] args) {func();}
}
注: 數組當中存儲的是基本類型數據時,不論怎么拷貝基本都不會出現什么問題,但如果存儲的是引用數據類型,拷貝時需要考慮深淺拷貝的問題
模擬拷貝數組:
import java.util.Arrays;
public class test {//copyOf方法拷貝數組public static int[] copyOf(int[] arr) {int[] ret = new int[arr.length];for (int i = 0; i < arr.length; i++) {ret[i] = arr[i];}return ret;}public static void main(String[] args) {int[] a={1,4,5,6,9};int[] Array=copyOf(a);for(int i=0;i<Array.length;i++) {System.out.println(Array[i]);}}
🍤 運行結果:
3. 求數組中的元素的平均值
給定一個整型數組,求平均值
public class test {public static void main(String[] args) {int[] arr = {1,2,3,4,5};System.out.println(avg(arr));//輸出:3.0}public static double avg(int[] arr) {int sum = 0;for (int x : arr) {//遍歷數組sum += x;}return (double)sum / (double)arr.length;}
}
4. 順序查找數組中指定元素
給定一個數組,再給定一個元素,找出該元素在數組中的位置。
import java.util.Scanner;
public class test {public static void main(String[] args) {int[] arr = {1,2,3,10,5,6};Scanner scanner=new Scanner(System.in);//創建一個Scanner對象int num=scanner.nextInt();//讀取用戶輸入System.out.println(find(arr, num));}public static int find(int[] arr, int data) {for (int i = 0; i < arr.length; i++) {if (arr[i] == data) {return i;//返回下標}}return -1; // 表示沒有找到}
}
🍤 運行結果:
5. 二分查找數組中指定元素
二分查找僅適用于有序查找
什么是有序數組?
有序分為 “升序” 和 “降序”
如 1 2 3 4 , 依次遞增即為升序.
如 4 3 2 1 , 依次遞減即為降序
以升序數組為例,二分查找的思路是先取中間位置的元素,然后使用待查找元素與數組中間元素進行比較:
- 如果相等,即找到了返回該元素在數組中的下標
- 如果小于,以類似方式到數組左半側查找
- 如果大于,以類似方式到數組右半側查找
代碼示例:
import java.util.Scanner;
public class test {public static void main(String[] args) {int[] arr = {1,2,3,4,5,6};System.out.print("請輸入你要查找的數字:");Scanner scanner=new Scanner(System.in);//創建一個Scanner對象int num=scanner.nextInt();System.out.println(binarySearch(arr, num));}public static int binarySearch(int[] arr, int toFind) {int left = 0;int right = arr.length - 1;while (left <= right) {int mid = (left + right) / 2;if (toFind < arr[mid]) {// 去左側區間找right = mid - 1;} else if (toFind > arr[mid]) {// 去右側區間找left = mid + 1;} else {// 相等, 說明找到了return mid;}}// 循環結束, 說明沒找到return -1;}
}
🍤 運行結果:
🍩隨著數組元素個數越多, 二分的優勢就越大
二分查找–圖文詳解 - 這篇文章是用C語言介紹的二分查找,雖然語言不同,但思想都是一樣的,而且是以圖的形式詳細描述二分查找的過程,大家可以去看看~
6. 數組排序(冒泡排序)
給定一個數組,讓數組升序 (降序) 排序
算法思路: 假設排升序
- 將數組中相鄰元素從前往后依次進行比較,如果前一個元素比后一個元素大,則交換,一趟下來后最大元素就在數組的末尾
- 依次從上上述過程,直到數組中所有的元素都排列好
import java.util.Arrays;public class test {
public static void main(String[] args) {int[] arr = {9,5,7,8,6,6,7};;bubbleSort(arr);//調用方法System.out.println(Arrays.toString(arr));}public static void bubbleSort(int[] arr) {for (int i = 0; i < arr.length; i++) {for (int j = 1; j < arr.length-i; j++) {//前一個與后一個比較,可能的話需要交換位置if (arr[j-1] > arr[j]) {int tmp = arr[j - 1];arr[j - 1] = arr[j];arr[j] = tmp;}}} }
}
🍤 運行結果:
但是冒泡排序性能較低。在Java 中內置了更高效的排序算法:
import java.util.Arrays;public class test {public static void main(String[] args) {int[] arr = {9,5,7,8,6,6,7};Arrays.sort(arr);//升序排序System.out.println(Arrays.toString(arr));}
7. 數組逆序
給定一個數組,將里面的元素逆序排列
算法思路:
設定兩個下標,分別指向第一個元素和最后一個元素,交換兩個位置的元素,然后讓前一個下標自增,后一個下標自減,循環繼續即可。
import java.util.Arrays;public class test {public static void main(String[] args) {int[] arr = {1, 2, 3, 4};reverse(arr);System.out.println(Arrays.toString(arr));//將數組轉化為字符串輸出}public static void reverse(int[] arr) {int left = 0;//指向首元素int right = arr.length - 1;//指向最后一個元素while (left < right) {//交換元素位置int tmp = arr[left];arr[left] = arr[right];arr[right] = tmp;//移動下標left++;right--;}}
}
🍤 運行結果: