在我身边的玩过几年Java的编程水平不错的朋友对于Java版的数据结构都不怎么熟悉,以前上大学老师总是说数据结构多么重要,本人三月份抽空把数据结构几个核心概念,几个重要算法系统的研究了一遍,发现数据结构其实也没多少东西,堆栈,线性表,还有那几个算法,什么希尔排序,快速排序等等,well,这些对于我们java开发真的起很大作用?我们为了用个hashmap就需要去研究一下哈希算法?研究它怎么散射的,经过几次散射?有这么必要么?学那么多排序算法有用么??比如new个数组,直接调用其sort()方法,就自动选择优秀的排序来实现我们的目的,java把数据结构封装的这么好,我们有必要再去深入研究数据结构么?当然研究是没有坏处的,我认为没必要看的那么重要,研究它就好比去研究java的源代码,不要刻意去研究!java已经封装的很好了,我们不是比技术的,不是比算法的,不是比面子的,我们要的只有一个:实用!

解决方案 »

  1.   

    确实,搞java的用不到什么数据结构算法,很多时候处理业务逻辑的话连操作系统和网络IO都用不到了。
      

  2.   

    你说的那些没错,如果你只用到HashMap和Arrays.sort()这些,学不学数据结构对你影响不大。
    但如果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"这时候你怎么做?
    编译原理和数据结构属于内功心法,如果你只是练练散打和跆拳道什么的,体现不出他的价值,
    能体现他的价值的地方在于你得到一本你没有见过别人也没见过的武功秘籍的时候,你必须有
    足够的内功才可以
      

  3.   

    那你就是拿来主义者了。如果你只想做个小JAVA程序员,确实,数据结构没多大用处,因为JAVA API都为你准备好了。如果你想在JAVA方面(包括其他所有的编程语言)有很深的发展,那么数据结构必不可少,可以说是重中之重!不学?那永远只能做个门外汉!
      

  4.   

    能更加深入的学习当然重要了,JAVA虽说封装好了,但不理解一下,只停留在上面用下,至于下面是怎么实现的不知道,感觉心里慌慌的。
      

  5.   

    那东西很重要,应该从另外一个角度看待数据结构的问题。
    即便最简单的用处,做简单算法训练用,数据结构也很有用。你那个sort的用法就有很多限制。大量数据你也要这么sort么?肯定不是吧。分组排序怎么办?放数据库里面group by么?其实,在面向对象的语言中,讨论数据结构是不公平的。因为面向对象主要解决的是系统的结构问题,是让系统的结构接近人类认识的语言。而数据结构是上一个时代的核心,即面向过程的语言的核心——算法、数据。面向过程中,数据要保存在特定的数据结构中,通过算法完成功能。而面向对象讨论的最核心的价值是如何合理封装这些数据和算法。了解数据结构,对选择程序结构,选择方案,提出解决方法都有很大帮助。如果仅仅是以写代码的角度看,有分析,有设计,一切都明确,数据结构确实没有意义。可是那些分析和设计怎么来的呢?是不是有更高的解决办法?这东西,很有用,不是鸡肋,而是牛排:)
      

  6.   

    如果想写代码写到死,那就不用去学了。但是叫你在几百万,几亿条数据中去查找去排序,还用java提供的方法吗?楼主可以试一试?
      

  7.   

    API不可能封装了所有的数据结构和算法
    比如图和树中的好多实际问题的解决都要自己定义结构吧。
    比如对一个巨大的文本文件中的数据进行排序的问题。
      

  8.   

    额。。
    我觉得,应该是楼主没有真正遇到自己设计数据结构的情况。
    还有一个原因,是因为Java比较开源,一些常用的数据结构都已经有源码了,所以,我们只拿来用就可以了。
    但是,有些时候,了解数据结构,会对开发高效程序有帮助。
    比如:有一个链表List<Date>,里面按时间早晚依次存放了四个时间对象,编写程序,
    要求如果相邻两个时间对象其时差超过5小时,则以3个小时为时间间隔补全两者之间的空隙,
    使得两者之间的所有相邻时间都不超过5小时。
    在上述的条件下,如果我编程,就是用LinkedList<Date>来存放数据,因为,程序会频繁插入新数据。
    另比如:C/S架构的游戏大厅程序,其服务端,
    由于用户数量非常多(几十万以上),身份验证的响应时间过长(3秒以上)。
    要求分离出1~2台服务器,专门做身份验证使用,由于访问数据库的响应时间也是瓶颈之一。
    要求程序中在内存中直接使用缓存,缓存没有命中再去数据库中查询。
    这时,如果你打算使用HashMap,那么,有几万容量的HashMap在创建对象的时候,就要考虑到散列算法了。
    如果数据过于集中,将严重影响缓存效率。这种情况可以放弃使用TreeMap这种结构。
    或者,需要程序设计人员,根据实际情况,设计一个高效的缓存。
      

  9.   

    这个还是根据个人情况来了。
    我有几个从事java方面工作的同学都后悔大学里数据结构学的不够扎实呢。
      

  10.   

    我从事Java方面的工作,也有2~3年的时间了。
    其间有好多情况,都需要自行设计数据结构来完成某个流程的处理。
    比如说,一个C/S版的聊天程序。如果只是公共聊天室的功能,那几乎不用涉及什么数据结构的知识。
    但,如果添加私聊功能和文件传输功能呢?
    尤其是文件传输功能,肯定是要自行设计通信协议来完成文件传输滴。
    因为,Java里面的File对象和Socket对象,并不可以序列化,所以,不能直接传输。
    而通信协议的设计,必然要包含数据结构的相关内容。J2EE方面的开发,之所以用到自行设计数据结构的情况比较少。
    我理解,是因为,现有的框架是程序员都专注在业务逻辑的处理上面了。(这个是很好滴)
    而,业务逻辑,则,多数情况是进行数据库的交互。
    通过数据库的交互,可以省去很多自行设计数据结构的情况。比如,统计当前网站的在线人数,我们可以将这个数值写到数据库的单行表里。
    也可以写一个线程安全的数据结构来保存到内存当中,定时回写到数据库中。
    小型项目,一般都直接写到数据库里完事,因为,网站的并发访问并不高。
      

  11.   

    学东西还是要学的深入点好,不错,在java中有许多数据结构可能是封装了的,但作为一个程序员不可能将来只是学这一种语言,毕竟这只是一种工具.学语言难的不是它的语法,语法和用法相对其他方面算简单的了,关键是要了解一些具体的算法,这才是难点.
    如果lz真正想要学好,数据结构是相当重要的!
      

  12.   

    现在来说真的是没多大用处(不是说一点用都没),很多人说为了以后的发展,那有多少人以后会去搞科研一样的搞JAVA?我们做JAVA,就只是为了赚钱,而不是为了开发个操作系统什么的。那些自以为数据结构很精通的人,一个月能赚几个钱?
      

  13.   

    主要现在学校中学的数据结构和算法都是些几十年前的研究成果,这些数据结构和算法老早就被
    一些高级语言做成通用的组件封装起来了。可能有人会要说,我们学数据结构和算法是学习其中的思想。实际上我认为这也是学习的理由之一,
    但是中国的学校有个特点——应试教育,除了书上讲到的之外其他的几乎不会去考,更不可能在考
    试时让大家去设计一个数据结构或者算法。虽然说《数据结构》和《算法》这些课程是计算机专业的必修专业课,在国内开课也有几十年了,
    虽然说国际 XX 计算机程序设计大赛中国学生包揽了前 X 名,但是能以中国人名字命名的,让全
    世界学生学习的东西根本就不存在!总结一下就是我们不会学以致用,不会举一反三。
      

  14.   

    看过 Robert Sedgewick 的《Java 算法》,这种的效果不愧是老外写的,只要看看其中的例子就能让
    人学到东西。比如在讲到栈的时候,举了 PostScript 语言的例子(据作者称是算法教材中首次采用 PostScript 语
    言进行举例),讲描述了 PostScript 一些基本的语法规范,最后在练习中给出一小段 PostScript 代
    码段,让大家在 Java 面板中将这个 PostScript 代码段所描述的图形画出来。如果我们的教材都有这些生动的示例,有这些看得见的东西,我想我们学习数据结构和算法的效果和效
    率会提高很多很多。