array-tree-table
使用二维数组实现的并且可用于排序的表格(Table), 支持json的序列化和反序列化
参考Table定义:Table源码
实现目标
查找 按行,按列,快速定位(guava中的table实现不能满足此要求)
快速迭代,按行,按列,支持稀疏迭代
泛型支持(通用化)
支持排序(guava中的TreeTable为不可变的)
行,列动态增长,削减
反序列化支持(guava中的table均不支持或没有序列化器支持)
基本使用
1.使用代码
//创建起相应的类
ArrayTreeTable table = new ArrayTreeTable<>(String.class, String.class, String.class,
(Class) String.CASE_INSENSITIVE_ORDER.getClass(), (Class) String.CASE_INSENSITIVE_ORDER.getClass());
table.init();//必要的初始化代码
//put数据
table.put("a","b","ab");
table.put("a","a","aa");
//获取数据
String value = table.get("a","b");
//其它可参考guava Table的注解
2.用于描述Table的5个类型信息
行,列,值,行比较器,列比较器分别对应rowClass,columnClass,valueClass,rowComparatorClass,columnComparatorClass
因此在进行构建时,推荐使用此5个参数的构建器,传递相应的信息
原无参构建函数专门用于反序列化器使用,不建议业务中使用
3.初始化
在创建好table时,必须调用相应的init进行必要信息的初始化,以初始化相应的数据信息
之所以不自动调用的原因是与反序列化兼容
4.API兼容性
整个实现与Table上的api完全兼容,能够做到按行,按列均能以相同的性能进行调用
在cell迭代时采用bitSet进行快速递进,避免在稀疏场景下的迭代问题
5.依赖项可选
在ArrayTreeTable上的类依赖于fastjson和jackson,但由于是annotation,因此编译为jar之后.
相应的依赖jar是可选的(optional),由java的getAnnotation并不会由于类的缺失由报错,会直接忽略不可接受的注解
序列化
1.fastjson
序列化时使用默认的方式即可,不需要作特别处理
由于table内自带相应的类型信息,因此使用fastjson时不再需要writeClass.
同时由于table集合的特殊性,writeClass会增加json的大小,因此不建议开启writeClass(由于是默认开启,因此需要将其关闭)
反序列需要注册指定的反序列化器,由类ArrayTreeTableDeserializer提供
使用方式可以参考测试类FastJsonUtils
2.jackson
序列化时使用默认的方式即可,不需要作特别处理
反序列化由类ArrayTreeTableDeserializer(包名中有jackson的类,注意与fastjson隔离)
由于已在类上面设定相应的反序列化器,因此不需要手动注册,但是由于deserializer要初始化其它信息,需要引用objectMapper
因此需要提前进行相应信息的注册和处理
使用方式可以参考测试类JacksonUtils

被折叠的 条评论
为什么被折叠?



