java 基礎五,java基礎

來源:互聯網
上載者:User

java 基礎五,java基礎
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 數組中的數組(二維數組)

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.