在我身边的玩过几年Java的编程水平不错的朋友对于Java版的数据结构都不怎么熟悉,以前上大学老师总是说数据结构多么重要,本人三月份抽空把数据结构几个核心概念,几个重要算法系统的研究了一遍,发现数据结构其实也没多少东西,堆栈,线性表,还有那几个算法,什么希尔排序,快速排序等等,well,这些对于我们java开发真的起很大作用?我们为了用个hashmap就需要去研究一下哈希算法?研究它怎么散射的,经过几次散射?有这么必要么?学那么多排序算法有用么??比如new个数组,直接调用其sort()方法,就自动选择优秀的排序来实现我们的目的,java把数据结构封装的这么好,我们有必要再去深入研究数据结构么?当然研究是没有坏处的,我认为没必要看的那么重要,研究它就好比去研究java的源代码,不要刻意去研究!java已经封装的很好了,我们不是比技术的,不是比算法的,不是比面子的,我们要的只有一个:实用!
解决方案 »
- while的写法问题
- 关于ScheduledThreadPoolExecutor的想法
- 问个比较棘手的问题
- 多线程监听端口的问题
- Java中有没有什么类来实现读写注册表文件?
- 全部的分求够JAVAMAIL教程下载的网址(最好的中文的)求求大家了急用
- 菜鸟请问<Thinking In Java>中的RMI例程PerfectTime的运行问题
- 我的机器崩溃拉!no stack trace available怎么解决??强制垃圾回收也不行!
- 有机会做软件工程方面工作,是放弃还是继续做Java的开发?
- i = 34;i>>>=32;i为什么还是34??????????????
- 新手求助!Eclipse中连接sqlserver2000数据库,用maven管理包,出现如下错误
- 正在学java,看了jdk感觉里面好多的类和方法都不怎么明白,好迷茫,是不是我不适合搞编程?
但如果java中没有现成的类和方法可用的时候你怎么来解决呢?比如你做游戏程序,那些寻路
算法什么的你用一哪一个类的哪一个方法来解决?在比如你在做一个程序,客户要求你能够识别
他们自己使用的一种类似脚本的东西比如:
addProduct name:="商品1",price:="25$",date:="30"
addProduct name:="商品2",price:="26$",date:="30"
addProduct name:="商品3",price:="27$",date:="30"
if *** then
end if
....
再比如你开发了一个报表组件用来显示Chart,为了提高通用性,需要时一个字段支持脚本,比如
total="($price*$count)+2"这时候你怎么做?
编译原理和数据结构属于内功心法,如果你只是练练散打和跆拳道什么的,体现不出他的价值,
能体现他的价值的地方在于你得到一本你没有见过别人也没见过的武功秘籍的时候,你必须有
足够的内功才可以
即便最简单的用处,做简单算法训练用,数据结构也很有用。你那个sort的用法就有很多限制。大量数据你也要这么sort么?肯定不是吧。分组排序怎么办?放数据库里面group by么?其实,在面向对象的语言中,讨论数据结构是不公平的。因为面向对象主要解决的是系统的结构问题,是让系统的结构接近人类认识的语言。而数据结构是上一个时代的核心,即面向过程的语言的核心——算法、数据。面向过程中,数据要保存在特定的数据结构中,通过算法完成功能。而面向对象讨论的最核心的价值是如何合理封装这些数据和算法。了解数据结构,对选择程序结构,选择方案,提出解决方法都有很大帮助。如果仅仅是以写代码的角度看,有分析,有设计,一切都明确,数据结构确实没有意义。可是那些分析和设计怎么来的呢?是不是有更高的解决办法?这东西,很有用,不是鸡肋,而是牛排:)
比如图和树中的好多实际问题的解决都要自己定义结构吧。
比如对一个巨大的文本文件中的数据进行排序的问题。
我觉得,应该是楼主没有真正遇到自己设计数据结构的情况。
还有一个原因,是因为Java比较开源,一些常用的数据结构都已经有源码了,所以,我们只拿来用就可以了。
但是,有些时候,了解数据结构,会对开发高效程序有帮助。
比如:有一个链表List<Date>,里面按时间早晚依次存放了四个时间对象,编写程序,
要求如果相邻两个时间对象其时差超过5小时,则以3个小时为时间间隔补全两者之间的空隙,
使得两者之间的所有相邻时间都不超过5小时。
在上述的条件下,如果我编程,就是用LinkedList<Date>来存放数据,因为,程序会频繁插入新数据。
另比如:C/S架构的游戏大厅程序,其服务端,
由于用户数量非常多(几十万以上),身份验证的响应时间过长(3秒以上)。
要求分离出1~2台服务器,专门做身份验证使用,由于访问数据库的响应时间也是瓶颈之一。
要求程序中在内存中直接使用缓存,缓存没有命中再去数据库中查询。
这时,如果你打算使用HashMap,那么,有几万容量的HashMap在创建对象的时候,就要考虑到散列算法了。
如果数据过于集中,将严重影响缓存效率。这种情况可以放弃使用TreeMap这种结构。
或者,需要程序设计人员,根据实际情况,设计一个高效的缓存。
我有几个从事java方面工作的同学都后悔大学里数据结构学的不够扎实呢。
其间有好多情况,都需要自行设计数据结构来完成某个流程的处理。
比如说,一个C/S版的聊天程序。如果只是公共聊天室的功能,那几乎不用涉及什么数据结构的知识。
但,如果添加私聊功能和文件传输功能呢?
尤其是文件传输功能,肯定是要自行设计通信协议来完成文件传输滴。
因为,Java里面的File对象和Socket对象,并不可以序列化,所以,不能直接传输。
而通信协议的设计,必然要包含数据结构的相关内容。J2EE方面的开发,之所以用到自行设计数据结构的情况比较少。
我理解,是因为,现有的框架是程序员都专注在业务逻辑的处理上面了。(这个是很好滴)
而,业务逻辑,则,多数情况是进行数据库的交互。
通过数据库的交互,可以省去很多自行设计数据结构的情况。比如,统计当前网站的在线人数,我们可以将这个数值写到数据库的单行表里。
也可以写一个线程安全的数据结构来保存到内存当中,定时回写到数据库中。
小型项目,一般都直接写到数据库里完事,因为,网站的并发访问并不高。
如果lz真正想要学好,数据结构是相当重要的!
一些高级语言做成通用的组件封装起来了。可能有人会要说,我们学数据结构和算法是学习其中的思想。实际上我认为这也是学习的理由之一,
但是中国的学校有个特点——应试教育,除了书上讲到的之外其他的几乎不会去考,更不可能在考
试时让大家去设计一个数据结构或者算法。虽然说《数据结构》和《算法》这些课程是计算机专业的必修专业课,在国内开课也有几十年了,
虽然说国际 XX 计算机程序设计大赛中国学生包揽了前 X 名,但是能以中国人名字命名的,让全
世界学生学习的东西根本就不存在!总结一下就是我们不会学以致用,不会举一反三。
人学到东西。比如在讲到栈的时候,举了 PostScript 语言的例子(据作者称是算法教材中首次采用 PostScript 语
言进行举例),讲描述了 PostScript 一些基本的语法规范,最后在练习中给出一小段 PostScript 代
码段,让大家在 Java 面板中将这个 PostScript 代码段所描述的图形画出来。如果我们的教材都有这些生动的示例,有这些看得见的东西,我想我们学习数据结构和算法的效果和效
率会提高很多很多。