java中集合框架其實就是數據結構的實現的封裝;前端
參考資料:任小龍教學視頻java
1,什麼是數據結構?算法
數據結構是計算機存儲,組織數據的方式;後端
數據結構是指相互之間存在一種或多種特定關係的數據元素的集合;數組
一般狀況下,精心選擇的數據結構可帶來更高的運行或者存儲效率,數據結構
數據結構每每同高效的檢索算法和索引技術有關;框架
2,數據結構的基本功能性能
增(Create) 刪(Delete) 改(Update) 查(Read)spa
3,常見的數據結構視頻
3.1,數組Array;
數組是最簡單的數據結構;是用來存放同一種數據類型的集合.
從增刪改查分析數組的性能:
增:在數組的最後一個位置添加元素是很方便的,可是要是想在第一個位置添加元素就很麻煩了,後面的全部元素都要總體後移,容量不夠還要進行擴容;
刪:把數組的最後一個元素刪除是很方便的,可是要刪除第一個位置的元素就很麻煩,後面的全部元素都要總體前移;
改:修改指定下標的元素只要操做一次便可;
查:若是查詢指定下標的元素只要操做一次便可,若是查詢指定元素的下標,此時須要使用線性搜索(挨個找),
綜上:數組的改查性能比較高,增刪性能比較低;
3.2鏈表Linked List;
鏈表是經過引用來表示上一個節點和下一個節點的關係;
1》單點鏈表// 只能從頭遍歷到尾/只能從尾遍歷到頭
經過next存儲下一個節點,Node next表示的就是下一個節點;
2》雙向列表// 既能夠從頭遍歷到尾,也能從尾遍歷到頭
經過prev表示上一個節點,Node prev表示的是上一個節點;
從增刪改查分析鏈表的性能:
增:雙向鏈表能夠直接獲取第一個節點和最後一個節點.若是新增的元素在第一個位置或者最後一個位置,則操做只有一次;
刪:把第一個元素或者最後一個元素刪除只要操做一次;
改:不存在下標的概念,須要進行遍歷;
查:不存在下標的概念,須要進行遍歷;
綜上:鏈表的增刪性能較高,改查性能較低;
3.3棧Stack;
是一種運算受限的線性表,後進先出(LIFO);
僅容許在列表的一端添加和刪除元素,這一端被稱爲棧頂,相對的把另外一端稱爲棧底
向一個棧中添加元素,又稱爲壓棧或者進棧或者入棧,他是把新元素放在棧頂元素的上面,使之成爲新的棧頂元素;
從一個棧刪除元素,又稱之爲出棧,他是把棧頂元素刪掉,使之相鄰的元素成爲棧頂元素;
棧是基於數組實現的,下標爲0的元素就是棧底元素,最後一個元素就是棧頂元素;
3.4隊列Queue;
隊列是一種特殊的線性表,特殊之處在於,只容許表的前端進行刪除操做,表的後端進行添加操做
和棧同樣,隊列是一種受限的線性表
進行插入操做的端稱爲隊尾,進行刪除操做的端稱爲隊頭;
單向隊列:先進先出(FIFO)只能從隊列尾插入數據,只能從隊列頭刪除數據;
雙向隊列:既能夠從隊列尾/頭插入數據,也能夠從隊列頭/尾刪除數據;
3.5哈希表Hash
在通常的數組中,元素在數組中的下標位置是隨機的,元素的取值和元素的位置之間存在不肯定的關係;
所以數組在查找值時,須要把查找值和一系列的元素進行比較;此時的查詢效率依賴於查找過程當中所進行的比較次數;
若是元素的值(value)和數組中的下標(index)有一個肯定的對應關係(hash),
公式:index = hash(value);
這樣的數組就稱之爲哈希表,哈希表最大的用處就是提供查找數據的效率;
通常狀況不會把哈希碼(hashCode)做爲數組元素的下標,由於哈希碼較大,容易越界;能夠在哈希碼和下標之間作映射關係,
數組會記錄元素的添加順序,而且容許元素重複;
哈希表不會記錄元素的添加順序(哈希算法進行排序使之一一對應),不容許重複,緣由是:若是元素重複,致使哈希碼值相等,致使下標相等