目錄
前言
如何學好數據結構
1. 什么是集合框架
2. 集合框架的重要性
3. 背后所涉及的數據結構以及算法
3.1 什么是數據結構
3.2 容器背后對應的數據結構
3.3 相關java知識
3.4 什么是算法
3.5 基本關系說明(重要,簡單了解)
前言
什么是數據結構?
- 數據結構是一門單獨的學科,它和語言沒有關系。
- 數據 + 結構:用來描述和組織數據的。
- 為什么會有那么多的數據結構?︰是因為我們描述和組織數據的方式不一樣所以我們有很多種數據結構,來應付不同的場景來使用。
- 經常會聽到同學問:C++的數據結構和Java的數據結構有什么區別?
- 這個問題是錯誤的問題。數據結構的實現只是用的工具(編程語言)不一樣。當前數據結構的思想一樣的。
- C++和Java只是語言不一樣,工具不一樣。
什么是數據庫?
- 數據庫(服務器MySQL)也是單獨的學科。oracle數據庫是付費的,一般大的企業在用。
- 數據庫是用來持久化存儲數據的。數據庫底層用到數據結構來描述存儲的數據。
- 數據庫服務器-》數據庫s-》表s? -》數據。
什么是集合類?
- Java當中的集合類其實就是被封裝好的數據結構。
- 寫博客的邏輯:先講某個數據結構具體的實現,然后類比在Java當中封裝好的數據結構類(集合)。
- 原始的數據結構 -》告訴你Java封裝成的集合對應的是哪個 -》你再用。
- 在C++中叫STL,在Java中叫集合類或者集合框架。
如何學好數據結構
學好數據結構你會有一個質的飛躍!和別人拉開差距就看數據結構了!!
- 多畫圖
- 多思考
- 多寫代碼(不寫2遍以上是不會理解的,寫5遍基本上問題不大了)
遇見題目:
- 如果每個地方不懂,看代碼畫圖。
- 看圖寫代碼,不會的再看代碼。
- 思考
- 全部刪除,重新畫圖再寫。(這一遍盡量不要頻繁看,慢慢脫離代碼)
數據結構是一門邏輯非常嚴謹的學科。理解思想很重要。學習數據結構不僅能鍛煉邏輯思維,還能提升對代碼書寫的流暢度。大大提高代碼量。
集合框架及背后的數據結構,怎么理解標題的含義:
- 集合:就是java寫好的一些數據結構
- 框架:數據結構之間存在一定的聯系
- 數據結構:描述和組織數據的一種方式
1. 什么是集合框架
Java 集合框架(Java Collection Framework),又被稱為容器(container),是定義在 java.util 包下的一組接口 (interfaces) 和其實現類 (classes)。util 工具,稱工具包,因此基本上在Java當中與工具相關的都在util包底下。
其主要表現為將多個元素(element)置于一個單元中,用于對這些元素進行快速、便捷的存儲 store 、檢索 retrieve 、管理 manipulate ,即平時我們俗稱的增刪查改 CRUD .
例如,一副撲克牌(一組牌的集合)、一個郵箱(一組郵件的集合)、一個通訊錄(一組姓名和電話的映射關系)等等。
類和接口總覽:(下圖并非把所有的接口,抽象類 ,實現類都給列舉出來了。只列舉出了重要的部分) 每個實現類都是集合類
- 這張圖描述了Java當中,類與類,類與接口 之間的關系
- 了解清楚,接口與接口之間的關系? extends(拓展)關系
- 了解清楚,類與接口之間的關系? implemments 實現的關系
- 了解清楚,每個類背后的數據結構大概是個啥?
- 重要的接口有四個:List、Queue、Set、Map,其他類都是實現了這些接口。
2. 集合框架的重要性
1. 開發中的使用
- 使用成熟的集合框架,有助于我們便捷、快速的寫出高效、穩定的代碼。
- 學習背后的數據結構知識,有助于我們理解各個集合的優缺點及使用場景。
2. 筆試及面試題
3. 背后所涉及的數據結構以及算法
3.1 什么是數據結構
數據結構(Data Structure)是計算機存儲、組織數據的方式,指相互之間存在一種或多種特定關系的數據元素的集合。
?
3.2 容器背后對應的數據結構
該階段,我們主要學習以下容器,每個容器其實都是對某種特定數據結構的封裝,大概了解一下,后序會給大家詳細講解并模擬實現:
1. Collection:是一個接口,包含了大部分容器常用的一些方法
2. List:是一個接口,規范了ArrayList 和 LinkedList中要實現的方法
- ArrayList:實現了List接口,底層為動態類型順序表
- LinkedList:實現了List接口,底層為雙向鏈表
3. Stack:底層是棧,棧是一種特殊的順序表
4. Queue:底層是隊列,隊列是一種特殊的順序表
5. Deque:是一個接口
6. Set:集合,是一個接口,里面放置的是K模型
- HashSet:底層為哈希桶,查詢的時間復雜度為O(1)
- TreeSet:底層為紅黑樹,查詢的時間復雜度為O(log2 N),關于key有序的
7. Map:映射,里面存儲的是K-V模型的鍵值對
- HashMap:底層為哈希桶,查詢時間復雜度為O(1)
- TreeMap:底層為紅黑樹,查詢的時間復雜度為O(log2 N),關于key有序
3.3 相關java知識
學數據結構前,需要先掌握的一些知識:
- 泛型 Generic
- 自動裝箱 autobox? 和自動拆箱 autounbox
- Object 的 equals 方法
- Comparable 和 Comparator 接口
3.4 什么是算法
- 算法(Algorithm):就是定義良好的計算過程,他取一個或一組的值為輸入,并產生出一個或一組值作為輸出。簡單來說算法就是一系列的計算步驟,用來將輸入數據轉化成輸出結果。
- 數據結構與算法:相輔相成的
3.5 基本關系說明(重要,簡單了解)
- lterable 接口:有一個for-each() 功能
- Collection 接口 :用來存儲管理一組對象(objects),這些對象一般被成為元素 (elements)
- List 接口:多半部分為線性結構
- Queue 接口:隊列(其實隊列也屬于線性結構,但是有一種隊列不屬于線性結構,如:優先級隊列——底層是一個二叉樹,樹形結 構)
- PriorityQueue類:優先級隊列,每個元素都具備優先級,根據優先級入隊出隊
- Deque接口:雙端隊列
- Set接口:集合(元素不能重復)
- SortedSet接口:有序且不能重復的元素集合
- Map接口:底層是
隊列:例如,排隊打飯;有隊尾和隊頭,隊尾進隊頭出。
雙端隊列:有隊尾和隊頭;隊尾進隊尾出,隊頭進隊頭出,兩端都可以進也可以出。
好啦Y(^o^)Y,本節內容就到此結束了,感謝大家的閱讀瀏覽,期望大家的一鍵三連喲!