fastutil简介 - PowerPoint PPT Presentation

galena-hanson
fastutil myz n.
Skip this Video
Loading SlideShow in 5 Seconds..
fastutil简介 PowerPoint Presentation
Download Presentation
fastutil简介

play fullscreen
1 / 16
Download Presentation
fastutil简介
128 Views
Download Presentation

fastutil简介

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. fastutil介绍 myz

  2. fastutil简介 fastutil代码实例 fasutil的核心部分 目录

  3. fastutil 简介 fastutil 扩展了java的colleciton framework ,它提供了一系列特殊类型的maps,sets, lists 和priority queues,fastutil具有内存占用小,访问速度快,提供大的(64位)的arrays ,sets ,lists类型,以及快速实用的二进制及文本文件的的输入输出操作。 Vector list ArrayList collecton LinkedList HashSet set TreeSet java collection framework Hashtable map HashMap TreeMap

  4. fastutil简介 fastutil 三个核心 1、对java集合框架(collection framework)特定类型的扩展 2、支持大容器的类(big arrays, big lists, big hashsets) 3、对于二进制及文本文件的快速实用的访问类

  5. 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最重要关键是--------理解你所需要类的类名

  6. typt-specific classes 举例说明: <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)) ) Colleciotns 的命名: value type collection type Maps 的命名: keytype2valuetype maptype

  7. typt-specific classes fastutil的组织结构 fastutil中的包是按照元素或者key的数据类型来分类的 例如: IntSet 是在it.unimi.dsi.fastutil.ints包下 Int2ReferenceRBTreeMap也是放在it.unimi.dsi.fastutil.ints包下 所有的非基本数据类型放在饿了it.unimi.dsi.fastutil.objects包下 最后,还有一些非特殊类型的类放在了it.unimi.dsi.fastutil包下

  8. 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

  9. 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)

  10. big arrays BigArrays的所有方法(一): newBigArray(long length) 新建一个big arrays get(int[][],index):返回指定下标的值 fill(int[][],value):对big arrays 的值进行填充 set(int[][],long index,int value):设置指定位置的值为value swap(int[][],long first,long second):交换两个位置的值 add(int[][]array,long index,int incr):把index处的值加上incr mul(int[][],long index,int factor):把index处的值乘以factor incr(int[][],long index):把指定位置的值加1 decr(int[][],long index):把指定位置的值减1 length(int[][] array):求big arrays 的长度

  11. 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 array int [ ] [ ] grow( int [ ] [ ] array,long length,long preserve):让big array 长大到长度为length ,但是只保留preserve个元素可用 int [ ] [ ] trim( int [ ] [ ] array , long length):修剪给定的big array int [ ] [ ] setLength( int [ ] [ ] array, long length):设置给定big array的长度 equals( int [ ] [ ] a1, int [ ] [ ] a2)比较两个big array (会快)

  12. 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

  13. fastutil----I/O fastutil--I/O中的接口、类、枚举变量

  14. 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) 该方法是从一个文件对象里读出数据,存储到一个大数组里。

  15. 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

  16. 谢谢观赏 WPSOffice Make Presentation much more fun @WPS官方微博 @kingsoftwps