真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java——基本類型包裝類和數(shù)組高級操作-創(chuàng)新互聯(lián)

基本類型包裝類和數(shù)組高級操作
  • 基本類型包裝類
    • 舉例
    • 裝箱、拆箱
  • 數(shù)組高級操作
    • 二分查找
    • 冒泡排序
    • 遞歸
    • 快排
    • 排序總結(jié)
  • Arrays

專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)瀘州免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。基本類型包裝類

將基本數(shù)據(jù)類型封裝成對象的好處在于可以在對象中定義更多的功能方法操作該數(shù)據(jù),最常用的操作之一就是用于基本數(shù)據(jù)類型與字符串之間的轉(zhuǎn)換。
幾乎所有基本類型的包裝類都是該類型關(guān)鍵字的首字母大寫,除了以下特例:
int —>Integer
char —>Character

舉例

以Integer為例子,包裝類幾乎都具有以下方法:

方法名說明
public Integer(int value)根據(jù) int 值創(chuàng)建 Integer 對象(過時(shí))
public Integer(String s)根據(jù) String 值創(chuàng)建 Integer 對象(過時(shí))
public static Integer valueOf?(int i)返回表示指定的 int 值的 Integer 實(shí)例
public static Integer valueOf?(String s)返回一個(gè)保存指定值的 Integer 對象 String
static int parseInt(String s)將字符串類型的整數(shù)變成int類型的整數(shù)
public static String valueOf(int i)返回 int 參數(shù)的字符串表示形式。該方法是 String 類中的方法

在這里插入圖片描述
除此之外,還需要對上述數(shù)組進(jìn)行排序

import static java.lang.Integer.parseInt;

public class IntString {public static void main(String[] args) {String str = "91 27 46 38 50";
        //先將字符串分割
        String[] split = str.split(" ");
        int[] number = new int[split.length];
        //然后將分割后的字符串用parseInt轉(zhuǎn)換為int類型
        for (int i = 0; i< number.length; i++) {number[i] = parseInt(split[i]);
        }
        //以下使用的是冒泡排序,最終得出的結(jié)果是降序排列,也可以做升序
        for (int i = 0; i< number.length; i++) {int temp = 0;
            for (int j = 0; j< number.length; j++) {if (number[i] >number[j]){temp = number[j];
                    number[j] = number[i];
                    number[i] = temp;
                }
            }
        }
        for (int i = 0; i< number.length; i++) {System.out.print(number[i] + " ");
        }
    }
}

在這里插入圖片描述
其實(shí)上述操作中,不少都有現(xiàn)成的API可以使用,簡化版本在之后會提到。

裝箱、拆箱

裝箱:把基本數(shù)據(jù)類型轉(zhuǎn)換為對應(yīng)的包裝類類型;
拆箱:把包裝類類型轉(zhuǎn)換為對應(yīng)的基本數(shù)據(jù)類型。
在使用包裝類類型的時(shí)候,如果需要進(jìn)行操作,最好先判斷是否為 null。
推薦只要是對象,在使用前就必須進(jìn)行不為 null 的判斷。

public class Integer {public static void main(String[] args) {int age = 23;
        java.lang.Integer.valueOf(age);//裝箱,將int包裝為Integer
        age += 100;//拆箱,重新轉(zhuǎn)換為int
    }
}
數(shù)組高級操作 二分查找

二分查找找得快以及能對半對半的查,前提是要經(jīng)過排序,沒有排序也就無法通過二分查找。
二分查找原理步驟為

  1. 最初將排序好的數(shù)組的首尾的索引定義為min和max,并且中間定義為mid;
  2. 如果要查找的元素大于mid位置的元素,那么min更改為mid+1,max不變,mid變?yōu)椋╩in+max)/2,然后繼續(xù)比較;
  3. 如果要查找的元素小于mid位置的元素,那么max更改為mid-1,min不變,mid變?yōu)椋╩in+max)/2,然后繼續(xù)比較;
  4. 重復(fù)23,直到查找到,返回索引,如果數(shù)組不存在這個(gè)元素,那么返回-1。
public class HalfSearch {public static void main(String[] args) {int[] numbers = {2, 3, 4, 5, 6, 34, 56, 78, 899};
        //要用二分查找,數(shù)組必須是排序好的
        Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入要查找的數(shù):");
        int search = scanner.nextInt();
        System.out.println(binarySearch(numbers, search));
    }
    public static int binarySearch(int[] array, int search){int min = 0;//默認(rèn)初始是數(shù)組頭部,索引為0
        int max = array.length;//默認(rèn)初始是數(shù)組尾部,索引為array.length
        while (min<= max){int mid = (min + max)/2;
            int current = array[mid];//定義當(dāng)前基準(zhǔn)為mid位置的元素
            if (current< search){min = mid + 1;
            } else if(current >search){max = mid - 1;
            } else {return mid;
            }
        }
        return -1;
    }
}
//查找6,返回4,即元素6的索引為4。

二分查找相當(dāng)于每次去掉一半的查找范圍。

冒泡排序

相鄰的數(shù)據(jù)兩兩比較,小的放前面,大的放后面。
如果有n個(gè)數(shù)據(jù)進(jìn)行排序,總共需要比較n-1次;每一次比較完畢,下一次的比較就會少一個(gè)數(shù)據(jù)參與。

public class PopSearch {public static void main(String[] args) {int[] numbers = {2, 3, 56, 78, 899, 6, 34,4, 5};
        bubbleSort(numbers);
        for (int i = 0; i< numbers.length; i++) {System.out.println(numbers[i]);
        }
    }
    public static void bubbleSort(int[] array){int temp = 0;
        //定義雙層for循環(huán),保證每一次元素都是與剩下的所有元素比較過的
        for (int i = 0; i< array.length -1; i++) {for (int j = i+1; j< array.length; j++) {//如果后一個(gè)元素比當(dāng)前元素小,那么將它們互換位置
                if (array[i] >array[j]){temp = array[j];
                    array[j] = array[i];
                    array[i] = temp;
                }

            }
        }
    }
}
//排序后結(jié)果為:[2,3,4,5,6,34,56,78,899]
遞歸

