JAVA學習總結-常用數據結構


java中集合框架其實就是數據結構的實現的封裝;

參考資料:任小龍教學視頻

 

1,什么是數據結構?

數據結構是計算機存儲,組織數據的方式;

數據結構是指相互之間存在一種或多種特定關系的數據元素的集合;

通常情況下,精心選擇的數據結構可帶來更高的運行或者存儲效率,

數據結構往往同高效的檢索算法和索引技術有關;

 

2,數據結構的基本功能

增(Create)  刪(Delete)   改(Update)  查(Read)

 

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)作為數組元素的下標,因為哈希碼較大,容易越界;可以在哈希碼和下標之間做映射關系,

 

數組會記錄元素的添加順序,並且允許元素重復;

哈希表不會記錄元素的添加順序(哈希算法進行排序使之一一對應),不允許重復,原因是:如果元素重復,導致哈希碼值相等,導致下標相等

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM