几种Java集合框架详解
更新时间:2024-03-25 13:41:01 阅读量: 综合文库 文档下载
- JAVA的集合框架推荐度:
- 相关推荐
几种Java集合框架详解
Java集合框架Koloboke详解作者:chszs,未经博主允许不得转载。经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszsKoloboke的目标是替换标准的Java集合和流的API,提供更高效的实现。Koloboke目前的版本主要是替换java.util.HashSet和java.util.HashMap。Koloboke提供了一套完整的集合原始类型的实现,可以避免开销很大的装箱/拆箱操作,节省了原始类型装箱消耗的内存。在Koloboke中,HashSet和HashMap比其它专门的实现(比如GS collections、fastutil、HTTP & Trove)要更快,这是因为:1)相比于其它库,Koloboke对每个entry使用了更少的内存
2)Koloboke目标是把键和值存储在同一行高速缓存中 3)所有的方法都经过了实现优化,而不是像AbstractSet类或AbstractMap类那样委托给框架类(Skeleton Class)Koloboke的官网:
http://chronicle.software/products/koloboke-collections/Koloboke的特征:1)极好的兼容Java集合框架(JCF,Java Collections Framework)
2)所有原始专门的集合类都继承了基本的接口(比如Collection、Set、Map)
3)可用于替换标准的JCF
4)Koloboke API for Java 6 and Java 7向前兼容Java 8的新方法
5)快速失败的语义
6)支持null键(可选的),就像java.util.HashMap中的Float.NaN和Double.NaN键的处理那样。什么时候使用Chronicle Map或Koloboke Map?使用Chronicle Map的场景:
1)存储的entry超过5亿条 2)在进程之间分布Map
3)使用堆外内存(Off-Heap Memory),因为键和值占用了太多的内存,JVM遭遇GC的痛苦当不想在进程间共享数据,且存储的entry在5亿条以内,那么Koloboke是更理想的选择。Koloboke目前的最新版本为0.6.8版。可以从Maven仓库使用它:<dependency>
<groupId>net.openhft</groupId> <artifactId>koloboke-api-jdk8</artifactId> <version>0.6.8</version> </dependency> <dependency>
<groupId>net.openhft</groupId>
<artifactId>koloboke-impl-jdk8</artifactId>
<version>0.6.8</version> </dependency>
Gradle依赖为dependencies {
// `jdk8` instead of `jdk6-7` if you use Java 8 compile 'net.openhft:koloboke-api-jdk6-7:0.6.8' runtime 'net.openhft:koloboke-impl-jdk6-7:0.6.8' }
也可以到这里下载:
https://github.com/OpenHFT/Koloboke/releases Java集合框架GS Collections详解作者:chszs,未经博主允许不得转载。经许可的转载需注明作者和博客主页:
http://blog.csdn.net/chszsGS Collections是一个开源的基于Java的集合框架,它兼容JDK的List、Set、Map实现,并提供了一套功能丰富的API和工具类集合,其迭代循环的实现是受Smalltalk集合框架的启发。GS Collections库的模块兼容Java 5,包括gs-collections-api,gs-collections,gs-collections-testutils。GS Collections目前的最新版本为7.0.0版。主页见:
https://github.com/goldmansachs/gs-collectionsGS Collections特性:1)改进了易读性,减少了迭代循环代码的重复
2)实现了数个高级迭代模式(选择select、拒绝reject、收
集collect、注入inject),人性化的容器接口,继承了标准JDK的接口。
3)对于Collections、Arrays、Maps、Strings等提供了一致的迭代机制
4)对标准的ArrayList、HashSet和HashMap提供了经过优化的高性能、低内存利用率的替代 5)在工具类中执行了更多幕后的优化
6)封装了很多结构复杂的并行迭代和懒惰估算
7)添加了新的容器,包括Bag、Interval、Multimap、BiMap,以及提供了很多容器类型的不可变(Immutable)版本 8)从2005年开始发布,是一个成熟的库GS Collections的使用:GS Collections把迭代丰富仿照容器类型中,并使用匿名的内部类来模拟Lambdas表达式。GS Collections的编程风格如下面代码所示:MutableList<Person> people = FastList.newListWith(person1, person2, person3);
MutableList<String> sortedLastNames = people.collect(Person.TO_LAST_NAME).sortThis(); System.out.println(\\
Person.TO_LAST_NAME被定义为Person类的一个常量函数public static final Function<Person, String>
TO_LAST_NAME = new Function<Person, String>() { public String valueOf(Person person) { return person.lastName; } };
对于Java 8,此函数可以使用Lambda表达式替代:MutableList<String> sortedLastNames = people.collect(person -> person.getLastName()).sortThis();
或者是用方法引用替代:MutableList<String> sortedLastNames =
people.collect(Person::getLastName).sortThis(); GS Collections的Maven依赖<dependency> <groupId>com.goldmansachs</groupId> <artifactId>gs-collections-api</artifactId> <version>7.0.0</version> </dependency> <dependency>
<groupId>com.goldmansachs</groupId> <artifactId>gs-collections</artifactId> <version>7.0.0</version> </dependency>
<dependency>
<groupId>com.goldmansachs</groupId> <artifactId>gs-collections-testutils</artifactId> <version>7.0.0</version> <scope>test</scope> </dependency> <dependency>
<groupId>com.goldmansachs</groupId> <artifactId>gs-collections-forkjoin</artifactId> <version>7.0.0</version> </dependency>
Gradle依赖为dependencies {
compile 'com.goldmansachs:gs-collections-api:7.0.0' compile 'com.goldmansachs:gs-collections:7.0.0' testCompile
'com.goldmansachs:gs-collections-testutils:7.0.0' compile
'com.goldmansachs:gs-collections-forkjoin:7.0.0' }
另外几种Java集合框架详解作者:chszs,未经博主允许不
得转载。经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs1、fastutilfastutil是一个开源的Java集合框架的扩展,它继承了Java Collection Framework,提供了数种特定类型的容器,包括映射map、集合set、列表list、优先级队列(prority queue),实现了java.util包的标准接口(还提供了标准类所没有的双向迭代器),还提供了很大的(64位)的array、set、list,以及快速、实用的二进制或文本文件的I/O操作类。
fastutil为专用的集合类提供了大容量的功能,而且类比普通Java集合类显得更紧凑、速度更快。
除了对象和原始类型,fastutil类还提供了对引用的支持,也即对象是可以使用等号操作符进行比较的,无需使用equals()方法。
fastutil以Apache 2.0许可证发布。使用它需要JDK 7以上版本。fastutil以JAR包的方式提供,要注意这个JAR包文件比较大,因为它包含了大量的类文件。如果你只想要fastutil的一部分,那么应该考虑实用AutoJar之类的根据来自动提取所需的类。官网地址: http://fastutil.di.unimi.it/相似的技术:HPPC、Koloboke、GS Collections、Trove Collections、Mahout Collectionsfastutil目前的最新版本为7.0.10版,这个最新的JAR包fastutil-7.0.10.jar大小为17MB。其Maven依赖为:<dependency>
<groupId>it.unimi.dsi</groupId> <artifactId>fastutil</artifactId> <version>7.0.10</version> </dependency> fastutil的在线API文档见:
http://fastutil.di.unimi.it/docs/fastutil 6在大数据方面进行了增强,提供了一套新的类集合使得可以处理很大的集合,尤其是当集合数据超过2GB(2^31)时。比如Hash Big Set仅仅受内存大小的限制。2、HPPC官网地址: http://labs.carrotsearch.com/hppc.html
官网地址: https://github.com/carrotsearch/hppc
HPPC即High Performance Primitive Collections for Java,对Java的原始集合类型如映射map、集合set、堆栈stack、列表list、队列deque等进行了扩展,提供了更佳的内存利用率,带来了更好的性能。
HPPC当前的最新版本为0.7.13、Trove官网地址: http://trove.starlight-systems.com/
Trove库提供了高速的Java集合类。GNU Trove库有两个目标:
1)提供一个免费、高速、轻量级的java.util集合API的实现。
这些实现被设计成可插拨的方式,以便替代标准JDK的集
合类。
2)提供原始的集合,API风格保持一致。 标准JDK使用包装器类来封装原始类型,比如
java.lang.Integer,java.lang.Float等,那么标准集合类也使用了包装后的类型。而对于Trove库来说,集合直接存储原始类型可以减少空间的使用量,并能带来显著的性能提升。GNU Trove库既可以用于服务器端应用,也可以用于客户端应用,它消耗的内存比标准集合框架更少。
GNU Trove库目前的最新版本为3.0.3版,很成熟的一个库。 应注意,Trove已经很久没更新了,此项目可以不予考虑。4、Mahout Collections官网地址:
https://mahout.apache.org/users/basics/mahout-collections.htmlMahout Collections库是一套容器类集合,它致力于解决标准Java集合框架的一些限制。Mahout Collections主要解决两方面的问题:
1)Java标准集合框架缺乏对原始类型的支持
2)Java标准集合框架缺乏对open hashing的支持 另外几种Java集合框架详解续作者:chszs,未经博主允许不得转载。经许可的转载需注明作者和博客主页:
http://blog.csdn.net/chszsfastutil库优于Trove库的地方:Trove库已经三年未更新了,属于非活跃的开源项目;而fastutil一直在更新。fastutil有更丰富的特性,支持超大的集
合(大于2^32,即4GB的集合),文档也更丰富。fastutil是一个开源的Java集合框架的扩展,它继承了Java Collection Framework,提供了数种特定类型的容器,包括映射map、集合set、列表list、优先级队列(prority queue),实现了java.util包的标准接口(还提供了标准类所没有的双向迭代器),还提供了很大的(64位)的array、set、list,以及快速、实用的二进制或文本文件的I/O操作类。fastutil为专用的集合类提供了大容量的功能,而且类比普通Java集合类显得更紧凑、速度更快。除了对象和原始类型,fastutil类还提供了对引用的支持,也即对象是可以使用等号操作符进行比较的,无需使用equals()方法。fastutil以Apache 2.0许可证发布。使用它需要JDK 7以上版本。把元素添加到fastutil集合与添加到标准Java集合使用的API是相同的,下面的代码示例展示了插入元素到标准JDK的ArrayList和插入元素到fastutil的DoubleArrayList。1、插入Double对象到JDK的ArrayList和插入Double对象到fastutil的DoubleArrayListimport java.util.ArrayList;
import it.unimi.dsi.fastutil.doubles.DoubleArrayList;public class DoubleArrayListTest {
public static void main(String[] args) { demoJdkArrayListForDoubles(); demoFastutilArrayListForDoubles();
for(final long longValue : longs){ System.out.print(longValue + \ } }
输出为:11 23401203413 3 32 9 .public static void demoIteratorWithJdk8ForEach(){ final LongLinkedOpenHashSet longs = new LongLinkedOpenHashSet(); longs.add(11);
longs.add(23401203413l); longs.add(3); longs.add(32); longs.add(9);
longs.forEach(longValue -> System.out.print(longValue + \}
输出为:11 23401203413 3 32 9
fastutil相关的其它情况1)fastutil集合实现了标准JDK8集合的接口,故其API易于使用。
2)fastutil集合通常都提供了一个带参数(以基本数据类型的array为参数)的构造器,并重写了toArray()方法,以及提供了一个指定类型的方法(比如toDoubleArray()面向
Double集合)。
3)fastutil集合通常提供了明确重写toString()的实现,易于让每一个数据元素输出,这与Java标准的Arrays.toString()不同。
4)fastutil的包是根据原始类型与不同数据结构的实现来进行组织的,且都在同一个包中。
5)由于每一个fastutil集合都是跟特定的原始数据类型相关,故每一个集合都不需要泛型参数,也就不存在泛型相关的问题。
6)fastutil的API文档是学习使用fastutil的最佳文档。
正在阅读:
几种Java集合框架详解03-25
【心得体会】打造“四有”公安队伍——公安党建工作有感09-01
华为交换机防ARP攻击配置手册04-27
青岛啤酒真假02-19
第2章PHP语法基础 - 教学设计课案10-06
《人类成长与社会环境》形考作业1-4答案04-28
2016年二级建造师《市政工程》考试真题及答案解析 - 图文01-17
红色研学旅行活动观后感 参观武警支队有感12-11
南方医科大学中医药学院教学大纲-南方医科大学综合信息门户01-05
四轮定位仪检定规程07-02
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 详解
- 框架
- 集合
- Java
- 油酸酯 - 三羟甲基丙烷油酸酯
- 江苏省南京市、盐城市2015届高三第二次模拟考试 地理试题
- 2固体废物污染控制工程课程设计任务书-精选文档
- 中级电工培训模拟试题库 含答案
- 实验6 路由器基本配置
- 英美侵权行为法上的Nervous Shock刍议
- EOB-会议-专业音箱-功放-周边-2015-01-01 - 图文
- 大型地下室土方开挖及外运施工方案 - 图文
- 《计算机程序设计基础》课后练习题参考答案
- 2016-2021年涤纶面料行业深度调查及发展前景研究报告
- 2010年东北师范大学博士研究生招生目录
- 一年级小学生必背古诗12首(带拼音)
- 板模板(碗扣式)计算书
- 《人民调解法》学习题库
- 经营者违反安全保障义务的构成要件分析
- 2009年福清市部分事业单位公开招聘工作人员考试 - 图文
- 中国在亚洲区域合作中的地位和作用最后
- 宁县生态环境建设实施方案(定稿)
- 中国球团矿行业市场前景分析预测报告(目录) - 图文
- 各工种及主要机械安全技术操作规程大全