java 基礎五 -- 數組

来源:http://www.cnblogs.com/xuweiweiailixing/archive/2017/09/05/7469778.html
-Advertisement-
Play Games

1 數組的定義 2 數組的記憶體分配及特點 3 數組操作常見問題 4 數組常見操作 5 數組中的數組(二維數組) ...


1 數組的定義

  • 概念:同一種類型數據的集合,其實數組就是一個容器。
  • 數組的好處:可以自動的給數組中的元素從0開始編號,方便操作這些元素。
  • 格式1:
    • 元素類型[] 數組名 = new 元素類型[元素個數或數組長度];
  • 格式2:
    • 元素類型[] 數組名 = new 元素類型[]{元素1,元素2,……};    

 

  • 示例:  
package java005;

/**
 * 2017/9/3
 * 說明:數組
 */
public class ArrayDemo {
    public static void main(String[] args) {
        int [] arr = new int[5];
    }
}
  • 示例:
package java005;

/**
 * 2017/9/3
 * 說明:數組
 */
public class ArrayDemo {
    public static void main(String[] args) {
        int [] arr = new int[]{};
    }
}
  • 示例:
package java005;

/**
 * 2017/9/3
 * 說明:數組
 */
public class ArrayDemo {
    public static void main(String[] args) {
        int [] arr = new int[]{1,2,3};
    }
}
  • 示例:
package java005;

/**
 * 2017/9/3
 * 說明:數組
 */
public class ArrayDemo {
    public static void main(String[] args) {
        int [] arr = new int[5];
        System.out.println(arr[0]);
        arr[1] = 59;
        for(int x = 0;x<arr.length;x++){
            System.out.println(arr[x]);
        }
    }
}

 

2 數組的記憶體分配及特點

  • 記憶體的劃分:
    • 寄存器
    • 本地方法區
    • 方法區
    • 堆記憶體
    • 棧記憶體  

 

  • 棧記憶體:存儲的都是局部變數,而且變數所屬的作用域一旦結束,該變數就自動釋放。

 

  • 堆記憶體:存儲的數組和對象(其實數組就是對象)。
    • 每一個對象都有一個首地址值。
    • 堆記憶體中的每一個變數都有預設初始化值,根據類型的不同而不同。整數為0,小數是0.0,boolean類型是false,char類型是'\u0000'。
    • 垃圾回收機制。  

 

  • 圖解:int[] arr = new int[5];
    • ①main方法進棧

    • ②main方法進入到棧中,執行main方法中的代碼,當執行到new int[5];的時候,在堆記憶體開闢了一段連續的空間,長度是5,並初始化堆中數組對象的預設值為對應類型的預設值,並分配堆中數組對象的記憶體地址。  

    • ③當將堆中地址賦值給左邊的arr變數的時候,arr就指向了堆中的數組對象。  

 

3 數組操作常見問題

  • ArrayIndexOutOfBoundsException
package java005;

/**
 * 2017/9/3
 * 說明:數組
 */
public class ArrayDemo {
    public static void main(String[] args) {
        int [] arr = new int[5];
        System.out.println(arr[5]);

    }
}

 

  • NullPointerException
package java005;

/**
 * 2017/9/3
 * 說明:數組
 */
public class ArrayDemo {
    public static void main(String[] args) {
        int [] arr = new int[5];
        System.out.println(arr[arr.length-1]);
        arr = null;
        System.out.println(arr[arr.length-1]);

    }
}

 

4 數組常見操作

4.1 遍曆數組

package java005;

/**
 * 2017/9/3
 * 說明:數組
 */
public class ArrayDemo {
    public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4,5,6,7,8,9,0};
        for(int x = 0 ;x<arr.length;x++){
            System.out.print(arr[x] +"\t");
        }

    }
}

4.2 最值

package java005;

/**
 * 2017/9/3
 * 說明:求最值
 */
public class ArrayDemo2 {
    public static void main(String[] args) {
        int[] arr = new int[]{1,11,33,-1,-10};
        int max = max(arr);
        int min = min(arr);
        System.out.println("最大值是:"+max);
        System.out.println("最小值是:"+min);

    }

    /**
     * 求一個數組的最大值
     * @param arr
     * @return
     */
    public static int max(int[] arr){
       if(arr.length == 0){
           throw new RuntimeException("數組不能為空");
       }
       int max = arr[0];
       for(int x =0;x<arr.length;x++){
           if(max < arr[x]){
               max = arr[x];
           }
       }
       return max;
    }

