Table集合
来源:互联网 发布:mac os 五笔输入法 编辑:程序博客网 时间:2024/06/08 11:41
当需要多个索引的数据结构的时候,通常情况下,会用到Map<key1, Map<value1, value>>来实现。
Guava提供Table集合类型,来满足这种使用场景。Table支持“row”和“column”,而且提供多种视图。
Table其它操作:
rowMap()返回一个Map<R, Map<C, V>>的视图。rowKeySet()类似地返回一个Set<R>。
row(r)返回一个非null的Map<C, V>。修改这个视图Map也会导致原表格的修改。和列相关的方法有columnMap(), columnKeySet()和column(c)。(基于列的操作会比基于行的操作效率差些)。
cellSet()返回的是以Table.Cell<R, C, V>为元素的Set。这里的Cell就类似Map.Entry,但是它是通过行和列来区分的。
Table有以下实现:
HashBasedTable:基于HashMap<R, HashMap<C, V>>的实现。
TreeBasedTable:基于TreeMap<R, TreeMap<C, V>>的实现。
ImmutableTable:基于ImmutableMap<R, ImmutableMap<C, V>>的实现。(ImmutableTable已对稀疏和密集集合做了优化)。
ArrayTable:ArrayTable是一个需要在构建的时候就需要定下行列的表格。这种表格由二维数组实现,这样可以在密集数据的表格的场合,提高时间和空间的效率。
如下构建 <year,<month, LocalDate>> 的数据结构:
Map<String, Map<String, LocalDate>> dateMap = new HashMap<>();for (int i = 2015; i <= 2016; i++) { for (int j = 1; j < 3; j++) { Map<String, LocalDate> map = dateMap.get(String.valueOf(i)); if (map == null) { map = new HashMap<>(); dateMap.put(String.valueOf(i), map); } map.put(String.valueOf(j), LocalDate.of(2016, Month.of(j), 01)); }}System.out.println(dateMap);可以看出,这里需要有null判断,比较繁琐。
Guava提供Table集合类型,来满足这种使用场景。Table支持“row”和“column”,而且提供多种视图。
//rowKey, columnKey, valueObjectTable<String, String, LocalDate> dateTable = HashBasedTable.create();for (int i = 2015; i <= 2016; i++) { for (int j = 1; j < 3; j++) { dateTable.put(String.valueOf(i), String.valueOf(j), LocalDate.of(i, Month.of(j), 01)); }}Map<String, Map<String, LocalDate>> dateMap = dateTable.rowMap();System.out.println(dateMap);System.out.println("year=2015 ---> " + dateTable.row("2015"));System.out.println("month=1 ---> " + dateTable.column("1"));System.out.println("year=2015 and month=1 ---> " + dateTable.get("2015", "1"));System.out.println("containsColumn(3) ---> " + dateTable.containsColumn(3));System.out.println("containsRow(2014) ---> " + dateTable.containsRow("2014"));System.out.println("columnMap ---> " + dateTable.columnMap());System.out.println("rowMap ---> " + dateTable.rowMap());System.out.println(dateTable.remove("2015", 1));
运行结果:
{2016={1=2016-01-01, 2=2016-02-01}, 2015={1=2015-01-01, 2=2015-02-01}}year=2015 ---> {1=2015-01-01, 2=2015-02-01}month=1 ---> {2016=2016-01-01, 2015=2015-01-01}year=2015 and month=1 ---> 2015-01-01containsColumn(3) ---> falsecontainsRow(2014) ---> falsecolumnMap ---> {1={2016=2016-01-01, 2015=2015-01-01}, 2={2016=2016-02-01, 2015=2015-02-01}}rowMap ---> {2016={1=2016-01-01, 2=2016-02-01}, 2015={1=2015-01-01, 2=2015-02-01}}null可以看出使用guava的Table要比上一个例子简洁很多。
Table其它操作:
rowMap()返回一个Map<R, Map<C, V>>的视图。rowKeySet()类似地返回一个Set<R>。
row(r)返回一个非null的Map<C, V>。修改这个视图Map也会导致原表格的修改。和列相关的方法有columnMap(), columnKeySet()和column(c)。(基于列的操作会比基于行的操作效率差些)。
cellSet()返回的是以Table.Cell<R, C, V>为元素的Set。这里的Cell就类似Map.Entry,但是它是通过行和列来区分的。
Table有以下实现:
HashBasedTable:基于HashMap<R, HashMap<C, V>>的实现。
TreeBasedTable:基于TreeMap<R, TreeMap<C, V>>的实现。
ImmutableTable:基于ImmutableMap<R, ImmutableMap<C, V>>的实现。(ImmutableTable已对稀疏和密集集合做了优化)。
ArrayTable:ArrayTable是一个需要在构建的时候就需要定下行列的表格。这种表格由二维数组实现,这样可以在密集数据的表格的场合,提高时间和空间的效率。
0 0
- Table集合
- oracle集合类型table
- oracle 集合 index table
- Table 对象集合
- table(集合对象)
- Html table cells 集合问题
- Oracle函数返回Table集合
- JS中Table对象集合
- 浅谈Oracle函数返回Table集合
- oracle 方法返回集合类型[table]
- Oracle 方法返回集合类型[table]
- JavaScript中table对象集合整理
- oracle使用object,table输出集合
- PL/SQL每日一题:TABLE()和集合类型定义
- PL/SQL 记录集合IS TABLE OF的使用
- Guava学习笔记:Guava新集合-Table等
- PL/SQL 记录集合IS TABLE OF的使用
- Lua库(math、string、table)常用方法集合
- 用队列打印杨辉三角
- 改变网络接口速度和协商方式miitool和ethtool
- 消除绝对定位的影响
- 文件上传和下载(二)--【struts2】
- java内存分配和String类型的深度解析
- Table集合
- alsa声卡驱动分析总结(一)
- 存储系统-主存的刷新和检验
- ios开发根据Label的字体和宽度算出它的高度
- 准备Scala开发环境
- 禅道学习笔记
- sharesdk 各主流平台的步骤和分享注意事项
- Android 属性动画(Property Animation)介绍
- 简单线性回归