Day04-Java

@[toc]

關于作者

? 作者介紹

???? 博客主頁:作者主頁
???? 簡介:JAVA領域優質創作者????、一名在校大三學生????、在校期間參加各種省賽、國賽,斬獲一系列榮譽????。
???? 關注我:關注我學習資料、文檔下載統統都有,每日定時更新文章,勵志做一名JAVA資深程序猿?????????。

數組

數組的引用傳遞

public class TestDemo1{    public static void main(String args[]){        int data[] = null;        data = new int [3];        data[0] = 10;   //第一個元素        data[1] = 20;   //第二個元素        data[2] = 30;   //第三個元素    }}

public class TestDemo1{    public static void main(String args[]){        int data[] = null;        int temp[] = null;        data = new int [3];        data[0] = 10;   //第一個元素        data[1] = 20;   //第二個元素        data[2] = 30;   //第三個元素        temp = data;        temp[0] = 99;        for(int i=0 ;i < temp.length ; i++){            System.out.println(temp[i]);        }    }}

引用傳遞分析都是一個套路,不同的堆被同一個棧內存所指向。

數組的靜態初始化

public class TestDemo2{    public static void main(String args[]){        //數組靜態初始化的兩種方式        //簡化格式        int data [] = {1,2,3};        //完整格式        int data [] = new int []{1,2,3};    }}

數組的最大缺點:長度固定。

數組與方法的調用

public class TestDemo2{    public static void main(String args[]){        int data [] = new int []{1,2,3,4,5};        printfArray(data);  //int temp [] = data;    }    //定義一個專門用于數組輸出的方法    public static void printfArray(int temp[]){        for(int i = 0; i < temp.length; i++){            System.out.println(temp[i] + "、");        }    }}

方法返回數組

public class TestDemo2{    public static void main(String args[]){        int data [] = init();   //接受數組        printfArray(data);  //int temp [] = data;    }    //此時的方法希望可以返回一個數組類型,所以    //返回值類型定義為整型數組    public static int[] init(){        return new int []{1,2,3,4,5};    }    //定義一個專門用于數組輸出的方法    public static void printfArray(int temp[]){        for(int i = 0; i < temp.length; i++){            System.out.println(temp[i] + "、");        }    }}

擴大數組的內容

public class TestDemo2{    public static void main(String args[]){        int data [] = init();   //接受數組        inc(data);  //擴大數組的內容        printfArray(data);  //int temp [] = data;    }    //此時的方法希望可以返回一個數組類型,所以    //返回值類型定義為整型數組    public static int[] init(){        return new int []{1,2,3,4,5};    }    public static void inc(int arr[]){  //沒有返回值        for(int i = 0 ; i

Java對數組的支持

在java本身的類庫中也提供有對于數組相關的方法。

1、數組的排序:java.util.Arrays.sort(數組名稱)

public class TestDemo3{    public static void main(String args[]){        int data [] = new int [] {12,3,54,23,64,11};        java.util.Arrays.sort(data);        for(int i = 0;i < data.length ; i++){            System.out.println(data[i]);        }    }}

2、數組的拷貝:指的是將一個數組的部分內容替換掉另一個數組的部分內容

方法:System.arraycopy(源數組名稱,源數組開始,目標數組名稱,目標數組開始點,拷貝長度);

數組的數據分析

public class TestDemo3{    public static void main(String args[]){        int data [] = new int [] {12,3,54,23,64,11};        int max = data[0];          int min = data[0];        int sum = 0;        for(int i = 0; i < data.length ; i++){            sum += data[i];             if(data[i]>max){                max = data[i];            }            if(data[i]數組排序

發現最終要進行循環的次數就是N^(n-1),時間復雜度高。

public class TestDemo4{    public static void main(String args[]){        int data [] = new int [] {9,8,5,6,4,2,1,0,3,7};        sort(data);        printfArray(data);    }    public static void sort(int arr[]){//實現數組的升序排序        for(int i = 0 ;i < arr.length - 1 ; i++){        //控制循環的次數            for(int j = 0 ; j < arr.length - i - 1; j++){                if(arr[j]>arr[j+1]){                    int temp = arr[j];                    arr[j] = arr[j+1];                    arr[j+1] = temp;                }            }        }    }    //定義一個專門用于數組輸出的方法    public static void printfArray(int temp[]){        for(int i = 0; i < temp.length; i++){            System.out.println(temp[i] + "、");        }    }}

數組的轉置

public class TestDemo4{    public static void main(String args[]){        int data [] = new int [] {9,8,7,6,5,4,3,2,1,0};        reverse(data);        printfArray(data);    }    public static void reverse(int arr[]){        int center = arr.length / 2;    //轉換次數        int head = 0;   //頭部索引        int tail = arr.length - 1;  //尾部索引        for(int i = 0 ; i < center ; i++){            int temp = arr[head];            arr[head] = arr[tail];            arr[tail] = temp;            head ++;tail --;        }    }    //定義一個專門用于數組輸出的方法    public static void printfArray(int temp[]){        for(int i = 0; i < temp.length; i++){            System.out.print(temp[i] + "、");        }    }}

public class TestDemo5{//二維數組轉置    public static void main(String args[]){        int data [][] = new int [][] {{9,8,7},{6,5,4},{3,2,1}};        reverse(data);        printfArray(data);    }    public static void reverse(int arr[][]){        int count = arr.length; //轉換次數        System.out.println(count);        for(int i = 0 ; i < arr.length ; i++){            for(int j = i; j < arr.length; j++){                if(i != j){                    int temp = arr[i][j];                    arr[i][j] = arr[j][i];                    arr[j][i] = temp;                }             }        }    }    //定義一個專門用于數組輸出的方法    public static void printfArray(int temp[][]){        for(int i = 0; i < temp.length; i++){            for(int j = 0 ; j < temp[i].length ; j++){                System.out.print(temp[i][j] + "、");            }                System.out.println();        }    }}

數組的二分查找法

要求你在一個指定的數組之中查詢一個數據的位置。

普通的查找的時間復雜度是n.

public class TestDemo6{//二分查找    public static void main(String args[]){        int data [] = new int [] {1,2,3,4,5,6,7,8,9,10};        int search = 9;        System.out.println(binarySearch(data, 0 , data.length-1, search));    }    public static int binarySearch(int arr[],int form, int to, int key){        if(form < to){        int mid = (form / 2) + (to / 2);    //確定中間位置索引            if(arr[mid] == key){                return mid;            }else if(key > arr[mid]){                return binarySearch(arr, mid+1 , to , key);            }else if(key < arr[mid]){                return binarySearch(arr, form, mid-1, key);            }        }        return -1;    }}

對象數組

之前所接觸的都是基本數據類型的數據,那么對象也可以將其定義為數組,這樣操作形式叫做對象數組。對象數組往往是引用數據類型為主的定義,例如類、接口,而且對象數組分為兩種定義格式。

class Person{    private String name;    private int age;    public Person(String n, int a){        name = n;        age = a;    }    public void setName(String n){        name = n;    }    public void setAge(int a){        age = a;    }    public String getName(){        return name;    }    public int getAge(){        return age;    }    public String getInfo(){        return "name = " + name + ",age = " + age;    }}public class TestDemo7{//對象數組    public static void main(String args[]){        Person per [] = new Person [3]; //動態初始化        Person per1 [] = new Person [] {            new Person("張三",22),            new Person("張三1",22),            new Person("張三2",22)        };  //靜態初始化        per[0] = new Person("張三",22);        per[1] = new Person("李四",30);        per[2] = new Person("王五",13);        for(int i = 0;i < per.length ; i++){            System.out.println(per[i].getInfo());        }        System.out.println();        for(int i = 0;i < per.length ; i++){            System.out.println(per1[i].getInfo());        }    }}