yyq

问君...

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  98 随笔 :: 1 文章 :: 42 评论 :: 0 Trackbacks

概述

FInt是一个用Java编写的集合工具包,以下简称FI。因为Java自带的集合包(java.util)不能直接操作基本数据类型,而必须使用基本类型的“包装”类,这多少会影响程序性能或造成一些不便。FI实现了键或值是整数类型的集合工具包,但别的数据类型没有实现, 因为要实现所有数据类型的话,类的数目会很大,如果全靠手工编写的话工作量也是很大的,而且也难维护,因此如果以后真要实现的话,考虑使用类似于模板的方法。

 

下载方法

http://www.blogjava.net/Files/20070716/fint-1.1.zip

构成简介

FI主要提供了面向整数的集合、映射、列表的接口以及相应的迭代器。

FI主要使用了三种方式实现了上面的接口:

  • AVL树,所有以AVL开头的类。一般来说它的查找性能比红黑树略好,但对于要频繁地插入删除的情况,性能不如红黑树。
  • 红黑树,所有以RB开头的类。Java系统库的中的TreeMap实现也是采用红黑树。
  • 哈希表,所有以Hash开头的类。由于采用了和Java系统库中HashMap不同的冲突解决办法,在冲突比较严重(装载因子设得偏大)时仍有较好的性能,因此在没有特殊情况时,推荐选用这些类。当然,基于哈希表的类比其他的类要占用更多的空间,但可根据情况调节装载因子来达到空间和时间的平衡。
  • BitVector,它基本上算是一个系统库中BitSet的替代品,但不同的是,它也实现了整数集合接口IntSet,由于受位组实现方式的限制,集合只能保存非负整数。其缺点很明显,当集合中有一个数值很大的元素时,将导致内存的的极大浪费。不过其也有无与伦比的优点,就是插入和搜索速度都极快,基本上要比其他实现方式快一个数量级以上,因此在元素的值都比较小且非负的情况下推荐使用。
  • 整数列表,基本上就是系统库中等价类的“整数版”而已。

访问者模式:Visitor。

FI提供了多种访问者接口,一般来说,在满足需要的前提下,采用访问者模式比迭代器模式更高效些。

性能

迄今为止,只拿FInt和系统库中等价的类做过比较,从简单的测试来看,集合和映射的插入、搜索操作都比系统库快。另外因为FI的哈希表采用红黑树来处理冲突,因此装载能力比系统库要强些(在装载因子较大时仍有较好的性能)。

至于其他的支持基本数据类型的集合库,如Trove等,还没拿FI和它们做过比较。


posted on 2007-11-07 01:13 yyq 阅读(965) 评论(1)  编辑  收藏 所属分类: 编程

评论

# re: FInt —— 一个面向整数的Java集合工具包[未登录] 2007-11-07 14:46 hehe
支持一下,bookmark  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: