Java数据结构和算法(一)——开篇

这篇文章里面不讲技术,抽空讲讲技术和通俗之间有一种奇特的关系,还有驱动力学习的东西。看的是——《Java数据结构算法》一书,作者Robert Lafore。


1)数据结构算法有什么用?

当你用着java里面的容器类很爽的时候,你有没有想过,怎么ArrayList就像一个无限扩充的数组,也好像链表之类的。好用吗?好用,这就是数据结构的用处,只不过你在不知不觉中使用了。


校招会发现大公司考的就是这类的题目,刚开始不会考你java的线程,容器,多态什么的特性,考的就是你的基础,你的这些基础扎实,学其他不是问题。


正如作者所说,用于现实世界的存储,我们使用的工具和建模。每种数据结构有自己的优点和缺点,想想如果Google的数据用的是数组的存储,我们还能方便地查询到所需要的数据吗。

而算法,在这么多的数据中如何做到最快的插入,查找,删除,也是在追求更快。


第一章也把数据库,面向对象,软件工程(原来整个软件工程项目的生命周期包括分析、设计、验证编码、测试、生产和维护几个阶段)讲了个大概




2)技术与通俗

大学里面那本严蔚敏的数据结构不厚,内容丰富,但是复杂问题的讲解方面篇幅这样就少了,比较难理解,c也不是很擅长,但是基本的思路还是有的。

简单的链表,数组,堆栈,队列,图,几个排序算法。


后面看到知乎涛吴的回答,当时很震撼,这里引用一下他的回答:


如果说 Java 是自动档轿车,C 就是手动档吉普。数据结构呢?是变速箱的工作原理。你完全可以不知道变速箱怎样工作,就把自动档的车子从 A 开到 B,而且未必就比懂得的人慢。写程序这件事,和开车一样,经验可以起到很大作用,但如果你不知道底层是怎么工作的,就永远只能开车,既不会修车,也不能造车。如果你对这两件事都不感兴趣也就罢了,数据结构懂得用就好。但若你此生在编程领域还有点更高的追求,数据结构是绕不开的课题。

Java 替你做了太多事情,那么多动不动还支持范型的容器类,加上垃圾收集,会让你觉得编程很容易。但你有没有想过,那些容器类是怎么来的,以及它存在的意义是什么?最粗浅的,比如 ArrayList 这个类,你想过它的存在是多么大的福利吗——一个可以随机访问、自动增加容量的数组,这种东西 C 是没有的,要自己实现。但是,具体怎么实现呢?如果你对这种问题感兴趣,那数据结构是一定要看的。甚至,面向对象编程范式本身,就是个数据结构问题:怎么才能把数据和操作数据的方法封装到一起,来造出 class / prototype 这种东西?

此外,很重要的一点是,数据结构也是通向各种实用算法的基石,所以学习数据结构都是提升内力的事情。


反正我有醍醐灌顶的感觉,好比说,我有在编程上更厉害的追求,怎么能死在数据结构上的感觉。


其实要将一门难懂的技术通俗地讲给不懂的人听,需要很大的功力,包括之前我写的那篇《C与指针》刚开始的时候,那个C语言有什么用回答也是他写的,我很佩服这样的人。


所以当你能把一件东西清楚的讲解给别人听,类似前几篇文章提到的橡皮鸭调试法一样,你搞懂了,摸清楚了。跟一个技术人士用技术的语言讲解,非专业人士通俗语言讲解。


当然了,前提需要积累。具体可以参见一下CSDN里面关于罗升阳的访谈——

专访罗升阳:老罗的Android之旅

当时吓了我一跳,之前以为和那个老罗同个级别的年龄,后面发现好年轻的小伙子,积累,慢慢积累。



3)驱动力学习

当你看到你自己玩过的马里奥可以自己写出来的时候是不是心动了?顿时学习的驱动力是不是有了——我要做一个这样的东西出来,然后开始学,直到自己动手完成。


当时我在大学里就在推算,按照我这个学习速度,10年之后那也可以牛逼哄哄啊。有些人为什么技术没有提升,几年之后还是那样,因为驱动力的东西,有段时间我曾经停下来过,Java的差不多都学完了,干什么?


