java基礎之數組常用操作

来源:http://www.cnblogs.com/duanrantao/archive/2017/06/02/6926233.html
-Advertisement-
Play Games

常用的對數組進行的操作 1、求數組中最大值,最小值 思路:假設下標為0的元素是最大值,遍曆數組,依次跟max進行比較,如果有元素比這個max還大,則把這個值賦給max。最小值同樣 2、查找數組中是否存在某個元素 (2)、用二分查找法查找數組中是否存在某個元素 前提:待查找的數組必須是有序的(大小有序 ...


常用的對數組進行的操作

1、求數組中最大值,最小值

思路:假設下標為0的元素是最大值,遍曆數組,依次跟max進行比較,如果有元素比這個max還大,則把這個值賦給max。最小值同樣

 1 public class TestArray{
 2     public static void main(String[] args){
 3         int[] arr={23,45,234,576,34,87,34,12,67};
 4         int max=arr[0];
 5         int min=arr[0];
 6         for(int i=0;i<arr.length;i++){
 7             if(arr[i]>max){
 8                 max=arr[i];
 9             }
10             if(arr[i]<min){
11                 min=arr[i];
12             }
13         }
14         System.out.println("數組中最大值為:"+max);
15         System.out.println("數組中最小值為:"+min);
16     }
17 }

 

2、查找數組中是否存在某個元素

 1 import java.util.Scanner;
 2 public class TestArray{
 3     public static void main(String[] args){
 4         Scanner in=new Scanner(System.in);
 5         int[] arr={23,45,234,576,34,87,34,12,67};
 6         System.out.println("請輸入你要查找的元素");
 7         int element=in.nextInt();
 8         int i,flag=0;
 9         for(i=0;i<arr.length;i++){
10             if(arr[i]==element){
11                 flag=1;
12                 break;
13             }
14         }
15         if(flag==1){
16             System.out.println("你要查找的元素的下標為:"+i);
17         }else{
18             System.out.println("你要查找的元素不存在");
19         }
20     }
21 }

(2)、用二分查找法查找數組中是否存在某個元素

    前提:待查找的數組必須是有序的(大小有序)

    原理:將待查找的元素與數組中中間下標的元素進行比較,如果大於中間元素,去右邊查找,小於中間元素,去左邊查找。

 1 public static int binarySearch(int[] arr,int ele){
 2         int left=0;
 3         int right=arr.length-1;
 4         int mid;
 5         int index=-1;
 6         while(left<=right){
 7             mid=(left+right)/2;
 8             if(arr[mid]==ele){
 9                 index=mid;
10                 break;
11             }else if(arr[mid]<ele){
12                 left=mid+1;
13             }else if(arr[mid]>ele){
14                 right=mid-1;
15             }
16         }
17         return index;
18     }

 

3、對數組進行排序

(1)、冒泡排序

原理:相鄰元素進行比較,小的往前趕,大的往後冒,最大值出現的最大索引處

分析:第一次進行比較,大的往後冒,會把最大值排在最大索引處

   第二次進行比較,因為最大值已經確定了,只需要比較前n-1個元素即可,確定一個第二大值排在第二大索引處

   依次確定第三大值,第四大值.............

結論:N個數字來排隊,兩兩比較小靠前,外層迴圈n-1,內層迴圈n-1-i

 

 1 public class TestArray{
 2     public static void main(String[] args){
 3         int[] arr={10,3,8,1,6};
 4         //外層迴圈控制比較輪數
 5         for(int i=0;i<arr.length-1;i++){
 6             //內層迴圈控制每輪比較次數
 7             for(int j=0;j<arr.length-1-i;j++){
 8                 if(arr[j]>arr[j+1]){
 9                     int temp=arr[j];
10                     arr[j]=arr[j+1];
11                     arr[j+1]=temp;
12                 }
13             }
14         }
15         //遍曆數組
16         for(int i=0;i<arr.length;i++){
17             System.out.println(arr[i]);
18         }
19     }
20 }

 

 

(2)、選擇排序

原理:從下標0處開始,依次和後邊的元素進行比較,如果後面元素小於下標0的元素,換位。拿新的下標為0的元素和後邊的進行比較。第一次完畢,最小值出現在索引0處

例:{10,3,8,1,6}

第一輪比較,從0下標元素開始,依次和後邊的元素進行比較,先是10和3進行比較,10<3,交換位置,下標0的元素變成3,{3,10,8,1,6};再拿3和8比較,3<8,不換位;3和1進行比較,3>1,換位

{1,10,8,3,6},然後拿1和6進行比較,1<6,不換位置。第一輪結束,{1,10,8,3,6}

第二輪比較,上一輪已經確定了下標0的元素為最小值,這輪比較從下標1開始,先是10和8比較,換位{1,8,10,3,6};8和3比較,換位{1,3,10,8,6},3和6比較,不換位。第二輪結束,確定倒數第二小的元素在下標1位置。

........

共比較length-1輪。

 1 public class TestArray{
 2     public static void main(String[] args){
 3         int[] arr={10,3,8,1,6};
 4         for(int i=0;i<arr.length-1;i++){
 5             for(int j=i+1;j<arr.length;j++){
 6                 if(arr[i]>arr[j]){
 7                     int temp=arr[i];
 8                     arr[i]=arr[j];
 9                     arr[j]=temp;
10                 }
11             }
12         }
13         //遍曆數組
14         for(int i=0;i<arr.length;i++){
15             System.out.println(arr[i]);
16         }
17     }
18 }

 

4、刪除數組中元素

(1)根據下標刪除元素(空位補0)

1 public static void delete(int[] arr,int index){
2         for(int i=index;i<arr.length-1;i++){
3             arr[i]=arr[i+1];
4         }
5         arr[arr.length-1]=0;
6         System.out.println(Arrays.toString(arr));
7     }

 

(2)根據輸入的元素刪除數組中對應的元素

 1 public static void delete(int[] arr,int ele){
 2         int index=-1;
 3         for(int i=0;i<arr.length;i++){
 4             if(arr[i]==ele){
 5                 index=i;
 6             }
 7         }
 8         for(int i=index;i<arr.length-1;i++){
 9             arr[i]=arr[i+1];
10         }
11         arr[arr.length-1]=0;
12         System.out.println(Arrays.toString(arr));
13     }

 

 

下麵介紹一些API裡面常見的對數組的操作

在java中,除java.lang包下的類和介面可以直接使用外,其他包下的類或介面在使用時需要先導包。
java.util.Arrays類:此類包含用來操作數組(比如排序和搜索)的各種方法。

這些都是靜態方法,可以類名.方法名直接使用,這裡都以int型數組為例

1、對數組進行快速排序

Arrays.sort(int[] arr);對傳入的數組預設進行升序排序

2、返回指定數組內容的字元串表現形式。

Arrays.toString(int[] arr);

3、使用二分法搜索制定數組中的某個元素的下標

Arrays.binarySearch(int[] arr);

4、將將指定的 int 值分配給指定 int 型數組的每個元素。

Arrays.fill(int[] arr,int val);

5、複製指定的數組,截取或用 0 填充(如有必要),以使副本具有指定的長度。

Arrays.copyOf(int[] arr,int newLength);它的返回值是一個數組

6、將指定數組的指定範圍複製到一個新數組。 包含起始位置但不包含結束位置。

Arrays.copyOfRange(int[] arr,int from,int to);它的返回值是一個數組

 

其他數組知識:

1、命令行參數:可以在執行java命令時為main方法傳入參數值。

用法:運行java命令時傳入命令行參數: java 類名 "值1" "值2"...

public static void main(String[] args){},我們可以看到main方法是一個有參的方法,參數是一個字元串數組,在命令行為main方法傳值時,傳入的值都保存在args字元數組裡。
註意:多個參數值之間用空格分割。參數的值將會保存到字元串數組傳入main方法,下標從零開始。
在獲取命令行參數時需要註意下標不能越界,最大下標應該為參數的個數-1

public static void main(String[] args){
2         for(int i=0;i<args.length;i++){
3                 System.out.println(args[i]);
4         }
5 }

 

 

2、可變參數

可變參數是java1.5之後的新特性,可以代表零到多個相同數據類型的變數,是為瞭解決因參數個數的變化而導致過多的方法重載問題。

註意:1、可變參數只能用於形式參數(方法定義時),可以把可變參數當作數組來處理。

   2、一個方法在最多只能有一個可變參數,可變參數必須作為最後一個參數。

   3、調用帶可變參數的方法時,數據類型必須與可變參數的類型對應。

 1 public class Test1 {
 2     public static void main(String[] args){
 3         double sum=add(4,2.1,3.4,1.2);
 4         System.out.println(sum);
 5     }
 6     public static double add(int a,double...b){
 7         double sum=a;
 8         for(int i=0;i<b.length;i++){
 9             sum+=b[i];
10         }
11         return sum;
12     }
13 }

 

 

例題:

  1. 合併數組操作:現有如下一個數組:   int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5}   要求將以上數組中值為0的項去掉,將不為0的值存入一個新的數組,生成的新數組為: int newArr [] ={1,3,4,5,6,6,5,4,7,6,7,5}  

  思路: 確定出不為0的個數,這樣可以開闢新數組;從舊的數組之中,取出內容,並將其賦給新開闢的數組。

 

 1 public class Test1 {
 2     public static void main(String[] args){
 3         int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
 4         int[] arr=mergeArrays(oldArr);
 5         System.out.println(Arrays.toString(arr));
 6     }
 7     public static int[] mergeArrays(int[] oldArr){
 8         int count=0;
 9         for(int i=0;i<oldArr.length;i++){
10             if(oldArr[i]!=0){
11                 count++;
12             }
13         }
14         int[] newArr=new int[count];
15         int index=0;
16         for(int i=0;i<oldArr.length;i++){
17             if(oldArr[i]!=0){
18                 newArr[index]=oldArr[i];
19                 index++;
20             }
21         }
22         return newArr;
23     }
24 }

 

 

 

 

  2、使用二分法查找有序數組中元素。找到返回索引,不存在輸出-1。使用遞歸實現

 

 1 public class Test1 {
 2     public static void main(String[] args){
 3         int[] arr={1,2,3,4,5,6,7,8};
 4         int index=binarySearch(arr,6,0,arr.length-1);
 5         System.out.println(index);
 6     }
 7     public static int binarySearch(int[] arr,int ele,int left,int right){
 8         int mid=(left+right)/2;
 9         if(arr[mid]==ele){
10             return mid;
11         }else if(arr[mid]<ele){
12             return binarySearch(arr,ele,mid+1,right);
13         }else if(arr[mid]>ele){
14             return binarySearch(arr,ele,left,mid-1);
15         }
16         return -1;
17     }
18 }

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 當我們有一個 先序遍歷序列:1,3,7,9,5,11 中序遍歷序列:9,7,3,1,5,11 我們可以很輕鬆的用筆寫出對應的二叉樹。但是用代碼又該如何實現? 下麵我們來簡單談談基本思想。 首先,先序遍歷的順序是根據 根-左孩子-右孩子 的順序遍歷的,那麼我們可以率先確認的是先序遍歷序列的第一個數就是 ...
  • 之前一直都是使用Notepad++來編寫Python代碼,後來想起來之前查資料的時候有個VS Code可以編寫一些的腳本語言(js,node.js)甚至是高級編程語言(C#,PHP,JAVA,Python等)而且這是微軟自家寫的,這就引起我的濃烈興趣了,查了下VS Code發現這東西不錯,而且廣受程 ...
  • 自學單片機學到中斷部分,用數位管動態顯示刷新頻率高的時候會有重影,為了消除重影我查找了網上很多資料,好多錯的。 看看原理圖: 百度百科:74HC573 數位管 74HC573是擁有八路輸出的透明鎖存器,輸出為三態門,是一種高性能硅柵CMOS器件。 SL74HC573跟LS/AL573的管腳一樣。器件 ...
  • 選擇排序: 選擇排序(Selection sort)是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。 選擇排序的主要優點與數據移動 ...
  • php中添加utf-8: 1 header("Content-type:text/html;charset='UTF-8'"); 文件操作步驟: 1.在同一目錄下建立一個file.txt的文件夾 2.打開文件 1 $res = fopen("file.txt","r");//打開文件路徑,打開後是個 ...
  • 有1、2、3、4個數字,能組成多少個互不相同且無重覆數字的三位數?都是多少? public class Example11 { public static void main(String[] args) { number(); } public static void number() { int ...
  • package util; import java.io.UnsupportedEncodingException;import java.security.InvalidKeyException;import java.security.NoSuchAlgorithmException;impor ...
  • 關於極光推送Jpush 推送是手機app必不可少的一樣功能,這次由於公司項目需要研究了一下。由於推送一般寫於服務端,所以對於不會Android的javaweb程式員要寫出一個完整的demo是一件很頭痛的事情。所以我就在這裡從頭到尾寫一個例子以示參考。由於我也不懂Android 只是由於項目需要百度了 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...