请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

为什么java都有数据结构,封装的已经非常好了,为什么还要出此课程呢,一开始我以为是运用已经有的方法做leetcode题目

为什么java都有数据结构,封装的已经非常好了,为什么还要出此课程呢,一开始我以为是运用已经有的方法做leetcode题目,重写的这些方法有什么用吗?

正在回答 回答被采纳积分+3

1回答

liuyubobobo 2018-12-29 00:27:12

当然有用啦!


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


加油!:)

4 回复 有任何疑惑可以回复我~
  • 我就是看这个课程所以以为这个课程是 leetcode java版的 ,我觉得有很多同学应该跟我的想法是一样的
    回复 有任何疑惑可以回复我~ 2018-12-30 22:37:39
  • 两门课程无论是题目,宣传页面,和具体的章节列表都完全不同。两门课程的内容近乎没有重叠。两门课程的课程导学视频也完全不同,在课程导学中完整的说明了整个课程的学习内容。你是第一个提出这个问题的同学。如果你认为慕课网的宣传页面有问题导致你购买错误,请在慕课网网页端意见反馈联系慕课网。讲师主要在问答区回答同学们学习中的问题,完全不参与销售,宣传等环节。我想给你退课也无法操作:-(。
    回复 有任何疑惑可以回复我~ 2018-12-30 23:45:59
  • ciggii 回复 提问者 qq_人生若只如初见_106 #3
    你怕不是个傻子哟
    回复 有任何疑惑可以回复我~ 2020-02-16 18:06:04
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信