日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA进阶级开发之(Array工具类)

發布時間:2024/7/23 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA进阶级开发之(Array工具类) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

常見的算法:

1、排序算法:

2、查找算法:

3、算法:

4、冒泡排序算法(理論)

4、選擇排序算法(理論)

5、數組的元素查找:

6、介紹一下java.util.Arrays工具類


?

?

我們學習數組的時候,需要對數組的數據進行一下處理,例如排序和查找這種簡單的原理我們需要去學會怎么去用自己寫的代碼去運行,

但是呢!JAVA的類庫里面其實已經封裝好了一個叫做Array的工具類,需要用到的時候就進行調用,因此不用我們太過于去了解工具類里面的源碼,

程序員只需要知道如何調用工具類為自己服務就行,效率會提高很多!,接下來先了解一下常見的數組算法Array工具類

?

數組:

常見的算法:

?

1、排序算法:

冒泡排序算法

選擇排序算法

?

2、查找算法:

二分法查找

?

3、算法:

實際上在java中不需要精通算法,因為java中已經封裝好了算法,要排序的時候就進行調用方法就行

例如:

java中提供了一個數組工具類

java.util.Arrays

Array工具類

既然是工具類,意味著java已經幫助程序員完成了封裝等工作,這個工具類是帶有static關鍵字的,因此調用的時候不需要頻繁的new對象,直接類名.進行調用即可

可以在idea中雙敲shift鍵位,調出搜索框后輸入 Arrarys 找到此類即可

其中有一個sort() 方法,可以排序

這個方法是靜態方法,直接使用類名調用就行

?

注意:工具類中的方法大部分是靜態方法

?

4、冒泡排序算法(理論)

參與比較的數據:9 8 10 7 6 0 11

第一次循環:

8 9 10 7 6 0 11(1次比較:交換)

8 9 10 7 6 0 11(2次比較:不交換)

8 9 7?10 6 0 11(3次比較:交換)

8 9 7 6 10 0 11(4次比較:交換)

8 9 7 6 0 10 11(5次比較:不交換)

8 9 7 6 0 10 11(6次比較:交換)

最終冒出最大數據在右邊:11

此時參與比較的數據:8 9 7 6 0 10

第二次循環:

8 9 7 6 0 10(1次比較:不交換)

8 7 9 6 0 10(2次比較:交換)

8 7 6 9 0 10(3次比較:交換)

8 7 6 0 9 10(4次比較:交換)

8 7 6 0 9 10(5次比較:不交換)

此時參與比較的數據:8 7 6 0 9

第三次循環:

7 8 6 0 9(1次比較:交換)

7 6 8 0 9(2次比較:交換)

7 6 0 8 9(3次比較:交換)

7 6 0 8 9(4次比較:不交換)

此時參與比較的數據:7 6 0 8

第四次循環:

6 7 0 8(1次比較:交換)

6 0 7 8(2次比較:交換)

6 0 7 8(3次比較:不交換)

此時參與比較的數據:6 0 7

第五次循環:

0 6 7(1次比較:交換)

0 6 7(2次比較:不交換)

此時參與比較的數據:0 6

第六次循環:

0 6(1次比較:不交換)

?

演示冒泡算法的代碼:

package com.lbj.javase.array;/*** @author LBJ* @version V1.0* @Package com.lbj.javase.array* @date 2021/2/23 22:08* @Copyright 公司*/ public class BubbleSort {public static void main(String[] args) {int[] array1={9,8,10,7,6,0,11};//使用冒泡算法進行排序 // for (int i = 0; i <array1.length-1;i++) { // // }//上面使用的循環體不如下面使用的效果,其實原理是一樣的//外層控制循環次數,內層控制比較次數for (int i = array1.length-1; i >0; i--) {for (int j = 0; j <i; j++) {if (array1[j]>array1[j+1]){//用一個臨時數據保存交換數據int temp;temp=array1[j];array1[j]=array1[j+1];array1[j+1]=temp;}}}//完成循環后,遍歷輸出冒泡算法排序好的數組for (int i = 0; i <array1.length; i++) {System.out.println(array1[i]);}} }

?

?

?

?

4、選擇排序算法(理論)

選擇排序比冒泡排序的效率高

高在交換位置的次數上

選擇排序的交換位置是有意義的

?

循環一次,然后找出參加比較的這堆數據中最小的,拿著這個最小的值和最前面的數據交換位置

?

參與比較的數據:3 1 6 2 5(這一堆參與比較的數據中最左邊的元素下標是0)

第一次循環之后的結果是:

1 3 6 2 5

?

參與比較的數據:3 6 2 5(這一堆參與比較的數據中最左邊的元素下標是1)

第二次循環之后的結果是:

2 6 3 5

?

參與比較的數據:3 6 5(這一堆參與比較的數據中最左邊的元素下標是2)

第三次循環之后的結果是:

3 6 5

?

參與比較的數據:6? 5(這一堆參與比較的數據中最左邊的元素下標是3)

第四次循環之后的結果是:

5 6

?

注意:5條數據,循環4次

?

上機演示:

package com.lbj.javase.array;/*** @author LBJ* @version V1.0* @Package com.lbj.javase.array* @date 2021/3/2 16:09* @Copyright 公司* 關鍵點:選擇排序的關鍵在于,你怎么找出一堆數據中最小的*/ public class SelectSort {public static void main(String[] args) {int[] array1={3,1,6,2,5};//count用來計算比較次數int count=0;int count2=0;//選擇排序//5條數據循環4次(外層循環4次)for (int i = 0; i <array1.length-1; i++) {//i的值是0 1 2 3//i正好是參加比較的這堆數據中,最左邊那個元素的下標//i是一個參與比較的這堆數據中心的起點下標//假設起點i下標位置上的元素是最小的(關鍵點),這一步是為了把min最小值確定下來int min = i;for (int j = i + 1; j < array1.length; j++) {//count是用來計算元素的比較次數count++;if (array1[j] < array1[min]) {//如果if()里面的內容成立,那么此時最小值的元素是jmin = j;}}//當i和min相等時,表示最初猜測是對的//當i和min不相等時,表示最初猜測是錯的,有比這個元素更小的元素//需要拿著這個更小的元素和左邊的元素交換位置if (min != i) {//表示存在更小的數據//arrary1[min] 最小的數據//arrary1[i] 最前面的數據int temp;temp = array1[min];array1[min] = array1[i];array1[i] = temp;//統計交換位置的次數count2++;}}//冒泡排序和選擇排序比較的次數沒變//交換位置的次數減少了System.out.println("比較次數"+count);System.out.println("交換次數"+count2);//遍歷輸出排序好的數組for (int j = 0; j < array1.length; j++) {System.out.println(array1[j]);}}}

結果:

?

?

5、數組的元素查找:

數組的元素查找有兩種方式:

第一種方式:一個一個找,直到找到為止

第二種方式:二分法算法查找,效率較高

?

第一種方式示例:

package com.lbj.javase.array;public class ArraySearch {public static void main(String[] args) {int[] arr={1,2,3,4,5,6};//需求,要求找出數組元素為5的下標//用第一種方式,一個個找for (int i = 0; i <arr.length; i++) {if (arr[i]==5){System.out.println("找到數據5的下標為"+i);return;}}System.out.println("找不到數據為5");} }

第一種方法改進(封裝成為方法):

package com.lbj.javase.array;/*** @author LBJ* @version V1.0* @Package com.lbj.javase.array* @date 2021/3/2 20:43* @Copyright 公司** 數組的元素查找* 數組的元素查找有兩種方式:* 第一種方式:一個一個找,直到找到為止* 第二種方式:二分法算法查找,效率較高*/ public class ArraySearch {public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5, 6};//需求,要求找出數組元素為5的下標//用第一種方式,一個個找 // for (int i = 0; i <arr.length; i++) { // if (arr[i]==5){ // System.out.println("找到數據5的下標為"+i); // return; // } // } // System.out.println("找不到數據為5");//改進:最好以上的程序封裝一個方法//思考:傳什么參數?返回什么值?//傳什么:第一個參數是數組,第二個參數是被查找的元素//返回值:返回被查找這個元素的下標,如果找不到就返回-1表示不存在int index = arraySearch(arr, 5);System.out.println("你想找的元素5下標為"+index);if (index == -1) {System.out.println("你想找的數組不存在");}}/*** 從數組中檢索某個元素的下標* @param arr 被檢索的數組* @param ele 被檢索的元素* @return 大于等于0的數表示元素的下標,-1表示該元素不存在*/public static int arraySearch(int[] arr, int ele) {for (int i = 0; i < arr.length; i++) {if (ele == arr[i]) {return i;}}return -1;} }

?

?

第二種方式(二分法查找):

一維數組int[ ] arr={10(下標0),11,12,13,14,15,16,17,18,19,20(下標10)};? ? ? ? ? ? ? ? ? ? ? ?偽代碼

要求:通過二分法查找,找出18這個元素的下標

(0+10)/2? ? ? ? ? ? ? ? ?--> 算出中間元素的下標:5

?

拿著中間這個元素和目標要查找的元素進行對比:

中間元素是:arr[5]? ?--> 15

由于:15<18? ? ? ? ? 18是被查找的元素

被查找的元素18在目前中間元素15的右邊

所以開始元素的下標從0變成(5+1)

?

再重新計算一個中間元素的下標:

開始下標是:5+1

結束下標是:10

計算:(6+10)/2? ? --> 8

8下標對應的元素arr[8]剛好是18

找到的中間元素正好和被找的元素18相等,表示找到了,下標為8

?

注意:

二分法查找算法是基于排序的基礎上的(沒有排序好的數組不能用二分法查找)

?

二分法查找終止條件:

一直折半,直到中間的那個元素恰好是被查找的元素

?

缺點:

如果一個元素剛好一直在最后一個,二分法會很浪費系統資源查找

?

上機演示:

package com.lbj.javase.array;/*** @author LBJ* @version V1.0* @Package com.lbj.javase.array* @date 2021/3/4 20:32* @Copyright 公司*/ public class ArrayUtil {public static void main(String[] args) {int[] arr={2,5,6,8,9,12,23,45,56,78,89};//使用二分法查找元素5的下標int index=binarySearch1(arr,6);System.out.println(index==-1?"該元素不存在":"該元素6的下標為"+index);}public static int binarySearch1(int[] arr, int ele) {//開始元素的下標int begin=0;//結束元素的下標int end=arr.length-1;//開始元素下標只要在結束元素下標的左邊,就有機會繼續循環while (begin<=end){//中間元素的下標int mid=(begin+end)/2;if (arr[mid]<ele){//目標元素在中間元素右邊//重新賦值begin=mid+1;}else if (arr[mid]==ele){//目標元素和中間元素相等return mid;}else if (ele<arr[mid]){//目標元素在中間元素左邊end=mid-1;}}return -1;} }

?

實驗結果:

?

?

6、介紹一下java.util.Arrays工具類

工具類里面所有方法都是靜態方法,直接類名.工具類方法,進行調用

主要使用的是兩個方法:二分法查找,排序

以后要學會自己看開發文檔,不要死記硬背

?

上機演示:

package com.lbj.javase.array;import java.util.Arrays;/*** @author LBJ* @version V1.0* @Package com.lbj.javase.array* @date 2021/3/5 12:08* @Copyright 公司*/ public class ArrayTest12 {public static void main(String[] args) {int[] arr={3,5,6,9,12,32,54,4,8,9};//使用工具類對數組進行排序Arrays.sort(arr);//遍歷輸出for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}//使用工具類對數組進行二分法查找(建立在已經排序完成的基礎上)int index=Arrays.binarySearch(arr,8);System.out.println(index==-1?"數組中沒有此數據":"數組中元素8的下標是"+index);}}

?

?

演示結果:

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的JAVA进阶级开发之(Array工具类)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。