更新時間:2021-06-07 15:25:08 來源:動力節點 瀏覽3396次
今天小編就采用Java語言來進行描述,幫大家好好梳理一下數據結構與算法,在工作和面試中用的上,亦即總結常見的的數據結構,以及在Java中相應的實現方法,務求理論與實踐一步總結到位。
數組是相同數據類型的元素按一定順序排列的集合,是一塊連續的內存空間。數組的優點是:get和set操作時間上都是O(1)的;缺點是:add和remove操作時間上都是O(N)的。
Java中,Array就是數組,此外,ArrayList使用了數組Array作為其實現基礎,它和一般的Array相比,最大的好處是,我們在添加元素時不必考慮越界,元素超出數組容量時,它會自動擴張保證容量。
Vector和ArrayList相比,主要差別就在于多了一個線程安全性,但是效率比較低下。如今java.util.concurrent包提供了許多線程安全的集合類(比如LinkedBlockingQueue),所以不必再使用Vector了。
鏈表是一種非連續、非順序的結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的,鏈表由一系列結點組成。鏈表的優點是:add和remove操作時間上都是O(1)的;缺點是:get和set操作時間上都是O(N)的,而且需要額外的空間存儲指向其他數據地址的項。
查找操作對于未排序的數組和鏈表時間上都是O(N)。
Java中,LinkedList使用鏈表作為其基礎實現。
//以上方法也適用于ArrayList
隊列
隊列是一種特殊的線性表,特殊之處在于它只允許在表的前端進行刪除操作,而在表的后端進行插入操作,亦即所謂的先進先出(FIFO)。
Java中,LinkedList實現了Deque,可以做為雙向隊列(自然也可以用作單向隊列)。另外PriorityQueue實現了帶優先級的隊列,亦即隊列的每一個元素都有優先級,且元素按照優先級排序。
棧
棧(stack)又名堆棧,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。它體現了后進先出(LIFO)的特點。
Java中,Stack實現了這種特性,但是Stack也繼承了Vector,所以具有線程安全線和效率低下兩個特性,最新的JDK8中,推薦用Deque來實現棧,比如:
集合
集合是指具有某種特定性質的具體的或抽象的對象匯總成的集體,這些對象稱為該集合的元素,其主要特性是元素不可重復。
在Java中,HashSet體現了這種數據結構,而HashSet是在MashMap的基礎上構建的。LinkedHashSet繼承了HashSet,使用HashCode確定在集合中的位置,使用鏈表的方式確定位置,所以有順序。TreeSet實現了SortedSet接口,是排好序的集合(在TreeMap基礎之上構建),因此查找操作比普通的Hashset要快(log(N));插入操作要慢(log(N)),因為要維護有序。
最后,數據結構和算法是軟件開發行業基礎課程,也是每一位工程師應該熟練使用和掌握一門專業課。大學校招和大型互聯網公司(華為,阿里巴巴,百度,京東,美團,字節跳動等等)招聘中基本要求熟練使用數據結構和算法。數據結構和算法是我們走進大型公司一個階梯,也是走向高薪必須學習的一條路,而往往很多工程師只對數據結構和算法簡單了解甚至沒有接觸過,與擺在面前的機會失之交臂。
動力節點Java數據結構視頻教程,課程學習過后會讓你對結構化數據有新的認識,不再盲目的一直壘磚,一個華麗的轉身近距離接觸身邊大牛。目前市面上有C語言版的數據結構和算法,也有C++版的數據結構和算法,那么本課程我們使用java語言來傳授數據結構和算法,避免了跨語言學習,更輕松的學習這門課程。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習