達內廣州IT培訓
美國上市IT培訓機構

18589266248

熱門課程

Java數據結構和算法(一)開篇

  • 時間:2018-04-28 15:47
  • 發布:廣州達內
  • 來源:達內新聞

這篇文章里面不講技術,抽空講講技術和通俗之間有一種奇特的關系,還有驅動力學習的東西。看的是——《Java數據結構和算法》一書,作者Robert Lafore。

(1)數據結構算法有什么用?

當你用著java里面的容器類很爽的時候,你有沒有想過,怎么ArrayList就像一個無限擴充的數組,也好像鏈表之類的。好用嗎?好用,這就是數據結構的用處,只不過你在不知不覺中使用了。

校招會發現大公司考的就是這類的題目,剛開始不會考你java的線程,容器,多態什么的特性,考的就是你的基礎,你的這些基礎扎實,學其他不是問題。

正如作者所說,用于現實世界的存儲,我們使用的工具和建模。每種數據結構有自己的優點和缺點,想想如果Google的數據用的是數組的存儲,我們還能方便地查詢到所需要的數據嗎。

而算法,在這么多的數據中如何做到最快的插入,查找,刪除,也是在追求更快。

第一章也把數據庫,面向對象,軟件工程(原來整個軟件工程項目的生命周期包括分析、設計、驗證編碼、生產和維護幾個階段)講了個大概。

(2)技術與通俗

大學里面那本嚴蔚敏的數據結構不厚,內容豐富,但是復雜問題的講解方面篇幅這樣就少了,比較難理解,c也不是很擅長,但是基本的思路還是有的。

簡單的鏈表,數組,堆棧,隊列,圖,幾個排序算法。

后面看到知乎濤吳的回答,當時很震撼,這里引用一下他的回答:

如果說 Java 是自動檔轎車,C 就是手動檔吉普。數據結構呢?是變速箱的工作原理。你完全可以不知道變速箱怎樣工作,就把自動檔的車子從 A 開到 B,而且未必就比懂得的人慢。寫程序這件事,和開車一樣,經驗可以起到很大作用,但如果你不知道底層是怎么工作的,就永遠只能開車,既不會修車,也不能造車。如果你對這兩件事都不感興趣也就罷了,數據結構懂得用就好。但若你此生在編程領域還有點更高的追求,數據結構是繞不開的課題。

Java 替你做了太多事情,那么多動不動還支持范型的容器類,加上垃圾收集,會讓你覺得編程很容易。但你有沒有想過,那些容器類是怎么來的,以及它存在的意義是什么?最粗淺的,比如 ArrayList 這個類,你想過它的存在是多么大的福利嗎——一個可以隨機訪問、自動增加容量的數組,這種東西 C 是沒有的,要自己實現。但是,具體怎么實現呢?如果你對這種問題感興趣,那數據結構是一定要看的。甚至,面向對象編程范式本身,就是個數據結構問題:怎么才能把數據和操作數據的方法封裝到一起,來造出 class / prototype 這種東西?

此外,很重要的一點是,數據結構也是通向各種實用算法的基石,所以學習數據結構都是提升內力的事情。

反正我有醍醐灌頂的感覺,好比說,我有在編程上更厲害的追求,怎么能死在數據結構上的感覺。

所以當你能把一件東西清楚的講解給別人聽,類似前幾篇文章提到的橡皮鴨調試法一樣,你搞懂了,摸清楚了。跟一個技術人士用技術的語言講解,非專業人士通俗語言講解。

當然了,前提需要積累。

達內IT學校

(3)驅動力學習

當你看到你自己玩過的馬里奧可以自己寫出來的時候是不是心動了?頓時學習的驅動力是不是有了——我要做一個這樣的東西出來,然后開始學,直到自己動手完成。

當時我在大學里就在推算,按照我這個學習速度,10年之后那也可以牛逼哄哄啊。有些人為什么技術沒有提升,幾年之后還是那樣,因為驅動力的東西,有段時間我曾經停下來過,Java的差不多都學完了,干什么?

因為從J2SE到EE的東西,大體的看完做過,然后就有一段迷茫期了,驅動力也沒有了。后面意識到自己太膚淺了,還有其他一些熱門的框架沒用,最好的單例你寫出來了嗎,虛擬機你深入了嗎,Java還有很多經典書籍沒看呢?

以學習新知識為驅動力也是可以的,期間不停地學到新知識是很有成就感和很興奮的東西——原來是這樣xx。

還有一種——目標驅動,當時要做一個網絡相關的東西——想到了爬蟲,然后以做出這東西為目的,收集資料,看別人的代碼,這樣的驅動力學習也是可以的。工作的時候,如果目標只放在工作的項目,每次的項目都有新的東西在里面,那是可以學到東西的,一成不變的話,只能自己去發掘了。

不然哪有那個學習到半夜的——雷果國

學了之后會發現,原來真的很牛逼,可以嘗試用Python寫個爬蟲,GoAgent之類的。這便是進步。

扯了那么多,就是不希望自己只懂的用Java做xx系統,只懂得用容器而永遠不知道里面是怎樣的。這些作為根基的懂了,其他也好學。

說回數據結構這個,為什么很多學生聽課聽得想睡,xx鏈表,雙向鏈表,我排序都有N種,學生的想法是這不知道有什么用,你講鏈表給我,我把它實現一次,完事。

但當你生活中的編程問題需要解決的時候,你會發現到處都是數據結構的使用,像基金買入買出不是隊列嗎,先進先出;像簡單的一個班級學生的數據保存,用個數組不就可以解決了嗎;再復雜的游戲路線問題,這不是圖的問題嗎;Java里面有Tree這字的,其實不也是用到樹的原理嗎?

種種下來,你會發現,原來現實問題和語言里面的封裝,都是和這些有聯系的,每當你學會一種,就會恍然大悟,這不就是當年西湖河畔的夏雨荷,就是這種感覺。而學生在沒有想過這些問題和沒真正去使用這些語言的封裝類之前,是不會考慮到上面所說的東西的。

所以,一大群學生趴在那里睡覺玩手機是正常的。

不想學好基礎的程序員不是好的程序員。

上一篇:Java升職加薪必備術
下一篇:常問問題:C語言與Java編程的區別是什么?

馬上預約三天免費體驗課

姓名:

電話:

Linux的發展前景怎么樣_如何速成Linux

ios和C語言為什么越來越受重視_零基礎怎么學

什么是云計算 云計算應該怎么學

HTML5的內容有哪些 HTML5的就業前景怎么樣

選擇城市和中心
江西省

貴州省

廣西省

海南省

中文字幕综合