    /**
     * 求一個數組的最小值
     * @param arr
     * @return
     */
    public static int min(int[] arr){
        if(arr.length == 0){
            throw new RuntimeException("數組不能為空");
        }
        int min = arr[0];
        for(int x =0;x<arr.length;x++){
            if(min > arr[x]){
                min = arr[x];
            }
        }
        return min;

    }



}

4.3 選擇排序

 

 

package java005;

/**
 * 2017/9/3
 * 說明:選擇排序
 */
public class ArraySortDemo {
    public static void main(String[] args) {
        int[] arr = {34,19,11,103,56};
        //排序前
        printArray(arr);
        //排序
        sortArray(arr);
        //排序後
        printArray(arr);

    }

    /**
     * 列印數組
     * @param arr
     */
    public static void printArray(int[] arr){
        System.out.print("[");
        for(int x = 0;x<arr.length;x++){
            if(x == (arr.length -1)){
                System.out.print(arr[x] +"]");
            }else{
                System.out.print(arr[x]  +"、");
            }


        }
    }

    /**
     * 對數組進行排序
     * @param arr
     */
    public static void sortArray(int[] arr){
        for(int x = 0;x< arr.length-1;x++){
            for(int y = x+1;y<arr.length;y++){
                if(arr[x] > arr[y]){
                    int temp = arr[y];
                    arr[y] = arr[x];
                    arr[x] = temp;
                }

            }


        }
    }


}

4.4 冒泡排序

 

 

package java005;

/**
 * 2017/9/4
 * 說明:冒泡排序
 */
public class ArraySortDemo2 {
    public static void main(String[] args) {
        int[] arr = new int[]{34,19,11,109,3,56};
        //排序前
        printArray(arr);

        sortArray(arr);

        //排序後
        printArray(arr);

    }

    /**
     * 輸出數組中的每個元素
     */
    public static void printArray(int[] arr){
        System.out.print("[");
        for (int x = 0;x<arr.length;x++){
            if(x == arr.length-1){
                System.out.println(arr[x] +"]");
            }else{
                System.out.print(arr[x]+"、");
            }
        }
    }

    /**
     * 冒泡排序演算法
     * @param arr
     */
    public static void sortArray(int[] arr){
        for(int x =0;x<arr.length -1;x++){
            for(int y = 0; y<arr.length -1 -x;y++){
                if(arr[y] > arr[y+1]){
                    int temp = arr[y];
                    arr[y] = arr[y+1];
                    arr[y+1] = temp;

                }
            }

        }
    }


}

4.5 找出數組中指定數值的位置

4.5.1 普通查找法

package java005;

/**
 * 2017/9/4
 * 說明:冒泡排序
 */
public class ArraySortDemo2 {
    public static void main(String[] args) {
        int[] arr = new int[]{34,19,11,109,3,56};
        int index = commonFindElementIndexByValue(arr,109);
        System.out.println("索引值是:"+index);

    }

    

    public static int commonFindElementIndexByValue(int[] arr,int value){
        if(arr == null || arr.length == 0){
            return -1;
        }
        for(int x =0;x<arr.length;x++){
            if(value == arr[x]){
                return x;
            }
        }
        return -1;

    }




}

4.5.2 二分查找法(折半查找法)--必須先排序

package java005;

/**
 * 2017/9/4
 * 說明:二分查找法
 */
public class BinarySearchDemo {
    public static void main(String[] args) {
        int[] arr = new int[]{34,19,11,109,3,56};
        sort(arr);
        int index = binarySearch(arr,56);
        System.out.print("index:"+index);
    }

    /**
     * 排序
     * @param arr
     */
    public static void sort(int[] arr){
        for(int x =0;x<arr.length -1; x++){
            for(int y = 0; y<arr.length -1 -x;y++){
                if(arr[y] > arr[y+1]){
                    int temp = arr[y];
                    arr[y] = arr[y+1];
                    arr[y+1] = temp;
                }
            }
        }
    }

