fastutil简介
DESCRIPTION
fastutil 介绍 myz. fastutil简介. fastutil代码实例. fasutil的核心部分. 目录. fastutil 简介. fastutil 扩展了java的colleciton framework ,它提供了一系列特殊类型的maps,sets, - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: fastutil简介](https://reader036.vdocuments.pub/reader036/viewer/2022062517/5681332d550346895d9a2793/html5/thumbnails/1.jpg)
fastutil介绍
myz
![Page 2: fastutil简介](https://reader036.vdocuments.pub/reader036/viewer/2022062517/5681332d550346895d9a2793/html5/thumbnails/2.jpg)
目录
fastutil 简介
fastutil 代码实例
fasutil 的核心部分
![Page 3: fastutil简介](https://reader036.vdocuments.pub/reader036/viewer/2022062517/5681332d550346895d9a2793/html5/thumbnails/3.jpg)
fastutil 简介
fastutil 扩展了 java 的 colleciton framework ,它提供了一系列特殊类型的 maps,sets,lists 和 priority queues , fastutil 具有内存占用小,访问速度快,提供大的( 64位)的 arrays ,sets ,lists 类型,以及快速实用的二进制及文本文件的的输入输出操作。
java collection framework
collecton
map
list
set
VectorArrayListLinkedListHashSet
TreeSet
Hashtable
HashMap
TreeMap
![Page 4: fastutil简介](https://reader036.vdocuments.pub/reader036/viewer/2022062517/5681332d550346895d9a2793/html5/thumbnails/4.jpg)
fastutil 简介
fastutil 三个核心
1 、对 java 集合框架 (collection framework) 特定类型的扩展
2 、支持大容器的类 (big arrays, big lists, big hashsets)
3 、对于二进制及文本文件的快速实用的访问类
![Page 5: fastutil简介](https://reader036.vdocuments.pub/reader036/viewer/2022062517/5681332d550346895d9a2793/html5/thumbnails/5.jpg)
typt-specific classes
在 java 里面, colleciton framework 的使用运用了泛型,而 fastutil 实现了更为严格的接口来扩展和强化 java 标准的接口。( 例如: Int2SortedMap , Long2IntHashMap , ShortArrays , IntListIterator)
8 种基本数据类型加上引用类型的组合,使得 fastutil 包含了 1794 个类
以至于在 API 中特地强调了这么一句话:( 原文如下 )The huge number of classes required a suitable division in subpackages (more than anything else, to avoid crashing browsers with a preposterous package summary).
所以学习 fastutil 最重要关键是 -------- 理解你所需要类的类名
![Page 6: fastutil简介](https://reader036.vdocuments.pub/reader036/viewer/2022062517/5681332d550346895d9a2793/html5/thumbnails/6.jpg)
typt-specific classes
Colleciotns 的命名:
value type collection type
Maps 的命名:
keytype2valuetype maptype
举例说明:<1> IntOpenHashSet 是一个存储 integers 类型的 hashset ,它同时实现了 IntSet 接口<2> Long2IntAVLTreeMap 是一个 key值为 long ,value 值为 int 并且用 AVLTree来构建 map, 它实现了 Long2IntMap 接口<3> Reference2ReferenceOpenHashMap 类似于 java 里面的 IdentityHashMap (一个用 hash 表实现了 map 接口的类,元素的相等性判断使用引用类型判断 , 而不是用 (k1==null ? k2==null : k1.equals(k2)) )
![Page 7: fastutil简介](https://reader036.vdocuments.pub/reader036/viewer/2022062517/5681332d550346895d9a2793/html5/thumbnails/7.jpg)
typt-specific classes
fastutil 中的包是按照元素或者 key 的数据类型来分类的
例如:
IntSet 是在 it.unimi.dsi.fastutil.ints 包下Int2ReferenceRBTreeMap 也是放在 it.unimi.dsi.fastutil.ints 包下所有的非基本数据类型放在饿了 it.unimi.dsi.fastutil.objects 包下最后,还有一些非特殊类型的类放在了 it.unimi.dsi.fastutil 包下
fastutil 的组织结构
![Page 8: fastutil简介](https://reader036.vdocuments.pub/reader036/viewer/2022062517/5681332d550346895d9a2793/html5/thumbnails/8.jpg)
typt-specific classes
在 fastutil 中增添了不少新特性:
例如:1 、 HashSet 增加了一个 get() 方法( java 中要用迭代器),返回集合中的值。2 、迭代器 iterators 是双向的( java 中 iterator 只能是单向移动,只有 ListIterator 可以双向移动),所有的迭代器都有 nexttype() 方法,直接返回一个基本数据类型,也可以用 previous() 向前迭代。3 、可以通过数组或者迭代器轻松的构造一个 sets (在 java 里面要用 add 或者 addll 方法才可以),例如快速的创建一个 Strings 的 set new ObjectOpenHashSet(new String[] { " foo " , " bar " }); 或者用迭代器: new IntArrayList( iterator )4 、基于树的类一般都有两种选择: AVL 和红黑树( java 中,元素是存储在 RB 树中),都是自平衡的二叉查找树,红黑树删除操作快,所以处理小规模树的时候用红黑树,处理大数据集的时候用 AVL 树, AVL 有更新速度慢,但是搜索速度快的特点
看一个 example
![Page 9: fastutil简介](https://reader036.vdocuments.pub/reader036/viewer/2022062517/5681332d550346895d9a2793/html5/thumbnails/9.jpg)
big arrays
BigArrays 是一个提供了静态方法的类,用来处理大数组BigArrays 的表现形式是“数组的数组”,比如一个 integers 元素类型的大数组,其实就是一个二维数组 int [] [] 。假如 a 是一个大数组, a[0],a[1],…… 被称为是大数组的分段( segment ),所有的分段最大长度是 SEGMENT_SIZE(2^27)可以这样理解 Big Arrays 在小于 2^27 个元素的时候是一维数组,当大于此数后就自动扩充为二维数组。
big arrays 的分类是按数据类型分的 ( 下面十个类分别放在不同的包里 )
BigArrays , IntBigArrays , ByteBigArrays , CharBigArrays , DoubleBigArrays , FloatBigArrays , LongBigArrays , ObjectBigArrays , ShortBigArrays , BooleanBigArrays ( 8 个基本数据类型加上 Object 和 BigArrays )
![Page 10: fastutil简介](https://reader036.vdocuments.pub/reader036/viewer/2022062517/5681332d550346895d9a2793/html5/thumbnails/10.jpg)
big arrays
BigArrays 的所有方法 ( 一 ) :
newBigArray( long length) 新建一个 big arraysget ( int [ ] [ ] , index ) : 返回指定下标的值fill ( int [ ] [ ] , value) :对 big arrays 的值进行填充 set ( int [ ] [ ] , long index , int value ) :设置指定位置的值为 valueswap( int [ ] [ ] , long first , long second ):交换两个位置的值 add ( int [ ] [ ] array , long index , int incr):把 index 处的值加上 incr mul ( int [ ] [ ] , long index , int factor):把 index 处的值乘以 factorincr ( int [ ] [ ] , long index):把指定位置的值加 1decr ( int [ ] [ ] , long index):把指定位置的值减 1length ( int [ ] [ ] array):求 big arrays 的长度
![Page 11: fastutil简介](https://reader036.vdocuments.pub/reader036/viewer/2022062517/5681332d550346895d9a2793/html5/thumbnails/11.jpg)
fastutil 简介
BigArrays 的所有方法(二)
copy(itn[][] srcArray ,long srcPos,int[][] destArray,long destPos,long length) copyFromBIg(int[][] rcArray , long srcPos ,int[] destArray , int destPos, int length) copyToBig(int[][] srcAray , int srcPos , int[][] destArray , long destPos , long length) int [ ] [ ] warp ( int [ ] array ):把一个标准数组转化成 big arrayint [ ] [ ] grow( int [ ] [ ] array,long length,long preserve) :让 big array 长大到长度为 length ,但是只保留 preserve 个元素可用int [ ] [ ] trim( int [ ] [ ] array , long length) :修剪给定的 big arrayint [ ] [ ] setLength( int [ ] [ ] array, long length):设置给定 big array 的长度equals( int [ ] [ ] a1, int [ ] [ ] a2) 比较两个 big array (会快)
![Page 12: fastutil简介](https://reader036.vdocuments.pub/reader036/viewer/2022062517/5681332d550346895d9a2793/html5/thumbnails/12.jpg)
fastutil 简介
BigArrays 所有方法(三)
quickSort( int [ ] [ ] x ,long from ,long to, IntComparator comp)quickSort( int [ ] [ ] x , IntComparator comp)quickSort( int [ ] [ ] x, long from,long to)quickSort( int [ ] [ ] x)
binarySearch(int [ ] [ ] a, long from ,long to ,int key)二分查找在 big array 中从下标为 from 到 to 中查找 key ,返回下标值binarySearch(int [ ] [ ] a,int key)二分查找在 big array 中查找 key ,返回下标值radixSort ( ) 基数排序Shuffle( int [ ] [ ] a ,long from, long to ,Randomo random)Shuffle( int [ ] [ ] a ,Random random)混排算法(用的是 Knuth 混排算法)big arrays 的 example
![Page 13: fastutil简介](https://reader036.vdocuments.pub/reader036/viewer/2022062517/5681332d550346895d9a2793/html5/thumbnails/13.jpg)
fastutil----I/O
fastutil--I/O 中的接口、类、枚举变量Interface
MeasurableStream 提供一个能够获得文件或者流的长度或者跟踪当前的位置,例如:读了多少字节或者当前文件指针位置
RepositionableStream 一个针对字节流给出定位方法的基本接口
ClassBinIO 提供一些能够更容易操作二进制 I/O的 static方法
FastBufferedInputStream 针对标准库中的一些输入流进行改造,能够更好的实现一些不同步或者行读取的方法,能够更容易和更快的进行读取。
FastBufferedOutputStream 与上边相同,只不过提供的是输出流
FastByteArrayInputStream 简单快速并且更准确的实现字节输入流
FastByteArrayOutputStream 与上边的类似
FastMultiByteArrayInputStream 能够在多个阵列数组中实现简单快速和能够重新定位的字节输入流
MeasurableInputStream 实现了MeasurableStream接口中的内容
MeasurableOutputStream 同上
EnumFastBufferedInputStream.LineTerminator
提供了针对行结束字符的枚举
![Page 14: fastutil简介](https://reader036.vdocuments.pub/reader036/viewer/2022062517/5681332d550346895d9a2793/html5/thumbnails/14.jpg)
fastutil----I/O
public static BooleanIterator asBooleanIterator(File file)将一个文件的内容存入一个迭代器对象
public static byte[] loadBytes(File file)从给定的文件对象中读出数据,存储到一个字节数组里面(类似的方法有, loadInts , loadChars , loadDoubles , loadFloats , loadLongs , loadShorts )用这些方法的时候有一个非常大限制,假设新创建一个 txt 文档,然后输入一些字符并保存,用上述方法是无法读取(乱码),只有 loadBytes() 才能正常读取,如果要使用上述方法,必须配套使用 storeX() 方法。
public static byte[][] loadBytesBig(File file)该方法是从一个文件对象里读出数据,存储到一个大数组里。
![Page 15: fastutil简介](https://reader036.vdocuments.pub/reader036/viewer/2022062517/5681332d550346895d9a2793/html5/thumbnails/15.jpg)
fastutil----I/O
FastBufferedInputStream---------- 用法与熟知的 BufferedInputStream 相同
使用方法:文本的一行内容为: I am a good student.
FastBufferedInputStream fbin = new FastBufferedInputStream(new FileInputStream(file));
byte[] buffer = new byte[10];int count = fbin.readLine(buffer);System.out.println(count);System.out.println(new String(buffer));
输出结果: 10 I am a goo
![Page 16: fastutil简介](https://reader036.vdocuments.pub/reader036/viewer/2022062517/5681332d550346895d9a2793/html5/thumbnails/16.jpg)
谢谢观赏
WPS OfficeMake Presentation much more fun
@WPS官方微博
@kingsoftwps