谢谢邀请! 程序员想拔高一个层次,数据结构和算法只是很小一部分,但却是很重要的一部分。 有时候,我们需要一个标准去判断一段程序的好坏,基于什么呢?其实很多方面,比如说可读性,可扩展性等等,但还有一个可以量化的标准,就是空间和时间复杂度的分析。这是算法的内容。 有些朋友可能觉得自己日常不太去写算法,数据结构和算法就用不上了。其实不写不代表不用。 我觉得会分析比会写更重要,也更常用,有些算法不是让你去写的,比如说AVL,比如说B+树,可能你除了学校里的作业,一辈子也不会实现一个出来.但你学会了分析和比较类似算法的能力, 有了搜索树的知识,你才能真正理解为什么要用数据库的索引,你才能明白 like "abc%"会不会使用索引的问题,而不是人云亦云。 再举个例子,你有个链表,你想用快速排序,怎么办?有想过吗?网上有现成的答案,实现和使用数组的版本比有很多的不同。为什么会这样?这时候你有没有想过用MergeSort或许更容易些?或者把链表里的数据放到数组中再进行快速排序?这些办法到底哪个好呢? 可以看到java8 Arrays.sort用的quicksort,Collections.sort是改良过的mergesort,这里有很多讨论,大家可以自己搜搜,其实就是各种权衡。但怎么权衡的呢,用上面提到的时间和空间复杂度分析。 还有一个常用例子,java中override equals之后一定要override hashcode,这是为什么?这不懂hash table的话,打破头也想不明白吧,就只能死记硬背了。 |