另外几种Java集合框架具体解释续
另外几种Java集合框架具体解释续
作者:chszs,未经博主同意不得转载。经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs
fastutil库优于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的DoubleArrayList
import java.util.ArrayList;
import it.unimi.dsi.fastutil.doubles.DoubleArrayList;
public class DoubleArrayListTest {
public static void main(String[] args) {
demoJdkArrayListForDoubles();
demoFastutilArrayListForDoubles();
}
public static void demoJdkArrayListForDoubles(){
final ArrayList<Double> doubles = new ArrayList<>();
doubles.add(98.5);
doubles.add(24.7);
doubles.add(52.8);
doubles.add(1234.3);
doubles.add(20.0);
System.out.println("\tDoubles List: " + doubles);
}
public static void demoFastutilArrayListForDoubles(){
final DoubleArrayList doubles = new DoubleArrayList();
doubles.add(98.5);
doubles.add(24.7);
doubles.add(52.8);
doubles.add(1234.3);
doubles.add(20.0);
System.out.println("\tFastutil DoubleArrayList: " + doubles);
}
}
输出为:
Doubles List: [98.5, 24.7, 52.8, 1234.3, 20.0]
Fastutil DoubleArrayList: [98.5, 24.7, 52.8, 1234.3, 20.0]
从上面的代码能够看出,fastutil集合的实现与标准JDK集合的实现保持了一致。以下我们再看一个样例:
2、使用fastutil的DoubleArrayList作为堆栈
public static void demoFastutilDoubleStack(){
final DoubleArrayList stack = new DoubleArrayList();
stack.push(19.9);
stack.push(32.1);
stack.push(11.8);
stack.push(3.3);
System.out.println("Fastutil Stack of Doubles");
System.out.println("\tPeek: " + stack.peek(0) + "; After Size: " + stack.size());
System.out.println("\tPop: " + stack.pop() + "; After Size: " + stack.size());
System.out.println("\tPeek: " + stack.peek(0) + "; After Size: " + stack.size());
}
输出为:
Fastutil Stack of Doubles
Peek: 3.3; After Size: 4
Pop: 3.3; After Size: 3
Peek: 11.8; After Size: 3
应注意DoubleArrayList的peek()方法和pop()方法均已被废弃,DoubleArrayList继承了AbstractDoubleList。抽象类AbstractDoubleList中废弃了peek()方法和pop()方法。官方建议应直接使用具体的指定类型的类提供的方法,这里也就是add()方法和getDouble()方法。
Trove库提供了gnu.trove.TCollections类。它类似于java.util.Collections,可看作是一个子集。fastutil提供了类似的功能,可是它提供的是静态方法,且被分到指定类型或指定结构的集合类中。
比方IntSets类。与IntLinkedOpenHashSet结合使用。正如其名字,是指定了整型类型的集合类。提供了对应的静态方法。
3、IntSets与IntLinkedOpenHashSet结合使用
public static void demofastutilCollectionsClass(){
final IntLinkedOpenHashSet integers = new IntLinkedOpenHashSet();
integers.add(43);
integers.add(4);
integers.add(8);
integers.add(6);
final IntSet unmodifiableIntegers = IntSets.unmodifiable(integers);
System.out.println("Unmodifiable Integers: ");
System.out.println("\tClass: " + unmodifiableIntegers.getClass().getCanonicalName());
try{
unmodifiableIntegers.add(15);
}catch(Exception e){
System.out.println("\tException caught: " + e);
}
}
输出为:
Unmodifiable Integers:
Class: it.unimi.dsi.fastutil.ints.IntSets.UnmodifiableSet
Exception caught: java.lang.UnsupportedOperationException
fastutil支持标准Java迭代方法。使用明白定义的迭代器和Java 5引入的for-each循环。
fastutil集合还支持JDK 8风格的.forEach()方法,由于fastutil集合实现了java.util.Iterable接口。以下用代码进行说明:
4、fastutil集合以标准Java风格进行迭代
public static void demoIterationWithIterator(){
final LongOpenHashSet longs = new LongOpenHashSet();
longs.add(11);
longs.add(23401203413l);
longs.add(3);
longs.add(32);
longs.add(9);
final LongIterator longIterator = longs.iterator();
while(longIterator.hasNext()){
final long longValue = longIterator.next();
System.out.print(longValue + "\t");
}
}
输出为:
9 32 11 3 23401203413
.
public static void demoIteratorWithForEach(){
final LongLinkedOpenHashSet longs = new LongLinkedOpenHashSet();
longs.add(11);
longs.add(23401203413l);
longs.add(3);
longs.add(32);
longs.add(9);
for(final long longValue : longs){
System.out.print(longValue + "\t");
}
}
输出为:
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 + "\t"));
}
输出为:
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集合框架具体解释续的更多相关文章
- Java集合框架GS Collections具体解释
Java集合框架GS Collections具体解释 作者:chszs.未经博主同意不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs GS Collec ...
- 【JAVA集合框架之Map】
一.概述.1.Map是一种接口,在JAVA集合框架中是以一种非常重要的集合.2.Map一次添加一对元素,所以又称为“双列集合”(Collection一次添加一个元素,所以又称为“单列集合”)3.Map ...
- 《深入理解Java集合框架》系列文章
Introduction 关于C++标准模板库(Standard Template Library, STL)的书籍和资料有很多,关于Java集合框架(Java Collections Framewo ...
- java集合框架之java HashMap代码解析
java集合框架之java HashMap代码解析 文章Java集合框架综述后,具体集合类的代码,首先以既熟悉又陌生的HashMap开始. 源自http://www.codeceo.com/arti ...
- Java集合框架类
java集合框架类图 Collection接口(List.Set.Queue.Stack):
- 【java集合框架源码剖析系列】java源码剖析之java集合中的折半插入排序算法
注:关于排序算法,博主写过[数据结构排序算法系列]数据结构八大排序算法,基本上把所有的排序算法都详细的讲解过,而之所以单独将java集合中的排序算法拿出来讲解,是因为在阿里巴巴内推面试的时候面试官问过 ...
- Java集合框架面试题目
1.为什么Map接口不继承Collection 接口? Set是无序集合,并且不允许重复的元素 List是有序的集合,并且允许重复的元素 而Map是键值对 它被视为是键的set和值的set的组合 Ma ...
- Java集合框架源码分析(2)LinkedList
链表(LinkedList) 数组(array)和数组列表(ArrayList)都有一个重大的缺陷: 从数组的中间位置删除一个元素要付出很大的代价,因为数组中在被删除元素之后的所有元素都要向数组的前端 ...
- java集合框架——Map
一.概述 1.Map是一种接口,在JAVA集合框架中是以一种非常重要的集合.2.Map一次添加一对元素,所以又称为“双列集合”(Collection一次添加一个元素,所以又称为“单列集合”)3.Map ...
随机推荐
- MySQL数据库文件
MySQL数据库文件 本文档从MySQL数据库和存储引擎层面介绍各种类型的文件. 参数文件(my.cnf) 错误日志(error log) 二进制日志文件(binary log) 慢查询日志(slow ...
- 【JDBC-MVC模式】开发实例
JDBC - 开发实例-MVC模式 1. 在web.xml中配置连接数据库的信息 web.xml: <context-param> <param-name>server< ...
- spring tool suite (sts) 创建springmvc(没有实践)
摘自:STS(Spring Tool Suite)建立默认的spring mvc项目 老外的原创,网址:http://www.codejava.NET/frameworks/spring/spring ...
- IDM下载器使用方法详解:百度网盘下载,视频会员一网打尽!
一. IDM的设置 [01]IDM插件与各大浏览器的集成 默认情况下,在成功安装IDM后,直接点击这里的选项,会弹出[常规设置],一般情况下直接保持默认的配置即可,如果你使用的是比较小众的浏览器,你可 ...
- 配置工程文件dll编译后copy路径
放到工程文件的最后面的配置节点: 下面的配置节点中生成路径换成实际的相对路径就可以了 修改:Prject.csproj 文件里面的配置节点 project配置节点里面的最后面 <Target ...
- Mongodb 断电或者强制关机之后
Mongodb相信大家都比较熟悉了,将它注册为服务什么的就不说了,网上到处都是.在公司用的过程中,我发现在意外断电,或者强制关机之后,启动服务时候就会报错,找了很久,试了很多种方法,才发现,它有个自带 ...
- 一篇文章告诉你,TLS 1.3 如何用性能为 HTTPS 正名
序•魔戒再现 几天前,OpenSSL 官方宣布即将发布的新版本 (OpenSSL 1.1.1) 将会提供 TLS 1.3 的支持,而且还会和之前的 1.1.0 版本完全兼容,这当然是个好消息. ...
- Codevs 2693 上学路线(施工)
时间限制: 2 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题目描述 Description 问题描述 你所在的城市街道好像一个棋盘,有a条南北方向的街道和b条东西方向的街道. 南 ...
- 蓝桥杯 算法训练 最短路 [ 最短路 bellman ]
传送门 算法训练 最短路 时间限制:1.0s 内存限制:256.0MB 锦囊1 锦囊2 锦囊3 问题描述 给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证 ...
- 【纯净版windows系统】U盘启动制作图文教程
无废话,按照步骤来就可以. 1.一个大于4G的U盘(格式化)准备好U盘,请注意制作过程中对U盘有格式化操作,有用的东西请先备份 2.UltraISO(软碟通软件)下载安装百度“软碟通”,或者访问 ht ...