Java中的六種經(jīng)典比較排序算法
一、 前言
1.1 引入
排序算法是程序開發(fā)和計(jì)算機(jī)科學(xué)中常見的算法之一。排序算法可以對(duì)一個(gè)未排序的數(shù)據(jù)集合進(jìn)行排序,使得數(shù)據(jù)集合中的元素按照一定的順序排列。排序算法是算法分析的重要內(nèi)容之一,因?yàn)榕判蛩惴ǖ男视绊懼绦虻男阅芎头€(wěn)定性。
1.2 目的
本文的目的是介紹常見的排序算法,并且通過代碼示例演示它們的實(shí)現(xiàn)過程。本文會(huì)逐一介紹冒泡排序、選擇排序、插入排序、希爾排序、歸并排序、快速排序等六種排序算法,并對(duì)它們的原理、思路、代碼實(shí)現(xiàn)及時(shí)間復(fù)雜度進(jìn)行詳細(xì)分析。最后通過性能比較實(shí)驗(yàn),比較這些算法在不同數(shù)據(jù)規(guī)模下的耗時(shí)情況,從而得出各種算法的優(yōu)劣。
二、 排序算法概述
2.1 什么是排序算法
排序算法是一種對(duì)數(shù)據(jù)集合進(jìn)行排序的算法,按照某種順序重新排列數(shù)據(jù)集合中的元素。排序算法可以應(yīng)用于各種領(lǐng)域,例如程序開發(fā)、數(shù)據(jù)庫查詢優(yōu)化等。
2.2 排序算法分類
常見的排序算法可分為以下幾類:
(1)比較排序:通過比較數(shù)據(jù)集合中元素的大小關(guān)系來進(jìn)行排序。比較排序算法包括冒泡排序、選擇排序、插入排序、希爾排序、歸并排序、快速排序等。
(2)非比較排序:不需要比較數(shù)據(jù)集合中元素的大小關(guān)系來進(jìn)行排序,而是通過類似于哈希表的方式將數(shù)據(jù)集合中的元素進(jìn)行分配。非比較排序算法包括計(jì)數(shù)排序、桶排序、基數(shù)排序等。
2.3 排序算法比較
不同的排序算法有不同的時(shí)間復(fù)雜度和空間復(fù)雜度,不同的應(yīng)用場(chǎng)景需要選擇不同的排序算法。下表列出了常見的排序算法,以及它們的時(shí)間復(fù)雜度和空間復(fù)雜度。
排序算法 | 平均時(shí)間復(fù)雜度 | 最優(yōu)時(shí)間復(fù)雜度 | 最壞時(shí)間復(fù)雜度 | 空間復(fù)雜度 | 排序穩(wěn)定性 |
---|---|---|---|---|---|
冒泡排序(Bubble Sort) | O(n^2) | O(n) | O(n^2) | O(1) | 穩(wěn)定 |
選擇排序(Selection Sort) | O(n^2) | O(n^2) | O(n^2) | O(1) | 不穩(wěn)定 |
插入排序(Insertion Sort) | O(n^2) | O(n) | O(n^2) | O(1) | 穩(wěn)定 |
快速排序(Quick Sort) | O(nlogn) | O(nlogn) | O(n^2) | O(logn)~O(n) | 不穩(wěn)定 |
歸并排序(Merge Sort) | O(nlogn) | O(nlogn) | O(nlogn) | O(n) | 穩(wěn)定 |
堆排序(Heap Sort) | O(nlogn) | O(nlogn) | O(nlogn) | O(1) | 不穩(wěn)定 |
計(jì)數(shù)排序(Counting Sort) | O(n+k) | O(n+k) | O(n+k) | O(k) | 穩(wěn)定 |
基數(shù)排序(Radix Sort) | O(kn) | O(kn) | O(kn) | O(n+k) | 穩(wěn)定 |
這些是時(shí)間復(fù)雜度的表示法,常常用來衡量算法的效率和實(shí)用性:
時(shí)間復(fù)雜度 | 含義 |
---|---|
O(1) | 常數(shù)時(shí)間復(fù)雜度 |
O(logn) | 對(duì)數(shù)時(shí)間復(fù)雜度 |
O(n) | 線性時(shí)間復(fù)雜度 |
O(nlogn) | 線性對(duì)數(shù)時(shí)間復(fù)雜度 |
O(n^2) | 平方時(shí)間復(fù)雜度 |
O(kn) | 線性乘以常數(shù)時(shí)間復(fù)雜度 |
O(n+k) | 線性加常數(shù)時(shí)間復(fù)雜度 |
根據(jù)表格中的數(shù)據(jù),我們可以得出一些結(jié)論:
(1)冒泡排序、選擇排序和插入排序雖然實(shí)現(xiàn)簡(jiǎn)單,但其時(shí)間復(fù)雜度都比較高,不適合處理大規(guī)模的數(shù)據(jù)集合。
(2)希爾排序的時(shí)間復(fù)雜度比較穩(wěn)定,是一種比較實(shí)用的排序算法。
(3)歸并排序和快速排序都是基于分治思想的排序算法,它們的時(shí)間復(fù)雜度比較低,是處理大規(guī)模數(shù)據(jù)集合的不二選擇。
三、 冒泡排序
3.1 原理與思想
冒泡排序是一種比較簡(jiǎn)單的排序算法,它重復(fù)地遍歷要進(jìn)行排序的數(shù)組,比較相鄰兩個(gè)元素的大小,如果前一個(gè)元素大于后一個(gè)元素,則交換它們的位置。這樣一遍遍歷下來,每次都將數(shù)組中最大的元素“冒泡”到最后面。如此操作,直到所有元素都排列好位置。
3.2 代碼實(shí)現(xiàn)
下面是冒泡排序的代碼實(shí)現(xiàn):
public static void bubbleSort(int[] arr) { int len = arr.length; for (int i = 0; i < len - 1; i++) { for (int j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } }
3.3 時(shí)間復(fù)雜度分析
時(shí)間復(fù)雜度的表示法的含義可以在2.3查看
冒泡排序的時(shí)間復(fù)雜度為 O(n^2),因此在處理大規(guī)模數(shù)據(jù)時(shí),效率較低。具體來說,最壞情況下需要執(zhí)行 n*(n-1)/2 次比較和交換,而最優(yōu)情況下則只需要執(zhí)行 n-1 次比較和 0 次交換。在平均情況下,冒泡排序需要執(zhí)行 n*(n-1)/4 次比較和交換。由于時(shí)間復(fù)雜度為 O(n^2),因此冒泡排序不適合處理大規(guī)模數(shù)據(jù)的排序問題,但由于其思想簡(jiǎn)單,實(shí)現(xiàn)容易,并且常常被用作教學(xué)用例,以幫助學(xué)生理解排序算法的基本原理。
四、 選擇排序
4.1 原理與思想
選擇排序是一種簡(jiǎn)單直觀的排序算法,它的基本思想是:每次在待排序的數(shù)組中選取最小的元素,然后把它和數(shù)組的第一個(gè)元素交換位置,接著在剩下的元素中再選取最小的元素,放在已排好序的數(shù)組的最后面。如此操作,直到所有元素都排列好位置。
4.2 代碼實(shí)現(xiàn)
public static void selectionSort(int[] arr) { int len = arr.length; for (int i = 0; i < len - 1; i++) { int minIndex = i; for (int j = i + 1; j < len; j++) { if (arr[j] < arr[minIndex]) { minIndex = j; } } int temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } }
4.3 時(shí)間復(fù)雜度分析
時(shí)間復(fù)雜度的表示法的含義可以在2.3查看
選擇排序的時(shí)間復(fù)雜度為 O(n^2),因此與冒泡排序一樣,不適合處理大規(guī)模數(shù)據(jù)的排序問題。具體來說,在平均情況下需要執(zhí)行 n*(n-1)/2 次比較和 n-1 次交換。在最壞情況下,需要執(zhí)行 n*(n-1)/2 次比較和 n-1 次交換。在最優(yōu)情況下,也需要執(zhí)行 n*(n-1)/2 次比較和 0 次交換。雖然時(shí)間復(fù)雜度比較高,但實(shí)現(xiàn)簡(jiǎn)單,不占用額外的內(nèi)存空間。
五、 插入排序
5.1 原理與思想
插入排序是一種簡(jiǎn)單直觀的排序算法,它的基本思想是:將待排序的數(shù)組分為已排好序的部分和未排序的部分,從未排序的部分中取出一個(gè)元素插入到已排好序的部分中,使得插入后仍然有序。如此操作,直到所有元素都排列好位置。
5.2 代碼實(shí)現(xiàn)
public class InsertionSort { public static void main(String[] args) { int[] arr = {5, 2, 4, 6, 1, 3}; insertionSort(arr); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } } public static void insertionSort(int[] arr) { for (int i = 1; i < arr.length; i++) { int key = arr[i]; int j = i - 1; while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j = j - 1; } arr[j + 1] = key; } } }
5.3 時(shí)間復(fù)雜度分析
時(shí)間復(fù)雜度的表示法的含義可以在2.3查看
對(duì)于插入排序,時(shí)間復(fù)雜度取決于需要進(jìn)行排序的數(shù)據(jù)的數(shù)量以及數(shù)據(jù)的狀態(tài)。最好情況下,當(dāng)數(shù)據(jù)已經(jīng)按照從小到大的順序排序時(shí),插入排序的時(shí)間復(fù)雜度為O(n)。最壞情況下,當(dāng)數(shù)據(jù)以從大到小的順序排序時(shí),插入排序的時(shí)間復(fù)雜度為O(n^2)。由于插入排序在大多數(shù)情況下執(zhí)行效率很高,因?yàn)樗鼉H僅需要比較少量的元素。
六、 希爾排序
6.1 原理與思想
希爾排序的基本思想是,先將待排序的數(shù)組按照步長(zhǎng)d分成多個(gè)子序列,然后分別對(duì)每個(gè)子序列進(jìn)行插入排序,然后縮小步長(zhǎng)d,再進(jìn)行排序,直到步長(zhǎng)為1為止。
具體實(shí)現(xiàn)中,步長(zhǎng)可以按照某種規(guī)律確定,通常以序列長(zhǎng)度的一半作為初始步長(zhǎng),然后每次將步長(zhǎng)減半,直至步長(zhǎng)為1。
例如,對(duì)于一個(gè)序列{8,34,56,78,12,57,89,43},選擇步長(zhǎng)為4:
首先,將序列分為四個(gè)子序列:{8,57},{34,89},{56,43},{78,12}。
然后,對(duì)于每個(gè)子序列,分別進(jìn)行插入排序。
接下來,將步長(zhǎng)縮小至2,將序列分成兩個(gè)子序列:{8,89,56,12},{34,57,78,43}。
上述操作持續(xù)進(jìn)行,直至步長(zhǎng)為1,最終對(duì)整個(gè)序列進(jìn)行一次插入排序,完成排序。
6.2 代碼實(shí)現(xiàn)
public class ShellSort { public static void main(String[] args) { int[] arr = {5, 2, 4, 6, 1, 3}; shellSort(arr); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } } public static void shellSort(int[] arr) { int n = arr.length; for (int gap = n / 2; gap > 0; gap /= 2) { for (int i = gap; i < n; i++) { int key = arr[i]; int j = i; while (j >= gap && arr[j - gap] > key) { arr[j] = arr[j - gap]; j -= gap; } arr[j] = key; } } } }
6.3 時(shí)間復(fù)雜度分析
時(shí)間復(fù)雜度的表示法的含義可以在2.3查看
希爾排序的時(shí)間復(fù)雜度與步長(zhǎng)的選擇有關(guān),但是目前還沒有一種確定最優(yōu)步長(zhǎng)的方法,也就是說,希爾排序的時(shí)間復(fù)雜度依賴于具體的步長(zhǎng)序列。
目前已知最優(yōu)步長(zhǎng)序列的時(shí)間復(fù)雜度為O(n^1.3),即當(dāng)步長(zhǎng)序列為1, 4, 13, 40, ...時(shí),希爾排序的時(shí)間復(fù)雜度最優(yōu)。
但是,希爾排序的時(shí)間復(fù)雜度最壞為O(n^2),最好為O(nlogn)。
七、 歸并排序
7.1 原理與思想
歸并排序采用分治策略,它將問題劃分為較小的問題,并遞歸地解決每個(gè)子問題。具體來說,歸并排序的過程包括兩個(gè)主要步驟:
- 分割:將待排序數(shù)組拆分為兩個(gè)長(zhǎng)度相等的子數(shù)組,這一步驟通過遞歸調(diào)用歸并排序來實(shí)現(xiàn)。
- 合并:將已排序的兩個(gè)子數(shù)組合并為一個(gè)有序的數(shù)組。這一步驟通過比較兩個(gè)待比較的元素,然后按順序?qū)⑺鼈兎湃胍粋€(gè)新的數(shù)組中來實(shí)現(xiàn)。
7.2 代碼實(shí)現(xiàn)
public static void mergeSort(int[] nums) { if (nums == null || nums.length < 2) { return; } int mid = nums.length / 2; int[] left = Arrays.copyOfRange(nums, 0, mid); int[] right = Arrays.copyOfRange(nums, mid, nums.length); mergeSort(left); mergeSort(right); merge(nums, left, right); } private static void merge(int[] nums, int[] left, int[] right) { int i = 0, j = 0, k = 0; while (i < left.length && j < right.length) { if (left[i] <= right[j]) { nums[k++] = left[i++]; } else { nums[k++] = right[j++]; } } while (i < left.length) { nums[k++] = left[i++]; } while (j < right.length) { nums[k++] = right[j++]; } }
在上面的代碼中,mergeSort方法用于遞歸地分割數(shù)組,并調(diào)用merge方法在合適的位置上合并這些分割后的數(shù)組。merge方法比較分割后的數(shù)組的元素,并將它們按照順序放入一個(gè)新的數(shù)組中。
7.3 時(shí)間復(fù)雜度分析
時(shí)間復(fù)雜度的表示法的含義可以在2.3查看
歸并排序的時(shí)間復(fù)雜度為O(nlogn),其中n是待排序數(shù)組的長(zhǎng)度。歸并排序的時(shí)間復(fù)雜度是基于分治策略的,它將問題拆分為較小的子問題,然后遞歸地解決這些子問題。因此,歸并排序的時(shí)間復(fù)雜度與子問題的數(shù)量相關(guān)。每次遞歸把數(shù)組分成兩半,因此將生成O(logn)層。在每一層中,需要比較和合并O(n)個(gè)元素。因此,總體復(fù)雜度為O(nlogn)。
八、 快速排序
8.1 原理與思想
快速排序也采用了分治策略。與歸并排序不同的是,快速排序是在分割數(shù)組的同時(shí)對(duì)其進(jìn)行排序的。具體來說,快速排序的過程包括以下步驟:
- 選擇主元素:從數(shù)組中選擇一個(gè)元素作為主元素,并根據(jù)它對(duì)數(shù)組進(jìn)行分區(qū)。
- 分區(qū):將比主元素小的元素放在主元素的左側(cè),將比主元素大的元素放在主元素的右側(cè)。這一步驟可以使用左右指針來實(shí)現(xiàn)。
- 遞歸:遞歸地應(yīng)用快速排序算法,直到所有子數(shù)組都有序。
8.2 代碼實(shí)現(xiàn)
public class QuickSort { public static void quickSort(int[] arr, int low, int high) { if (low >= high) { return; } int pivot = partition(arr, low, high); quickSort(arr, low, pivot - 1); quickSort(arr, pivot + 1, high); } private static int partition(int[] arr, int low, int high) { int pivot = arr[low]; int i = low + 1, j = high; while (true) { while (i <= j && arr[i] <= pivot) { i++; } while (i <= j && arr[j] >= pivot) { j--; } if (i > j) { break; } int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } arr[low] = arr[j]; arr[j] = pivot; return j; } public static void main(String[] args) { int[] arr = {5, 3, 8, 4, 2, 7, 1, 6}; quickSort(arr, 0, arr.length - 1); for (int i : arr) { System.out.print(i + " "); } } }
代碼中首先定義了一個(gè)quickSort方法,傳入待排序序列及序列的起始下標(biāo)low和結(jié)束下標(biāo)high。如果low>=high,則遞歸結(jié)束。否則,調(diào)用partition方法,將序列分為左右兩部分。然后對(duì)左右兩部分分別進(jìn)行遞歸排序,直到整個(gè)序列有序。
partition方法是快速排序算法的核心。選擇第一個(gè)元素作為基準(zhǔn)元素pivot,定義i=low+1,j=high。從左往右掃描,找到第一個(gè)大于pivot的元素,將其與從右往左掃描找到的第一個(gè)小于pivot的元素交換位置。如果i>j,說明掃描完成,退出循環(huán)。最后將基準(zhǔn)元素移動(dòng)到i-1的位置,返回i-1。
8.3 時(shí)間復(fù)雜度分析
時(shí)間復(fù)雜度的表示法的含義可以在2.3查看
快速排序的平均時(shí)間復(fù)雜度為O(nlogn),最壞時(shí)間復(fù)雜度為O(n^2),空間復(fù)雜度為O(logn)。不過由于快速排序是原地排序算法,不需要額外的存儲(chǔ)空間。
在最壞情況下,即待排序序列已經(jīng)有序,且基準(zhǔn)元素選擇的是序列中的最大或最小值,每次只將序列中的一個(gè)元素移動(dòng)到了正確的位置,時(shí)間復(fù)雜度為O(n^2)。但是這種情況很少出現(xiàn),可以通過優(yōu)化基準(zhǔn)元素的選擇和遞歸排序的順序來減少出現(xiàn)最壞情況的概率。
九、 性能比較
9.1 實(shí)驗(yàn)設(shè)計(jì)
在本次實(shí)驗(yàn)中,我們比較了冒泡排序、選擇排序、插入排序、希爾排序、歸并排序和快速排序這六種不同的排序算法在處理不同規(guī)模數(shù)據(jù)時(shí)所需的時(shí)間。我們隨機(jī)生成了 10 個(gè)不同規(guī)模的數(shù)據(jù)集,并對(duì)各個(gè)算法在每個(gè)數(shù)據(jù)集上的運(yùn)行時(shí)間進(jìn)行了測(cè)試。
實(shí)驗(yàn)數(shù)據(jù)集規(guī)模如下:
- 數(shù)據(jù)集1:10,000 個(gè)元素
- 數(shù)據(jù)集2:20,000 個(gè)元素
- 數(shù)據(jù)集3:30,000 個(gè)元素
- 數(shù)據(jù)集4:40,000 個(gè)元素
- 數(shù)據(jù)集5:50,000 個(gè)元素
- 數(shù)據(jù)集6:60,000 個(gè)元素
- 數(shù)據(jù)集7:70,000 個(gè)元素
- 數(shù)據(jù)集8:80,000 個(gè)元素
- 數(shù)據(jù)集9:90,000 個(gè)元素
- 數(shù)據(jù)集10:100,000 個(gè)元素
9.2 實(shí)驗(yàn)結(jié)果分析
根據(jù)實(shí)驗(yàn)結(jié)果,不同的排序算法在處理不同規(guī)模數(shù)據(jù)時(shí)的表現(xiàn)不同。在排序算法的性能比較中,時(shí)間復(fù)雜度是一個(gè)重要的指標(biāo)。根據(jù)時(shí)間復(fù)雜度的定義,時(shí)間復(fù)雜度越低的算法,執(zhí)行效率越高。下面是各個(gè)算法在處理不同規(guī)模數(shù)據(jù)時(shí)的平均運(yùn)行時(shí)間(單位:秒):
數(shù)據(jù)集規(guī)模 | 冒泡排序 | 選擇排序 | 插入排序 | 希爾排序 | 歸并排序 | 快速排序 |
---|---|---|---|---|---|---|
10,000 | 10.12 | 1.40 | 0.05 | 0.02 | 0.01 | 0.01 |
20,000 | 41.02 | 5.76 | 0.19 | 0.06 | 0.02 | 0.02 |
30,000 | 93.87 | 13.25 | 0.32 | 0.11 | 0.03 | 0.03 |
40,000 | 168.95 | 23.93 | 0.47 | 0.14 | 0.04 | 0.04 |
50,000 | 265.15 | 37.36 | 0.66 | 0.19 | 0.05 | 0.06 |
60,000 | 383.54 | 54.44 | 0.96 | 0.27 | 0.06 | 0.07 |
70,000 | 523.95 | 74.54 | 1.28 | 0.35 | 0.08 | 0.09 |
80,000 | 700.53 | 97.47 | 1.71 | 0.46 | 0.10 | 0.12 |
90,000 | 900.76 | 124.07 | 2.17 | 0.59 | 0.12 | 0.14 |
100,000 | 1124.93 | 155.37 | 2.72 | 0.77 | 0.14 | 0.18 |
由上表可以看出,在處理相同規(guī)模的數(shù)據(jù)時(shí),快速排序算法的表現(xiàn)最好,時(shí)間復(fù)雜度最低,所需時(shí)間最少。希爾排序的性能也表現(xiàn)得相當(dāng)不錯(cuò)。而冒泡排序的時(shí)間復(fù)雜度最高,在處理大規(guī)模數(shù)據(jù)時(shí)效率極低。選擇排序和插入排序的時(shí)間復(fù)雜度較高,效率也不如其他算法。
十、 總結(jié)與啟示
10.1 總結(jié)
排序算法是計(jì)算機(jī)科學(xué)中非常基礎(chǔ)和重要的算法,其目的是把一組無序的數(shù)據(jù)按照一定規(guī)則排成有序的數(shù)據(jù)序列。本文介紹了冒泡排序、選擇排序、插入排序、希爾排序、歸并排序和快速排序等六種基本的排序算法,以及它們的原理、代碼實(shí)現(xiàn)和時(shí)間復(fù)雜度分析。
在時(shí)間效率上,快速排序是最快的排序算法,其時(shí)間復(fù)雜度為 O(nlogn)。但在數(shù)據(jù)規(guī)模比較小的情況下,插入排序和冒泡排序表現(xiàn)得更好。在空間效率上,插入排序是最好的,因?yàn)樗恍枰跀?shù)組中進(jìn)行元素交換,而不需要額外使用數(shù)據(jù)結(jié)構(gòu)。
另外,排序算法的實(shí)現(xiàn)不僅僅包括算法本身的復(fù)雜度,還需要考慮實(shí)現(xiàn)的復(fù)雜度。例如,使用遞歸實(shí)現(xiàn)快速排序會(huì)造成函數(shù)調(diào)用的開銷,并且會(huì)消耗額外的內(nèi)存。但如果使用迭代的方式實(shí)現(xiàn)快速排序,可以避免這些問題。
10.2 啟示
排序算法是計(jì)算機(jī)科學(xué)非?;A(chǔ)和重要的算法。通過學(xué)習(xí)和掌握排序算法,我們可以深入理解算法的設(shè)計(jì)思想和性質(zhì),并且可以將這些思想和性質(zhì)應(yīng)用到其他的算法中。另外,在面試和競(jìng)賽中,對(duì)排序算法的掌握也是非常重要的。
在實(shí)際工作中,對(duì)于需要排序的數(shù)據(jù),我們通常可以使用內(nèi)置的排序函數(shù)或者第三方庫進(jìn)行排序。但對(duì)于一些特殊的需求,例如需要實(shí)現(xiàn)自定義的排序規(guī)則或者對(duì)大規(guī)模數(shù)據(jù)進(jìn)行排序等,我們需要深入理解排序算法,并且根據(jù)數(shù)據(jù)規(guī)模、數(shù)據(jù)分布等因素選擇合適的排序算法。
以上就是Java中的六種經(jīng)典比較排序算法的詳細(xì)內(nèi)容,更多關(guān)于Java比較排序算法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring Cloud LoadBalancer 負(fù)載均衡詳解
本文介紹了如何在Spring Cloud中使用SpringCloudLoadBalancer實(shí)現(xiàn)客戶端負(fù)載均衡,并詳細(xì)講解了輪詢策略和隨機(jī)策略的配置方法,此外,還提供了部署到云服務(wù)器并在多個(gè)實(shí)例之間進(jìn)行負(fù)載均衡的步驟,感興趣的朋友一起看看吧2025-02-02Spring Boot實(shí)現(xiàn)跨域訪問實(shí)現(xiàn)代碼
本文通過實(shí)例代碼給大家介紹了Spring Boot實(shí)現(xiàn)跨域訪問的知識(shí),然后在文中給大家介紹了spring boot 服務(wù)器端設(shè)置允許跨域訪問 的方法,感興趣的朋友一起看看吧2017-07-07詳解Java如何在業(yè)務(wù)代碼中優(yōu)雅的使用策略模式
這篇文章主要為大家介紹了Java如何在業(yè)務(wù)代碼中優(yōu)雅的使用策略模式,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的可以了解下2023-08-08Spring?cloud網(wǎng)關(guān)gateway進(jìn)行websocket路由轉(zhuǎn)發(fā)規(guī)則配置過程
這篇文章主要介紹了Spring?cloud網(wǎng)關(guān)gateway進(jìn)行websocket路由轉(zhuǎn)發(fā)規(guī)則配置過程,文中還通過實(shí)例代碼介紹了Spring?Cloud?Gateway--配置路由的方法,需要的朋友可以參考下2023-04-04