感觉java的数据结构好难理解 
C/C++的数据结构代码我看一遍基本上就能看懂 
用java写的数据结构我看很多遍都不一定能看懂 
谁给我说一下java写数据结构的一些思想 不像C/C++用指针指来指去的感觉很直观明了 我很喜欢goto那种逻辑

解决方案 »

  1.   

    C/C++效率更高,但出错的可能性也更高。特别是引以为自豪的指针和goto用好了真的是...... 并不好更是 ....成也萧何,败也萧何!我学过3年的C,没学过C++,直接转到JAVA了,为了糊口而已。挣钱的工具,只能热爱了!(不热爱就不转行IT了)
      

  2.   

    java写数据结构的一些思想要是实在想不通的话,可以看看《JAVA编程思想》,于是就可以有思想了:)用指针跳来跳去是为自己能看懂,面向对象的编程及设计模式是为了让所有程序员都能轻易看懂。
      

  3.   

    java 的引用在一定程度上实现指针功能。C++跟java相差不是很大,java是比从c++更纯的OOP。现在好多数据结构的书都是C++描述的。数据结构本人认为重点是看算法思想,用什么去描述并不是很重要了。本人是新手,只是发表个人的看法,如有不妥,请高手指点纠正。本人一定虚心听取。
      

  4.   

    你很喜欢goto么?那么java一样可以满足你。
      

  5.   

    感觉Java的更好理解,哈!
    不过C++语言确实是更加自由,因为有指针!
      

  6.   

    我也是刚学的java,不过我觉得要比C简单,一位我学C的时候指针那块就很模糊,所以不太懂,不过现在看点简单的C还是没有问题的。java的数据结构其实也挺好学的,你换一下思想试试。
      

  7.   

    因为你可能读通了C/C++的代码,理解透了.而你对java还是一知半解,没有理解透,所以会觉得java比C/C++难.以后你对Java理解透了,就会把想法转过来了.
      

  8.   

    说明楼主的思维还没有转到面向对象上来,对面向过程还有着很深的“感情”
    确实,我学了N年的Basic,那个时候对GOTO的使用很得心应手,现在反而不会用了。这是个习惯的问题。
    数据结构和算法的重点显然是非面向对象的,更多偏重于过程的刻画。C++在刻画过程上很清楚,值的复制还是引用很明了。
    PS:面向对象,还有纯面向对象这种噱头就不要拿出来了,蒙蒙初学者倒是不错。
    C++支持的不仅仅是面向对象,还有面向过程,泛型编程等多范式编程。如果你的代码量不够的话,或者只会写接口和类,就很难体会到这一点的重要性。
    面向对象尽管是软件开发中的很重要的东西,不是软件开发的全部。
    太多人对C++有偏见了,认为C++是和C一样很靠近操作系统的东西,很底层,很难学。C++只是提供了这种能力而已,而C++也提供了更高级的语法和类库。还有老紫竹说的:“特别是引以为自豪的指针和goto ”
    C++从来不会以GOTO而自豪的,但是实际上GOTO有的时候是很好用的,在松本行宏的Ruby 手工Lex里很多GOTO的,效率高了。
    如果真的想把数据结构看得很透澈,可以看《算法导论》,代码看C++的STL,书可以参考《STL源码剖析》。那你所得到的知识就是最实在的知识了。
    最后,算法和数据结构是为了把实际问题抽象为数学的理论,理论上在链表中Insert和Delete元素要比数组效率高,但是这个只是理论。
    在《C++ Primer》里分析了为什么vector往往效率高于list的原因,很清晰。它讲了内存copy等速度的问题。
    而Java,ArrayList,你要知道它多少的信息才能真的确定它的效果呢?你可能都无法知道add一个元素会真正引发什么样的内存和寄存器操作,可能在准备调用add的时候就已经经历了一次“add”的查找呢(Java里不是这样的,但是Ruby是这样的)。所以你所学到的东西太“正龙拍虎”了。
      

  9.   

    数据结构说是语言无关的,但是这里基本是指代那些可以访问内存的语言,比如C。
    如果你想让你的数据结构和算法有更好的实用价值,那么用Delphi。
    但是如果你想要它们类型安全,那么用C++ templates。
      

  10.   

    关于GOTO的问题,可以看看那几个星星的发言
    http://topic.csdn.net/u/20080127/02/a573bca0-393a-403c-8699-00be680e4477.html
      

  11.   

    那我怎么觉得从c++比Java难呢?
    其实只要你用的熟练了,深入了,都会化繁为简的~
      

  12.   

    楼上的辛苦了 呵呵 我觉得算法跟数据结构不是一个概念 算法是思想 数据结构是骨架 我能看懂C++描述的数据结构 说明思想我能理解 但是用java语言我搭不起来这个骨架 现在的问题就是这个 所以想请教java写数据结构跟C++的核心区别在哪 感觉C++好像一个箱子外面贴了张标签 然后按这个标签可以找到下一个箱子 java感觉就一个光秃秃的箱子 打开这个箱子发现下一个箱子装在这里面 是不是这样
      

  13.   

    我不是太明白你的箱子是什么意思,我猜想你可能是不熟悉Java的引用语义,
    Java延用了C++的语法,和Smalltalk(还是Effil,我记不清了)的引用语义。
    如果是这点,你应该看看Thinking In Java关于句柄的一个小节。这和C++的指针是一个语义的,只不过不能对指针值进行加减运算而已。
      

  14.   

    java不是以数据结构为中心了吧?如果是,那么80%的JAVA程序员都是不合格的。
      

  15.   

    感觉JAVA的上手要难一些,因为JAVA的语法局限性太强了,C写东西很随意,怎么写怎么是,所以上手容易一些。
      

  16.   

    天哪,什么世道啊,还有觉得Java上手难的,我觉得Java是我见过语言里最简单的一种了,比它简单的就是Python了。
      

  17.   

    java 上手太简单了  比VB还简单
      

  18.   

    可以看这两个帖子,从Java快速地认识C++,或者从C++快速地认识Java。
    http://healerkx.spaces.live.com/blog/cns!9485FFC4816F2CAD!911.entry
    http://healerkx.spaces.live.com/blog/cns!9485FFC4816F2CAD!912.entry
      

  19.   

    Java中也有指针的,只不过不对外开放,由虚拟机内部进行操作。C/C++所能实现的数据结构和算法在Java都能实现,现在也有以Java为语言的数据结构和算法书籍。为了便于开发人员使用,Java类库中的已经包含了大多数的数据结构,并不需要自己去实现,直接
    调用就可以了,让开发人员更多地关注于业务逻辑的实现,而并非关注在数据结构上。或者可以这么说,Java是一种偏向于应用的编程语言,而C/C++更多地偏向于学术方面。
      

  20.   

    个人观点:
    思想上的问题 Java会使你的思想从过程式的设计方式转变到oo方式..
    把具体细节给封装(隐藏)了,你只需要关注你本职的那一部分,而不用了解整个系统..
      

  21.   

    TO 火龙果
    Java中也有指针的,只不过不对外开放,由虚拟机内部进行操作。
    ————————————————————————————————
    你这句话等于没有说,那我说SQL也有指针呢。Java在语言上没有C#的unsafe,sizeof等关键字,即便是把指针开放出来,也是没有用的。
    如果加了,就要考虑大端,小端的问题,那么Java还能跨平台嘛?不能跨平台的Java还是Java嘛?
    C/C++所能实现的数据结构和算法在Java都能实现,现在也有以Java为语言的数据结构和算法书籍。
    ————————————————————————————————
    这个确实,但是HashMap这种东西基本都是C/C++写的,Java给做了一个“壳子”。有真正用Java本身实现的哈息表在使用嘛?为了便于开发人员使用,Java类库中的已经包含了大多数的数据结构,并不需要自己去实现,直接
    调用就可以了,让开发人员更多地关注于业务逻辑的实现,而并非关注在数据结构上。
    ————————————————————————————————
    确实,大多数的情况,ArrayList,HashTable,TreeMap就可以适用了,但是那种极端的情况就是非C/C++不可的了。
    或者可以这么说,Java是一种偏向于应用的编程语言,而C/C++更多地偏向于学术方面。
    —————————————————————————————————
    C/C++在学术方面相对于Java来说的确实够学术了,但是从应用的角度,java的应用还是远远少于C/C++的。
    你此刻无论是在WinXP上,还是Linux上,除了你的Eclipse是一个优秀的Java产品外,你还能找出来第二个嘛?:)
      

  22.   

    诸位,有只会C语言,不会其他语言的高手嘛? 有,Linus就是一个,这个鸟人连C++都不会。
    有只会Java,不会其他语言的高手存在嘛? 我不知道,等着大家发掘出来一个,不过常常听人说不会C就等于不会编程。
      

  23.   

    面向的层面不同而已
    你用C++去写网站啊  你直接把html的内容以字符流返回啊
    就好像老式的房子 地基是用那种水泥砖 俗称青砖  上面就用红砖 非沉重墙只用半砖 
      

  24.   

    tomcat我几年前都模拟过,可以支持Servlet。这个道理我明白,最早的CGI和Servlet从原理上确实是一直的,你认为Servlet里面的out.writeln比CGI里面用printf("%s", "<html></html>")高级到什么层次了嘛?最近一年我学了Lex和Yacc,从JSP到Servlet的翻译,你认为那很高级嘛?
      

  25.   

    除了Eclipse之外,其他优秀的Java产品多着呢,比如使用最多的Tomcat。
      

  26.   

    果然C/C++程序员都有病态的心理 
    如你所愿 满世界的程序都是C写的 与我又何干 
    你就捧着C成为大师吧 
      

  27.   


    一个人在Java版,每天说C++好,说Java不好,能有一个星星嘛? 我这颗星星也不是倒分倒来的。
    但是我不是一个Java Purist。Java做的好的地方,我就支持它,它不行的地方就应该指出来。如果一个学习者的目标不高,安于每天写写PHP,调调CSS,那么我们就不给他过高的要求。
    但是你想学习计算机知识,纯Java的思想是不可行的。
      

  28.   

    引用别人的一句话:“你不应该叫‘甘草’,应该叫‘仙人掌’”。OVER
      

  29.   

    to insiku
    我得罪你了? 你骂我就算了, 为啥扯上所有的C/C++程序员呢?To 火龙果,
    你继续举例子,你还能举出WebSphere和WebLogic。然后继续。
      

  30.   

    我继续帮你举例子,
    还有Lotus Notes 8,不过限于外面的Shell,里面真正的Notes还是原来C++的代码。
    还有Oracle9i,也限于外面的Shell,数据库的内核肯定是C的。
      

  31.   

    甘草,牛人啊,我最近正在学习Com,能否指导一下呢?
      

  32.   

    COM我只懂得原理上面的东西,实际的问题去MFC版问吧。总得来说,我只会吹。
      

  33.   

    支持healer_kx的-〉/////////////说明楼主的思维还没有转到面向对象上来
      

  34.   

    lz是不是刚开始一直学的是vc阿
    再学java
    因为你还没适应java的习惯,所以就有这种感觉
      

  35.   

    COM的组件性太差劲了,和JavaBean,或者是.Net的Assembly都没有办法比。但是尽管如此,Windows在内核之上,基本都是COM的世界。
      

  36.   

    哈哈 大家不要跑题撒 本来我也不是很关心数据结构的问题 但是那天看到这个帖子
    http://topic.csdn.net/u/20080121/13/14691c78-e3b7-4043-bb69-3342b803c2ca.html
    我第一次做这个题目的时候40多分钟就做出来了 然后我想既然学了编程 我也试试用程序来解 而且既然用了电脑就不应该再包含人的推理过程了 
    想法是这样的 就是一个二维数组 然后按已知条件往里面放元素 如果该位置已经有数据了再往后放 如果放到最后都不能满足条件 说明上一个条件位置放错了 再返回上一个条件 先清空再往后放 
    感觉类似栈的结构 但是我却无从下手(用C++的话可能勉强能写个类出来)所以才发现数据结构的重要性 而且我还有一些更好的想法 但实在是写不好代码下面是我写的一部分垃圾代码 初学编程 代码逻辑比较简单 见笑了
    我的目的就是想把这个问题用一个类或者一个函数来解决 传递给出条件中的两个参数 外加一个辅助参数就可以了 //因为条件中有减一的情况 所以用了[6][6] 省去了判断
    public class Einstein {
        public static void main(String args[]){
    String[][] house=new String[6][6];
    /*----------------------------
    house[1]:颜色
    house[2]:国籍
    house[3]:饮料
    house[4]:香烟
    house[5]:宠物
    ----------------------------*/
    for(int j=1;j<6;j++)
    for(int k=1;k<6;k++)
    house[j][k]="blank";

    //8、住在中间房子的人喝牛奶  
    house[3][3]="牛奶";
    //9、挪威人住第一间房
    house[2][1]="挪威";
    //14、挪威人住蓝色房子隔壁
    house[1][2]="蓝色";

    //其他按顺序来
    //===============================================================
    //1、英国人住红色房子 
    for(int i=1;i<6;i++){
    while(false){
    _i:
    house[2][i]="blank";house[1][i]="blank";
    i++;
    }
    if(house[2][i].equals("blank") && house[1][i].equals("blank")){
    house[2][i]="英国";house[1][i]="红色";
    break;
    }
    }
    //===============================================================
    //2、瑞典人养狗  
    for(int ii=1;ii<6;ii++){
    if(ii>5) continue _i;
    while(false){
    _ii:
    house[2][ii]="blank";house[5][ii]="blank";
    ii++;
    }
    if(house[2][ii].equals("blank") && house[5][ii].equals("blank")){
    house[2][ii]="瑞典";house[5][ii]="狗";
    break;
    }
    }
    //===============================================================
    //3、丹麦人喝茶  
    for(int iii=1;iii<6;iii++){
    if(iii>5) continue _ii;
    while(false){
    _iii:
    house[2][iii]="blank";house[3][iii]="blank";
    iii++;
    }
    if(house[2][iii].equals("blank") && house[3][iii].equals("blank")){
    house[2][iii]="丹麦";house[3][iii]="茶";
    break;
    }
    }
    //===============================================================
    //5、绿色房子主人喝咖啡(4先跳过)  
    for(int v=1;v<6;v++){
    if(v>5) continue _iii;
    while(false){
    _v:
    house[1][v]="blank";house[3][v]="blank";
    v++;
    }
    if(house[1][v].equals("blank") && house[3][v].equals("blank")){
    house[1][v]="绿色";house[3][v]="咖啡";
    break;
    }
    }
    //===============================================================
    //6、抽Pall Mall香烟的人养鸟   
    for(int vi=1;vi<6;vi++){
    if(vi>5) continue _v;
    while(false){
    _vi:
    house[4][vi]="blank";house[5][vi]="blank";
    vi++;
    }
    if(house[4][vi].equals("blank") && house[5][vi].equals("blank")){
    house[4][vi]="Pall Mall";house[5][vi]="鸟";
    break;
    }
    }
    ……
    ……
    ……
      

  37.   

    看看,学了不少咚咚
    看到有的星星很激动~~
    嗬嗬,新手加入,看看大家都讨论什么~~
    PS:喜欢C语言~~
      

  38.   

    呵呵!基本上是一个习惯的问题,如果你已经熟悉了C/C++的思路,自然会觉得Java不好懂,但是,对于一个既不熟悉C,也不熟悉Java的人,自然Java上手比C/C++容易多了。
      

  39.   

    楼主,以后不要在代码中写中文了。你这个代码在Windows写完了,在MAC OS X未必打得开哦,而且放到CVS里面,可能出现一些问题。
      

  40.   

    上手 先用.net吧 最少开发调试时比java简单多了 学精了再学java.
    如果LZ C++基础还行的话学这些应该不难