    /**
     * 二分查找法
     * @param arr
     * @param value
     * @return
     */
    public static int binarySearch(int[] arr,int value){
        if(arr == null || arr.length ==0){
            return -1;
        }
        int min = 0;
        int max = arr.length-1;
        int mid = (min + max) / 2;
        while(arr[mid] != value){
            if(value > arr[mid]){
                min = mid +1 ;
            }else if(value < arr[mid]){
                max = mid - 1;
            }
            if(min > max){
                return  -1;
            }
            mid = (min + max) / 2;


        }

        return mid;
    }

}
  • 二分查找法,是有弊端的,如果當前數組不是排序過的,那麼返回的索引不是排序之前的索引值
package java005;

import javax.lang.model.element.VariableElement;

/**
 * 2017/9/4
 * 說明:二分查找法
 */
public class BinarySearchDemo {
    public static void main(String[] args) {
        int[] arr = new int[]{34,19,11,109,3,56};
        sort(arr);
        int index = binarySearch(arr,56);
        System.out.print("index:"+index);
    }

    /**
     * 排序
     * @param arr
     */
    public static void sort(int[] arr){
        for(int x =0;x<arr.length -1; x++){
            for(int y = 0; y<arr.length -1 -x;y++){
                if(arr[y] > arr[y+1]){
                    int temp = arr[y];
                    arr[y] = arr[y+1];
                    arr[y+1] = temp;
                }
            }
        }
    }

    /**
     * 二分查找法
     * @param arr
     * @param value
     * @return
     */
    public static int binarySearch(int[] arr,int value){
        if(arr == null || arr.length ==0){
            return -1;
        }
        int min = 0;
        int max = arr.length-1;
        int mid = 0;
        while(min < max){
            mid = (min + max) >> 1;
            if(value > arr[mid]){
                min = mid + 1;
            }else if(value < arr[mid]){
                max = mid - 1;
            }else{
                return mid;
            }


        }

        return -1;
    }
}

 

 

 

 

 

5 數組中的數組(二維數組)

 


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

-Advertisement-
Play Games
更多相關文章
  • apache-tomcat-7.0.52\conf下server.xml文件 <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> 將埠從8080改成80 <Host a ...
  • 第一種方式:for-in迴圈 OC延續了C語言的for迴圈,在Swift中被徹底改造,我們無法再使用傳統形式的for迴圈了 遍曆數組和字典: 如上遍曆數組使用了2種方式 1、第一種方式是Swift中普通的for迴圈語法,在索引index和遍歷範圍0...6之間用關鍵字in,這裡要註意0...6的表示 ...
  • 之前做過一個測試,詳情見這篇文章《多線程 +1操作的幾種實現方式,及效率對比》,當時對這個測試結果很疑惑,反覆執行過多次,發現結果是一樣的: 1. 單線程下synchronized效率最高(當時感覺它的效率應該是最差才對); 2. AtomicInteger效率最不穩定,不同併發情況下表現不一樣:短 ...
  • @ResponseBody一定一定要加啊!!!!!!不加的話前臺報錯,後臺警告!!!!前臺:jquery.min.js:2 POST http://172.13.31.75:8080/kuaibeiPro/querySessionId 404 (Not Found)send @ jquery.min ...
  • 一:對象頭 HotSpot虛擬機中,對象在記憶體中存儲的佈局可以分為三塊區域:對象頭(Header)、實例數據(Instance Data)和對齊填充(Padding)。 HotSpot虛擬機的對象頭(Object Header)包括兩部分信息,第一部分用於存儲對象自身的運行時數據, 如哈希碼(Has ...
  • spring boot / cloud (九) 使用rabbitmq消息中間件 前言 rabbitmq介紹: RabbitMQ是一個在AMQP基礎上完整的,可復用的企業消息系統。它可以用於大型軟體系統各個模塊之間的高效通信,支持高併發,支持可擴展。 amqp介紹: 即Advanced Message ...
  • 映射文件:指導著MyBatis如何進行資料庫增刪改查, 有著非常重要的意義; - cache 命名空間的二級緩存配置 - cache-ref 其他命名空間緩存配置的引用。 - resultMap 自定義結果集映射 - parameterMap 已廢棄!老式風格的參數映射 - sql 抽取可重用語句塊 ...
  • 需要編譯的文件: main.c fun.c fun.h 第一種:makefile 第二種使用變數 第三種自動推導 5.自動化變數 6.自動化變數 7. 生成多個可執行文件 8. 引用其他目錄下的 .h文件 9.編譯不同目錄下的文件 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...