遞歸就是自己調(diào)用自己,能不用就不用,遞歸很消耗內(nèi)存。
遞歸解決問題的思路:

  1. 把一個(gè)復(fù)雜的問題層層轉(zhuǎn)化為一個(gè)與原問題相似的規(guī)模較小的問題來求解;
  2. 遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復(fù)計(jì)算。

遞歸解決問題要找到兩個(gè)內(nèi)容:

  1. 遞歸出口:否則會出現(xiàn)內(nèi)存溢出;
  2. 遞歸規(guī)則:與原問題相似的規(guī)模較小的問題。
    在這里插入圖片描述
public class Factorial {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入要求的階乘:");
        //一個(gè)數(shù)的階乘就是從1到它自己的所有數(shù)相乘
        int number = scanner.nextInt();
        System.out.println(factorial(number));
    }
    public static int factorial(int n){if (n == 1) {return 1;
        } else {return n * factorial(n - 1);//遞歸調(diào)用
        }
    }
}
快排

快速排序算法中,每一次遞歸時(shí)以第一個(gè)數(shù)為基準(zhǔn)數(shù),找到數(shù)組中所有比基準(zhǔn)數(shù)小的。再找到所有比基準(zhǔn)數(shù)大的。小的全部放左邊,大的全部放右邊,確定基準(zhǔn)數(shù)的正確位置。

public class QuickSort {public static void main(String[] args) {int[] array = {6,3,7,1,9,4,8,5,2,10};
	        int low = 0,high = array.length - 1;
	        quickRow(array,low,high);
	        for (int i : array){System.out.println(i);
	        }
	    }
    public static void quickRow(int[] array, int low, int high){int i,j,pivot;
        //結(jié)束條件
        if (low >= high) {return;
        }
        i = low;
        j = high;
        //選擇的節(jié)點(diǎn),這里選擇的數(shù)組的第一數(shù)作為節(jié)點(diǎn)
        pivot = array[low];
        while (i< j){//從右往左找比節(jié)點(diǎn)小的數(shù),循環(huán)結(jié)束要么找到了,要么i=j
            while (array[j] >= pivot && i< j){j--;
            }
            //從左往右找比節(jié)點(diǎn)大的數(shù),循環(huán)結(jié)束要么找到了,要么i=j
            while (array[i]<= pivot && i< j){i++;
            }
            //如果i!=j說明都找到了,就交換這兩個(gè)數(shù)
            if (i< j){int temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }
        //i==j一輪循環(huán)結(jié)束,交換節(jié)點(diǎn)的數(shù)和相遇點(diǎn)的數(shù)
        array[low] = array[i];
        array[i] = pivot;
        //數(shù)組“分兩半”,再重復(fù)上面的操作
        quickRow(array,low,i - 1);
        quickRow(array,i + 1,high);
    }
}

快排操作的步驟:

  1. high從右開始找比基準(zhǔn)數(shù)小的;
  2. low從左開始找比基準(zhǔn)數(shù)大的;
  3. 找到后,交換high和low對應(yīng)的兩個(gè)值的位置;
  4. high繼續(xù)往左找,low繼續(xù)往右找,直到high和low指向同一個(gè)索引為止;
  5. 將基準(zhǔn)數(shù)與high、low交匯的位置的元素互換位置;
  6. 繼續(xù)操作直到所有的元素排序完成。
排序總結(jié)

目前市面上有許多種排序,且都已經(jīng)經(jīng)過調(diào)試給出了API,因此,除非有特殊要求,否則不需要我們自定義排序方法,可以直接使用別人已經(jīng)給出的排序方法。
之所以學(xué)習(xí)排序是為了熟練的對數(shù)組元素進(jìn)行操作,了解一些排序算的基本原理。

Arrays

Arrays 類包含用于操作數(shù)組的各種方法,主要有以下幾種:

方法名說明
public static String toString?(int[] a)返回指定數(shù)組的內(nèi)容的字符串表示形式
public static void sort?(int[] a)按照數(shù)字順序排列指定的數(shù)組
public static int binarySearch?(int[] a, int key)利用二分查找返回指定元素的索引

由此可見,關(guān)于數(shù)組的不少操作都有現(xiàn)成的,且提供了API可以快捷的調(diào)用,因此,最開始的那一個(gè)例題,也就有了更簡單的實(shí)現(xiàn)方法:

public class IntString {public static void main(String[] args) {String str = "91 27 46 38 50";
        String[] split = str.split(" ");
        int[] number = new int[split.length];
        for (int i = 0; i< number.length; i++) {number[i] = parseInt(split[i]);
        }
        Arrays.sort(number);//排序
        System.out.println(Arrays.toString(number));//轉(zhuǎn)換為字符串輸出
    }
}
//[27, 38, 46, 50, 91]

Arrays類中也有構(gòu)造方法,只不過構(gòu)造方法被private修飾,外界無法使用,所以幫助文檔中也看不到。
不過通過查看源碼,我們可以找到如下的內(nèi)容:
private Arrays() {}

說明Arrays類的設(shè)計(jì)是采用的常用的工具類的設(shè)計(jì)思想——構(gòu)造方法私有,成員都用static修飾。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


網(wǎng)頁題目:Java——基本類型包裝類和數(shù)組高級操作-創(chuàng)新互聯(lián)
當(dāng)前網(wǎng)址:http://weahome.cn/article/eosgg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部