为什么java都有数据结构,封装的已经非常好了,为什么还要出此课程呢,一开始我以为是运用已经有的方法做leetcode题目
来源:2-9 均摊复杂度和防止复杂度的震荡
qq_人生若只如初见_106
2018-12-28
为什么java都有数据结构,封装的已经非常好了,为什么还要出此课程呢,一开始我以为是运用已经有的方法做leetcode题目,重写的这些方法有什么用吗?
1回答
-
liuyubobobo
2018-12-29
当然有用啦!
1)所有领域的底层原理课程,都是在探讨已经实现好的技术,底层到底是怎么实现的。我们不能因为计算器可以直接帮助我们计算加减乘除,就不去学习加减乘除是怎么回事儿。我们也不能因为我们已经有成熟的操作系统可用,就不去探讨操作系统的原理;有成熟的编译器可用,就不去探讨编译器原理;有成熟的芯片可用,就不去探讨芯片的原理。
2)为什么所有领域都要探讨已经实现好的技术,底层到底是怎么回事儿?因为如果想改进已经实现好的技术,进而创新更优秀的技术,必须了解当下的技术,原理是怎样的,有什么限制,有什么假设,有什么优点,又有什么缺点。所谓站在巨人的肩膀上。只有了解了当下,才能着眼未来。
3)在具体应用上,也只有了解了这些数据结构的底层封装机理,才能更好的应用。在这个课程中,你将看到很多数据结构,从用户的角度看是一样的,但是由于底层机制不同,所以适用的场合不同。比如很快你将看到,动态数组和链表都是线性结构,但是包装成队列这种数据结构的时候,效率是不够的。因此,我们才会探讨循环队列的实现。
4)这个过程本身也是一个学习计算机技术,提高计算机思想的过程。你可以理解成课程中所处理的每一个问题,就是一个Leetcode上的问题。比如你看到这一小节,应该已经学会了动态数组的resize机制。resize这个机制本身,就是一个典型的技术问题。你不妨设想:Leetcode上有一个问题,让你尝试解决静态数组是“静态”这样的限制,要怎么做?答案就是resize。实际上,Leetcode作为经典的面试题库,就是因为其中隐含着大量的考察这类底层机制的问题。另一方面,功利的讲,从面试的角度,各个大厂的面试问题,本身也是考察这些已有技术的底层机制。
5)并不是课程中所讲的每一个数据结构,Java中都有封装的。比如这个课程中介绍的线段树,Trie和并查集,Java中都没有封装。要想使用这些数据结构解决问题,就必须自己从底层实现。实际上,越高级的数据结构,语言的标准库中越不会封装。学习高级数据结构的基础,就是先搞懂这些基础数据结构。
6)另一方面,Java语言属于在标准库中封装的数据结构最多的语言了。很多其他语言,连很多在Java中看是“标准的数据结构”,都没有封装。比如go。如果使用这些语言解决一些问题,就要自己从底层实现这些数据结构。甚至,很多项目本身,就是要提供更优秀的数据存储结构,乃至发明一门新的语言,对着门新的语言,提供更多底层数据结构支持。要完成这些项目,都需要扎实的基础数据结构的功底。
7)最后,如果你对Leetcode题目感兴趣,可能我的这个课程更适合你:https://coding.imooc.com/class/82.html
加油!:)
432020-02-16
相似问题