20172311《程序設計與數據結構》第五週學習總結

20172311《程序設計與數據結構》第五週學習總結

教材學習內容總結

第九章 排序與查找

一丶查找html

  • 查找的方法主要包括線性查找法和二分查找法
  • 查找是這樣一個過程,即在某個項目組中尋找某一指定目標元素,或者肯定該指定目標並不存在
  • 二分查找的複雜度是對數級的,這使得他對於大型查找池很是有效率
  • 爲了能查找某一對象,咱們必須可以將一個對象跟另外一個對象進行比較。所以,所涉及的元素實現了Comparable接口且彼此是可比較的
  • Java程序的main方法必須用static修飾符來聲明。這樣,解釋器不用實例化含有main的類的對象,就能夠調用main方法
  • 靜態方法不是做用於具體的對象中,於是不能引用實例變量,只能夠引用靜態變量
  • 要建立一個泛型方法,只須要在方法頭的返回類型前插入一個泛型聲明便可,且泛型聲明必須位於返回類型以前
public static <T extends Comparable<T>>boolean
      linearSearch(T[] data,int min,int max,T target)

二丶排序java

  • 排序是這樣一個過程,即基於某一標準,將某一組項目按照某個規定順序排列
  • 基於效率排序算法一般也分爲兩類 :順序排序和對數排序,其中順序排序包括選擇排序、插入排序和冒泡排序,對數排序包括快速排序法和歸併排序法
  • 基數排序並非基於排序關鍵字來比較排序項,而是基於排序關鍵字的結構。對於排序關鍵字中每一個數字/字符的每種可能取值,都會建立一個單獨的隊列。隊列的數目就稱爲基數

教材學習中的問題和解決過程

  • 問題:建立泛型方法與建立一個引用泛型參數的類有何區別?git

  • 問題解決方案:算法

    泛型類

    泛型類型用於類的定義中,被稱爲泛型類。經過泛型能夠完成對一組類的操做對外開放相同的接口。最典型的就是各類容器類,如:List、Set、Map
    一個最普通的泛型類:
//此處T能夠隨便寫爲任意標識,常見的如T、E、K、V等形式的參數經常使用於表示泛型
//在實例化泛型類時,必須指定T的具體類型
public class Generic<T>{ 
    //key這個成員變量的類型爲T,T的類型由外部指定  
    private T key;

    public Generic(T key) { //泛型構造方法形參key的類型也爲T,T的類型由外部指定
        this.key = key;
    }

    public T getKey(){ //泛型方法getKey的返回值類型爲T,T的類型由外部指定
        return key;
    }
}  
//泛型的類型參數只能是類類型(包括自定義類),不能是簡單類型
//傳入的實參類型需與泛型的類型參數類型相同,即爲Integer.
Generic<Integer> genericInteger = new Generic<Integer>(123456);

//傳入的實參類型需與泛型的類型參數類型相同,即爲String.
Generic<String> genericString = new Generic<String>("key_vlaue");
Log.d("泛型測試","key is " + genericInteger.getKey());
Log.d("泛型測試","key is " + genericString.getKey());

注意數組

  • 泛型的類型參數只能是類類型,不能是簡單類型

泛型方法

在java中,泛型類的定義很是簡單,可是泛型方法就比較複雜了。數據結構

尤爲是咱們見到的大多數泛型類中的成員方法也都使用了泛型,有的甚至泛型類中也包含着泛型方法,這樣在初學者中很是容易將泛型方法理解錯了。學習

泛型類,是在實例化類的時候指明泛型的具體類型;泛型方法,是在調用方法的時候指明泛型的具體類型 。測試

/*
 泛型方法的基本介紹
 傳入的泛型實參
 return T 返回值爲T類型
 說明:
   1)public 與 返回值中間<T>很是重要,能夠理解爲聲明此方法爲泛型方法。
   2)只有聲明瞭<T>的方法纔是泛型方法,泛型類中的使用了泛型的成員方法並非泛型方法。
   3)<T>代表該方法將使用泛型類型T,此時才能夠在方法中使用泛型類型T。
   4)與泛型類的定義同樣,此處T能夠隨便寫爲任意標識,常見的如T、E、K、V等形式的參數經常使用於表示泛型。
 */
public <T> T genericMethod(Class<T> tClass)throws InstantiationException ,
  IllegalAccessException{
        T instance = tClass.newInstance();
        return instance;
}

代碼調試中的問題和解決過程

  • 問題:使用線性查找法對Contact類對象進行查找時出現錯誤,查找數組中已有對象返回false
    this

  • 問題解決方案:.net

    線性查找法代碼

//線性查找法
    public static <T> boolean linearSearch(T[] data, int min, int max, T target)
    {
        int index = min;
        boolean found = false;

        while (!found && index <= max)
        {
            found = data[index].equals(target);
            index++;
        }
        return found;
    }

經過與結對夥伴討論得知.equals方法是Object類裏的方法,對Object類對象可以正常使用,可是對本身建立的類不能正常使用,Contact類就是本身寫的類,判斷是否相等必須本身再寫一個判斷是否相等的方法來實現。

本身寫的判斷Contact對象是否相等的方法的代碼 、

public boolean equal(Contact other){
        if (lastName.equals(other.lastName)&&firstName.equals(other.firstName)&&phone.equals(other.phone))
            return true;
        else 
            return false;
    }

代碼託管

上週考試錯題總結

上週無錯題!!!

結對及互評

  • 本週結對學習狀況
    本週主要對查找和排序方法進行了較爲深刻的學習,我跟個人結對小夥伴對諸多問題進行了較爲深刻的討論,並最終使得問題得以解決,經過結對學習較大提升了學習的效率,仍是很是的開心的!

感想

本週的主要學習內容是對查找和排序方法的實現的學習,有一個較深的感觸就是理解算法與實現算法仍是有較大距離的,在算法的實現過程當中總會出現各類各樣的bug,須要耐下心來經過調試解決問題!本週收穫仍是挺多的,繼續努力吧!!!

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 0/0 1/1 4/4
第二週 464/464 1/2 10/14 理解掌握了用數組和鏈表實現棧的方法
第三週 494/958 1/3 10/24 理解掌握了用數組和鏈表實現隊列的方法
第四周 1629/2587 2/5 20/44 對用鏈表和數組實現列表進行了學習
第五週 856/3443 2/6 15/59 較爲深刻的學習了查找和排序方法的實現
  • 計劃學習時間:20小時

  • 實際學習時間:15小時

  • 改進狀況:提升學習的效率,保證學習的質量,遇到難題不要慌,耐下心來解決問題!!!

參考資料

相關文章
相關標籤/搜索