FastUtils简介
fastutil通过提供特定类型的映射,集合,列表和优先级队列来扩展Java™集合框架,并且占用内存很少,并且可以快速访问和插入; 还提供大(64位)数组,集和列表,以及用于二进制和文本文件的快速,实用的I / O类。
性能
特定类型的Map和Set比标准的集合类快上2-10倍。但是以对象作为key的HashMap往往比jdk的HashMap慢,因为fastutil不会缓存hashCode。
fastutil的树状数据结构有红黑树和AVL。树小时,红黑树速度更快,avl在大的数据时效率更高。
fastutil极大的减少了对象的创建和收集。使用多态的方法和迭代器,减少包装类的创建。fastutils的Hash结构的map采用开放地址法,避免hash条目的创建和垃圾回收。
三个核心组成
1、扩展自JAVA集合框架的特定类型的类,如IntList,IntSet.
2、支持大集合的类
3、快速访问二进制文件和文本文件的类
特定类型集合类
通过大量特定类型的集合类,避免自动开箱/拆箱,提高性能和节省内存。
Fastutils集合类的命名规范
1、集合:数据类型+集合类型 如:IntArrayList,IntArraySet等;
2、映射:Key类型+2+value类型+Map类型 如Int2IntArrayMap;
1)、所有fastutil数据结构都根据固定的类型扩展,尝试使用错误类型的键或值都会产生一个ClassCastException。如Int类型的IntArrayList集合只能加入int类型的元素。fastutils中的集合数据类型有10种:8种基本数据类型+Object+Reference。
2)、要使用引用类型的集合,需要使用Object类型或者Reference类型的集合类,例如ObjectArrayList,ReferenceArrayList。
3)、fastutils的数据结构类都实现了对应jdk的标准接口(List,Set,Map等)。
使用例子
//===========IntList
//1、初始化
IntList list = new IntArrayList();
//2、利用数组快速初始化集合
IntList list = new IntArrayList(new int[]{1,2,3});
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
//1、初始化Map
Int2BooleanMap map = new Int2BooleanArrayMap();
map.put(1, true);
map.put(2, false);
//2、利用数组快速初始化Map 1-->true 2-->false
Int2BooleanMap map = new Int2BooleanArrayMap(new int[]{1,2},new boolean[]{true,false});
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/84783.html