Table接口

Table是Guava在jdk的基础上新增的一种新集合类型,是一个有序的键值对集合。可能通过行和列取出对应的值。而Table有可能是稀疏的,不是每个行列对都会有值。可以通过行(列)键值或取出一行(列)的数据,也可以同时使用,取出唯一的映射值。返回集合的方法是返回Tabale的中对象的引用,修改集合会修改表,修改表也会修改集合中的对象。所有函数操作都是可选的,如果所选的函数不可修改Table,则会抛出UnsupportedOperationException

Table接口的实现ArrayTable, ForwardingTable, HashBasedTable, ImmutableTable

ArrayTable

ArrayTable的行和列的长度在初始化后是固定不可变的,行与列的键值不可为Null。Table接口中的clear及remove方法也不可使用,否则会报错,不过可以用erase及eraseAll方法代替。ArrayTable比 HashBasedTable和TreeBasedTable更有效地利用内存,除非ArrayTable是稀疏的。

注意此实现并不是线程安全的

ForwardingTable

ForwardingTable是实现了Table接口的抽象类

HashBasedTable

HashBasedTable拥有Tabel接口的所有方法,通过column(c)columnKeySet()和columnMap()返回的视图是一个不支持remove()方法的迭代器(Iterator)

此实现中的所有列和行键值,以及对应的值也不可为空。通过行查询比通过列查询更高效。因为它的数据是存储在Map>这个结构中。理论上查询列的长度比查询行的长度会消耗更多的时间。

注意,此实现同样非线程安全。

ImmutableTable

ImmutableTable一经初始化,就不可以改变它里面的所有值,相当于只读。许多其他重要属性在ImmutableCollection

RowSortedTable接口

RowSortedTable是一个继承Table的接口,它的特别之处是表格中的行是有序的

RowSortedTable接口的实现TreeBasedTable

TreeBasedTable

TreeBasedTable是一个有序的表格,类型List,可以通过自身的comparator比较大小进行排序。当你构造此对象时,如果不为之先指定Comparator,则会使用默认的Comparator.

rowKeySet()方法返回一个SortedSet对象,rowMap()方法返回一个SortedMap对象,用来代替Set对象及Map对象。