标签:
JAVA等面向对象编程语言一般都会提供大量的数据结构让我们使用。但是它所提供的数据结构一般都是线性的,当然,除了map以外。基本上就是List系列和Set系列,这些都是很常用的。对于处理一般的问题,这些数据结构其实是满足需要的,此外这些数据结构往往还提供对象级的支持,也就是说,它能够处理对象。当然,我们一般不将其称呼为数据结构,而叫做集合类。这种线性结构有一个很大的问题,就是无法描述集合中每个对象之间的关系。或者,不能很直观的直接描述每个对象之间的关系。
此外,其实还有一个问题,那就是人类并不擅长处理非常琐碎的细节问题,同时从这些细节中发现规律往往也会比较困难。相反,人类往往比较擅长使用工具,因此,人类就比较擅长处理抽象的问题。所以使用List这样的线性结构来处理对象之间的关系对于人类来说,其实是比较困难的。就算能够实现,也不容易维护和理解,这对于程序的维护性来说,并不是一个好事。而能够比较好的处理这种问题的数据结构,其实早已出现,那就是组合模式。不过据我所知,这种结构运算性能是比较差的,如果你追求性能的话,显然不能使用这种结构,那么我只能为你感到遗憾了。
我不详述这个模式怎么实现了,可以参考google或者度娘的结果。我想说的是,这种结构导致处理其中的问题都必须使用递归。而且往往在构建是就需要递归,因此其性能之差,令人发指。因此你如果对性能有严格的要求,我想说,换别的编程语言处理吧。JAVA实在是不太擅长这种结构的处理。你也许可以考虑Clojure。。。
递归会导致栈的问题,因为递归会大量的使用栈内存,如果你递归很深,有可能会导致栈溢出。所以JAVA语言在这样数据处理的任务上可能并不擅长,当然我们也能够采用一些别的手段处理这个问题,比如说并发啥的,不过都比较的复杂。
但是,问题总是能够解决的,这一点我坚信不疑。
标签:
原文地址:http://my.oschina.net/clarkhill/blog/466816