一、數據結構
1.研究和解決什么問題?
一堆數據怎么在內存中存儲更方便、更高效
2.數據在內存中不一定都是挨著連續存儲的
3.例如公司,黨派,幫派;每個都有自己的組織模式和運行機構來幫助他們正常發展和運行。
4.常見的數據結構:
線性表(list) 鏈表(linked list) 棧(stack) 隊列(queue) 樹(tree)
5.list,線性表 分三種
名稱 | 介紹 | 舉例 |
---|---|---|
有序列表 | 插入的順序作為遍歷的順序,位置不變(長度固定) | 數組 |
順序存儲 | 插入的順序作為遍歷的順序,允許插入和刪除(位置可變) 長度可變 缺點:插入和刪除的效率低 優點:查詢效率高 | |
鏈式存儲(鏈表) | 哪里有空位,就可以往哪里存 優點:插入和刪除的效率高 缺點:查詢效率很低 |
6.棧 先進后出,后進先出,就像彈夾 限制了插入和刪除的位置,只能在一端(尾部)進行
例如:
瀏覽器的“前進”和“后退”
很多軟件的“撤銷”和“恢復”
7.隊列(queue) 先進先出 后進后出 插入是在對尾,刪除是在對前 客服電話的排隊
例如:大學食堂排隊打飯,醫院掛號排隊等
8.Hash table(散列表,也叫哈希表)是根據關鍵碼值(Key-value)而直接進行訪問的數據結構。也就是說,它通過把關鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度。(目錄+鏈表,就像字典)
- 特點:目錄+鏈表 插入、刪除和查詢的效率都很高
- 缺點:沒下標
- 哈希表
9.樹 二叉樹 平衡二叉樹(紅黑樹) 特點 插入、刪除和查詢的效率都很高



二、數組和集合
數組(可以存儲基本數據類型)是用來存現對象的一種容器,但是數組的長度固定,不適合在對象數量未知的情況下使用。
集合(只能存儲對象,對象類型可以不一樣)的長度可變,可在多數情況下使用。
三、Java集合概述
1.我們要存的數據的個數是不確定 集合
2.數組只能存同一種類型的數據
3.集合可以稱之為超級數組
4.打開java.util.ArrayList的源代碼,首先映入眼簾的是@author Josh Bloch,
這位大叔就是玉樹凌風,風流倜儻,人稱Java之母的Josh Bloch ,Java集合框架就是他一手打造的
5.結構圖

項目地址:傳送門