因为从J2SE到EE的东西,大体的看完做过,然后就有一段迷茫期了,驱动力也没有了。后面意识到自己太肤浅了,还有其他一些热门的框架没用,最好的单例你写出来了吗,虚拟机你深入了吗,Java还有很多经典书籍没看呢?

以学习新知识为驱动力也是可以的,期间不停地学到新知识是很有成就感和很兴奋的东西——原来是这样xx。


还有一种——目标驱动,当时要做一个网络相关的东西——想到了爬虫,然后以做出这东西为目的,收集资料,看别人的代码,这样的驱动力学习也是可以的。工作的时候,如果目标只放在工作的项目,每次的项目都有新的东西在里面,那是可以学到东西的,一成不变的话,只能自己去发掘了。

不然哪有那个学习到半夜的——专访雷果国:从1.5K到18K 一个程序员的5年成长之路。


我要学Python,学了之后会发现,原来真的很牛逼,可以尝试用Python写个爬虫,GoAgent之类的。这便是进步。



扯了那么多,就是不希望自己只懂的用Java做xx系统,只懂得用容器而永远不知道里面是怎样的。这些作为根基的懂了,其他也好学。


说回数据结构这个,为什么很多学生听课听得想睡,xx链表,双向链表,我排序都有N种,学生的想法是这不知道有什么用,你讲链表给我,我把它实现一次,完事。


但当你生活中的编程问题需要解决的时候,你会发现到处都是数据结构的使用,像基金买入买出不是队列吗,先进先出;像简单的一个班级学生的数据保存,用个数组不就可以解决了吗;再复杂的游戏路线问题,这不是图的问题吗;Java里面有Tree这字的,其实不也是用到树的原理吗?


种种下来,你会发现,原来现实问题和语言里面的封装,都是和这些有联系的,每当你学会一种,就会恍然大悟,这不就是当年西湖河畔的夏雨荷,就是这种感觉。而学生在没有想过这些问题和没真正去使用这些语言的封装类之前,是不会考虑到上面所说的东西的。


所以,一大群学生趴在那里睡觉玩手机是正常的。


后面自己意识到之后,马上去买了《Java数据结构和算法》,补回之前没学和没弄懂的。


不想学好基础的程序员不是好的程序员。

转自:http://blog.csdn.net/iaiti/article/details/39268173

Java基础系列课程 ppt 和 源码 Java数据结构算法第七讲.avi Java数据结构算法第三十一讲.avi Java数据结构算法第三十七讲.avi Java数据结构算法第三十三讲.avi Java数据结构算法第三十九讲.avi Java数据结构算法第三十二讲.avi Java数据结构算法第三十五讲.avi Java数据结构算法第三十八讲.avi Java数据结构算法第三十六讲.avi Java数据结构算法第三十四讲.avi Java数据结构算法第三十讲.avi Java数据结构算法第九讲.avi Java数据结构算法第二十一讲.avi Java数据结构算法第二十七讲.avi Java数据结构算法第二十三讲.avi Java数据结构算法第二十九讲.avi Java数据结构算法第二十二讲.avi Java数据结构算法第二十五讲.avi Java数据结构算法第二十八讲.avi Java数据结构算法第二十六讲.avi Java数据结构算法第二十四讲.avi Java数据结构算法第二十讲.avi Java数据结构算法第八讲.avi Java数据结构算法第六讲.avi Java数据结构算法第十一讲.avi Java数据结构算法第十七讲.avi Java数据结构算法第十三讲.avi Java数据结构算法第十九讲.avi Java数据结构算法第十二讲.avi Java数据结构算法第十五讲.avi Java数据结构算法第十八讲.avi Java数据结构算法第十六讲.avi Java数据结构算法第十四讲.avi Java数据结构算法第十讲.avi Java数据结构算法第四十一讲.avi Java数据结构算法第四十三讲.avi Java数据结构算法第四十二讲.avi Java数据结构算法第四十四讲.avi Java数据结构算法第四十讲.avi 第一讲.exe 第三讲.exe 第二讲.exe 第五讲.exe 第四讲.exe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值