1. 程式人生 > >編寫高質量程式碼:改善Java程式的151個建議(第5章:陣列和集合___建議70~74)

編寫高質量程式碼:改善Java程式的151個建議(第5章:陣列和集合___建議70~74)

本節內容有些吹毛求疵、晦澀難懂!

建議70:子列表只是原列表的一個檢視

List介面提供了subList方法,其作用是返回一個列表的子列表,這與String類subSting有點類似。

注意:subList產生的列表只是一個檢視,所有的修改動作直接作用於原列表。

建議71:推薦使用subList處理區域性列表

我們來看這樣一個簡單的需求:一個列表有100個元素,現在要刪除索引位置為20~30的元素。這很簡單,一個遍歷很快就可以完成,程式碼如下:

public class Client71 {
    public static void main(String[] args) {
        // 初始化一個固定長度,不可變列表
        List<Integer> initData = Collections.nCopies(100, 0);
        // 轉換為可變列表
        List<Integer> list = new ArrayList<Integer>(initData);
        // 遍歷,刪除符合條件的元素
        for (int i = 0; i < list.size(); i++) {
            if (i >= 20 && i < 30) {
                list.remove(i);
            }
        }
    }
}

這段程式碼很符合我的風格!

下面用subList解決這個問題:

    public static void main(String[] args) {
        // 初始化一個固定長度,不可變列表
        List<Integer> initData = Collections.nCopies(100, 0);
        // 轉換為可變列表
        List<Integer> list = new ArrayList<Integer>(initData);
        //刪除指定範圍內的元素
        list.subList(20, 30).clear();
    }

建議72:生成子列表後不要再操作原列表

注意:subList生成子列表後,保持原列表的只讀狀態。

建議73:使用Comparator進行排序

1、預設排序

Collections.sort(list)

2、按某欄位排序

Collections.sort(list,new PositionComparator())

知道這些就行了,原文寫的太晦澀了,我感覺沒啥用!

想了解更多的使用Comparator進行排序

建議74:不推薦使用binarySearch對列表進行檢索

不推薦,乾脆就不要寫了,好嗎?

對列表進行檢索就使用indexOf就挺好的!

public class Client74 {
    public static void main(String[] args) {
        List<String> cities = new ArrayList<String> ();
        cities.add("上海");
        cities.add("廣州");
        cities.add("廣州");
        cities.add("北京");
        cities.add("天津");
        //indexOf取得索引值
        int index1= cities.indexOf("廣州");
        //binarySearch找到索引值
        int index2= Collections.binarySearch(cities, "廣州");
        System.out.println("索引值(indexOf):"+index1);
        System.out.println("索引值(binarySearch):"+index2);
    }
}

binarySearch採用的是二分法搜尋的Java版實現。從中間開始搜尋,結果肯定是2了。

使用binarySearch的二分法查詢比indexOf的遍歷演算法效能上高很多,特別是在大資料集且目標值又接近尾部時,binarySearch方法與indexOf方法相比,效能上會提升幾十倍,因此從效能的角度考慮時可以選擇binarySearch。

 

江疏影讀書系列之編寫高質量程式碼:改善Java程式的151個建議@目錄