java——List與ArrayList之父類引用指向子類對象

原文鏈接:https://blog.csdn.net/Jae_Peng/article/details/80151033

爲什麼推薦使用List<Integer> list_A = new ArrayList<Integer>(); 而不是使用 ArrayList<Integer> list_A = new ArrayList<Integer>();
因爲List接口有多個實現類,List是一個很大的範圍,現在你用的是ArrayList,也許哪一天你需要把 List_A 換成其它的實現類,如 Vector, 這時你只要改變這一行就行了: List list_A = new LinkedList(); 其它使用了list_A地方的代碼根本不需要改動。 
但如果一開始你就侷限了你的list_A是一種ArrayList,那麼當你想把list_A改爲其他List的子類型時,需要修改的地方就會有很多。
特別是如果你使用了ArrayList實現類特有的方法和屬性。

用接口去做是有它的好處的,如果你把類型定義成ArrayList(也就是一個具體的實現類)那麼你就只能接收這一種類型的數據了,如果你要是定義爲List那麼你不僅可以接收ArrayList的對象還可以接收LinkedList的對象,這樣你的程序就靈活了。

附上leetcode上面的一道楊輝三角題目的官方解析。

class Solution {
    // 返回值是一個裝列表的列表,二維列表。
    public List<List<Integer>> generate(int numRows) {
        // 爲什麼使用List<Integer> list_A = new ArrayList<Integer>();
        // 而不是使用 ArrayList<Integer> list_A = new ArrayList<Integer>();
        // 因爲List接口有多個實現類,List是一個很大的範圍,現在你用的是ArrayList,
        // 也許哪一天你需要把 List_A 換成其它的實現類,如 Vector,
        // 這時你只要改變這一行就行了: List list_A = new LinkedList(); 
        // 其它使用了list_A地方的代碼根本不需要改動。 
        // 但如果一開始你就侷限了你的list_A是一種ArrayList,
        // 那麼當你想把list_A改爲其他List的子類型時,需要修改的地方就會有很多。
        // 特別是如果你使用了ArrayList實現類特有的方法和屬性。
        List<List<Integer>> triangle = new ArrayList<List<Integer>>();
        if(numRows == 0){
            return triangle;
        }
        // 第一行永遠是[1]
        triangle.add(new ArrayList<>());
        triangle.get(0).add(1);

        for(int rowNum = 1; rowNum < numRows; rowNum++){ // rowNum是當前行數
            List<Integer> row = new ArrayList<>(); // 當前行的list
            List<Integer> prevRow = triangle.get(rowNum - 1); // 前一行的list
            // the first element of each row is always 1
            row.add(1);

            for(int j = 1; j < rowNum; j++){
                row.add(prevRow.get(j - 1) + prevRow.get(j));
            }

            // the last element of each row is always 1, too
            row.add(1);

            triangle.add(row);
        }
        
        return triangle;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章