`
rensanning
  • 浏览: 3546036 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:38098
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:607099
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:682043
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:89207
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:401676
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69652
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91648
社区版块
存档分类
最新评论

Java集合框架之fastutil

    博客分类:
  • Java
阅读更多
fastutil扩展了 Java集合框架,通过提供特定类型的map、set、list和queue,以及小内存占用、快速访问和插入;也提供大(64位)array、set 和 list,以及快速、实用的 二进制文件和文本文件的I/O类。它是自由软件,依照Apache许可证2.0发布,需要Java 6或更高版本。

类实现其标准接口(例如, map 的 Map),可以插入现有代码。此外,它们还提供未在标准类的附加??功能(如双向迭代器) 。

除了 对象和基本类型,fastutil类提供支持引用(references),即使用相等运算符,而不是比较对象的equals()方法。

源代码由C预处理器生成,从一组驱动文件开始。您可以在查看javadoc生成的文档。尤其是概述说明中fastutil使用的设计选择。

大数据结构
使用fastutil 6类的一组新类,使得它可以处理非常大的集合,特别是其规模超过2 31 。大数组是数组的数组,由一个神奇的静态方如果是带有64为索引的单位数组; big list 提供64位列表索引,hash big set 的 大小是只受限于核心内存量。常用的方法来自java.util.Arrays,类似的类已经扩展到大数组:可查看Javadoc关于 BigArrays和 IntBigArrays 的文档,以获得通用和特定类型的可用方法 。

http://fastutil.dsi.unimi.it/

虽然JCF(Java Collections Framework)在设计做的很好,但是从性能很功能上都有一定的局限性,所有出现很多的扩展JDK的集合框架出现,除了fastutil之外,主要的JDK集合框架的扩展还有以下这么多,他们都各自有各自的特点,各有所长:

这里有一篇关于HashMap的性能测试:Large HashMap overview: JDK, FastUtil, Goldman Sachs, HPPC, Koloboke, Trove

由于fastutil提供了相当丰富的类,所以类库很大,比如fastutil-6.4.3.jar就有14.5MB。但是他在性能上极佳!

fastutil以存储的元素类型来划分package,每个package下都有丰富的Class。
如:
   List、BigList、Map、SortedMap、Set、Stack、Iterator......
  • it.unimi.dsi.fastutil.booleans
  • it.unimi.dsi.fastutil.bytes
  • it.unimi.dsi.fastutil.chars
  • it.unimi.dsi.fastutil.doubles
  • it.unimi.dsi.fastutil.floats
  • it.unimi.dsi.fastutil.ints
  • it.unimi.dsi.fastutil.io
  • it.unimi.dsi.fastutil.longs
  • it.unimi.dsi.fastutil.objects
  • it.unimi.dsi.fastutil.shorts


1、Int相关
//===========IntList
IntList list = new IntArrayList();

for(int i = 0; i < 1000; i++){
	list.add(i);
}

//取值
int value = list.getInt(0);
System.out.println(value);// 0

//转成数组
int[] values = list.toIntArray();
System.out.println(values.length);// 1000

//遍历
IntListIterator i = list.iterator();
while(i.hasNext()){
	System.out.println(i.nextInt());
}

//===========Int2BooleanMap
Int2BooleanMap map = new Int2BooleanArrayMap();

map.put(1, true);
map.put(2, false);

//取值
boolean value1 = map.get(1);
boolean value2 = map.get(2);

System.out.println(value1);// true
System.out.println(value2);// false

//===========IntBigList
IntBigList biglist = new IntBigArrayBigList();

biglist.add(0);
biglist.add(1);
biglist.add(2);

long size = biglist.size64();

//取值
for(long index = 0; index < size; index++) {
	System.out.println(biglist.getInt(index));
}

//===========IntSortedSet
IntSortedSet s = new IntLinkedOpenHashSet( new int[] { 4, 3, 2, 1 } );
//获取第一个元素
System.out.println(s.firstInt()); // 4
//获取最后一个元素
System.out.println(s.lastInt()); // 1
//判断是否包含一个元素
System.out.println(s.contains(5)); // false


2、Long相关
Long2IntSortedMap m = new Long2IntAVLTreeMap();

m.put( 1, 5 );
m.put( 2, 6 );
m.put( 3, 7 );
m.put( 1000000000L, 10 );

System.out.println(m.get( 1 )); // 5

//当查找不到的时候,默认返回0
System.out.println(m.get( 4 )); // 0

//设置默认返回值
m.defaultReturnValue( -1 );
System.out.println(m.get( 4 )); // -1

//遍历Map
LongBidirectionalIterator key1 = m.keySet().iterator();
long s = 0;
while( key1.hasNext() ) {
	s += key1.nextLong();
}
System.out.println(s); // 1000000006

//获取Key值小于4的子Map
Long2IntSortedMap m1 = m.headMap( 4 );
LongBidirectionalIterator key2 = m1.keySet().iterator();
while( key2.hasNext() ) {
	System.out.println(key2.nextLong());
}


分享到:
评论
1 楼 yahier 2014-08-20  
暂时没有这个需求

相关推荐

    fastutil,FASTTIL通过提供特定于类型的映射、集合、列表和队列来扩展Javaμ集合框架。.zip

    快速实用工具库(fastutil)是Java集合框架的一个强大扩展,专为提高性能和效率而设计。这个开源项目提供了一套全面的特定类型的数据结构,包括映射(Maps)、集合(Sets)、列表(Lists)和队列(Queues),以及...

    fastutil-7.0.13-API文档-中文版.zip

    标签:fastutil、unimi、dsi、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译...

    fastutil-6.5.6-API文档-中英对照版.zip

    标签:fastutil、unimi、dsi、jar包、java、API文档、中英对照版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准...

    fastutil-6.5.6-API文档-中文版.zip

    标签:fastutil、unimi、dsi、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心...

    fastutil-6.5.7-API文档-中文版.zip

    标签:unimi、dsi、fastutil、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心...

    fastUtil数据库图形界面开发工具

    【fastUtil数据库图形界面开发工具】是一款专为简化数据库开发而设计的高效工具,它将复杂的数据库操作转化为直观的图形界面,使得开发者几乎无需编写代码就能进行常见的数据库管理任务。这款工具的核心价值在于提高...

    fastutil:fastutil通过提供特定于类型的映射,集合,列表和队列来扩展Java:trade_mark:Collections Framework。

    欢迎使用fastutil 是特定于类型的Java类的集合,这些类通过提供若干个容器(例如,映射,集合,列表和属性队列)来实现Java.util包的接口,从而扩展了Java Collections Framework; 它还为二进制文件和文本文件提供...

    深度学习Java库2

    1. fastutil-6.5.7.jar:FastUtil是Java集合框架的高性能替代品,提供了更高效的数据结构,如多维数组、散列和排序映射和列表,对于处理大数据时的性能提升至关重要。 2. eclipse-collections-7.1.1.jar:Eclipse ...

    fastutil-6.5.7-API文档-中英对照版.zip

    标签:unimi、dsi、fastutil、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请...

    java常用类库中文速查表

    fastutil库是针对Java集合框架的扩展,它提供了小内存占用和快速访问的特定类型的集合类,如map、set、list和queue,也包括大(64位)array、set和list,以及快速、实用的二进制文件和文本文件的I/O类。fastutil特别...

    【FastDFS专题】fastdfs使用实战(Java实例篇)

    NULL 博文链接:https://josh-persistence.iteye.com/blog/2067574

    fastutil:Fastutils 的克隆 (fastutil.di.unimi.it)

    快速实用程序介绍`fastutil` 通过提供特定类型的 `maps`、`sets`、`lists` 和 `queues` 扩展了 `Java:trade_mark: Collections Framework`,具有较小的内存占用和快速访问和插入; 还提供大型(64 位)`arrays`、`...

    读取边(src, dst)的文件,然后输出每个顶点对应的邻居顶点。该例子使用了外部jar包fastutil-8.5.8.jar。

    下面的blog对该Java项目有详细的描述:...

    Android中图片加载框架Glide的使用

    ```java import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.request.RequestOptions; ``` ### 基本使用 加载图片到ImageView: ```java ...

    java8集合源码-java-primitive-specializations-generator:java-primitive-speci

    原始类型集合库的类似模板处理引擎(fastutil、Eclipse、Trove、HPPC——都有自己的模板处理引擎)之间的区别在于 JPSG 的模板文件可以是有效的 Java 源文件,对应于从相应模板生成的专业化之一。 通过将带有模板...

    110个知名Java项目集锦

    #### ASM - Java字节码操作框架 - **简介**:ASM 是一个用于操纵 Java 字节码的框架。它可以用来动态生成类或增强已有类的功能,广泛应用于 AOP(面向切面编程)、性能监控、代码热更新等场景。 - **特点**: - ...

    fastutil-7.0.13.jar中文-英文对照文档.zip

    中文-英文对照文档,中英对照文档,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【***.jar中文文档.zip】,再解压其中的 【***-...

    fastutil-6.5.7.jar中文-英文对照文档.zip

    中文-英文对照文档,中英对照文档,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【***.jar中文文档.zip】,再解压其中的 【***-...

    fastutil-6.5.6.jar中文-英文对照文档.zip

    中文-英文对照文档,中英对照文档,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压 【***.jar中文文档.zip】,再解压其中的 【***-...

Global site tag (gtag.js) - Google Analytics