一.算法效率
算法效率分為兩種:第一種為時間效率,第二種為空間效率。時間效率稱為時間復雜度,空間效率稱為空間復雜度。時間復雜主要衡量一個算法的運行速度,空間復雜度主要衡量一個算法所需的?額外的空間(現在不需要特別關注,現在的磁盤空間特別大)。
二.時間復雜度
1.概念:
算法中基本操作的執行次數,為算法的復雜度
2.大O的漸進表示法
算法復雜度存在最好、平均、最壞情況:
最壞情況:任意輸入規模的最大運行次數(上界)
平均情況:任意輸入規模的期望運行次數
最好情況:任意輸入規模的最小運行次數(下界)
例如:? ? 在一個長度為N數組中搜索一個數據x
最好情況:1次找到
最壞情況:N次找到
平均情況:N/2次找到
在實際情況中,我們并不需要精確的執行次數,一般關注最壞情況,用大O的漸進表示法表示
大O的漸進表示法規則:
1、用常數1取代運行時間中的所有加法常數
2、在修改后的運行次數函數中,只保留最高階項。
3、如果最高階項存在且不是1,則去除與這個項目相乘的常數。得到的結果就是大O階。
舉例:
三.空間復雜度
空間復雜度是算法在運行過程中臨時占用存儲空間大小(即新增變量的個數)。也使用大O的漸進表示法
舉例:
四.包裝類(Java最開始講過)
再Java中,由于基本類型不是繼承于Object類,為了在泛型代碼中支持基本類型,所以個每個基本類型都對應一個基本類型
1.裝箱和拆箱
裝箱:將基本類型變為包裝類型的過程,分為自動裝箱和顯示裝箱
拆箱:將包裝類型變為基本類型的過程,分為自動拆箱和顯示拆箱
舉例:
注意:
五.泛型
概念:從代碼上講就是對類型實現了參數化
主要目的:就是指定當前的容器,要持有什么類型的對象。讓編譯器去做檢查。此時,就需要把類型,作為參數傳遞。需要什么類型,就傳入什么類型。
語法:
利用Object舉例:
利用泛型舉例:
六.泛型的上界
語法·:
舉例:
接口也是如此:
七.泛型方法
語法:
舉例:
八.擦除機制
概念:在編譯的過程中,將所有的泛型類型T替換成他的上界類型(默認為Object)