我的隐式生活(My Implicit Life)

继续搞“对象”,玩OO.

首页 新随笔 联系 聚合 管理
  11 Posts :: 1 Stories :: 39 Comments :: 0 Trackbacks

2006年9月20日 #

近期写了个电子书的C/S模式的下载工具,一个server端,一个client端。

目的就是想在公司能很方便的访问家里那些收集很久电子书,方便查阅。

用了1,2个星期,虽然写的很烂,但是没有用任何第三方的产品(server or db)。

现在里面的书籍已经接近200本了。

注:server就用了家里的adsl,所以速度慢,关闭不定时。毕竟玩玩嘛。

有兴趣的朋友先装个jdk1.5。再运行下面压缩包里的exe文件执行即可。

点此下载

User ID:               blogjava
Password:             blogjava
 

posted @ 2006-10-15 13:21 marco 阅读(3449) | 评论 (9)编辑 收藏

Java Collection Framwork中的类的确是最重要的基础api,实现任何算法,基本上都很难离开它。

因此理解这堆“集合(Collection)类”很有必要。声明一下,以前一直都是叫它们集合类,但是好像Think In Java的作者鄙视了这个说法,严格的说应该叫Container类,而后看了它整整一章书以后,觉得还是人家说的有道理。

它说这个container类库,包含了两大类,Collection和Map,而Collection又可以分为List和Set。当然这些抽象概念都被定义成了接口。

话说,这样的分类的确是严格按照类之间的继承关系来说得,但是俺总觉得很别扭,真动手的时候,还是很难选择。当然,Anytime and Anywhere使用ArrayList绝对都能解决问题,但这样做毕竟太农民了一点。

所以,我自己有了一些想法。先回归到最基本最基本的数据结构的层面,管你是Collection还是Container,反正描述的都是一堆东西吧。数据结构第一章讲了一个结构:在物理上连续分配空间的顺序结构,叫顺序表(希望记性是好的),而离散分配空间的,应该叫做链表,最常用的就是单链表。这两个东西,其实就是很多复杂数据结构的基础,还记得吗,当时就是讲完这些东西,才开始讲栈、队列、二叉树、有向无向图的。所以,这个顺序结构是很基础的。而在JAVA中,顺序表对应的就是List接口,而一般顺序表就是ArrayList(有效进行随机index查找);而单链表就是LinkedList(有效进行插入和删除),两个的优劣当年都讲烂了,这里就不说了。

有了这两个结构以后,JAVA就不提供Stack和Queue单独的类了,因为,用户可以用上面两个类轻易的去实现。

那Set和Map有怎么跟List连上关系呢?

我认为可以把它们看成是无序和单一的List(Map只是两个有映射关系的List罢了)。

Set和Map无序和单一的特性,决定了它们天大的需求就是根据关键字(元素对象)检索。so,为了效率,必须hash。

有了HashSet和HashMap。

同时,如果非要保持住元素的顺序,有了LinkedHashSet、LinkedHashMap。


结论:

假如你的需求是
1:往Container中放的对象是无序且单一的;
2:经常要检索。
用HashSet或HashMap吧。

ps:这两个条件其实是一回事,因为如果是不单一的话,你去检索它干嘛。

如果进而需要保持元素的顺序,不要让他顺便iteration,那就选择LinkedHashSet和LinkedHashMap。

假如你的需求不满足以上1&2,那你放心,List肯定能帮你解决,你只要稍微想一下是ArrayList好还是LinkedList好。

题外话:

关于Hash,务必记得要让自己的元素对象override hashCode()和 equles() 方法,要不你直接可以洗了睡。

关于所有这些Container,务必记得有个辅助类叫Interator,遍历尽量要用它。

关于一些老的Stack、Vector、HashTable,听说以后不要用了哦。收到啦!!

posted @ 2006-09-20 16:53 marco 阅读(2303) | 评论 (0)编辑 收藏