一、简介
Table:它具有两个key[行, 列],对应一个值
Table是Guava提供的一个接口 Interface Table<R,C,V>
Table可以看成:Table<R,C,V> == Map<R,Map<C,V>>
Table接口有以下实现:
HashBasedTable:基于HashMap<R,HashMap<C,V>>HashMap<R,HashMap<C,V>>的实现。
TreeBasedTable:基于TreeMap<R,TreeMap<C,V>>TreeMap<R,TreeMap<C,V>>的实现。
ImmutableTable:基于ImmutableMap<R,ImmutableMap<C,V>>ImmutableMap<R,ImmutableMap<C,V>>的实现
ImmutableTable:不可变table,创建后不能修改
TreeBasedTable:对行或列排序的table
二、它的主要方法:
S.N. | 方法 & 描述 |
---|---|
1 | Set<Table.Cell<R,C,V>> cellSet() 返回集合中的所有行键/列键/值三元组。 |
2 | void clear() 从表中删除所有映射。 |
3 | Map<R,V> column(C columnKey) 返回在给定列键的所有映射的视图。 |
4 | Set<C> columnKeySet() 返回一组具有表中的一个或多个值的列键。 |
5 | Map<C,Map<R,V>> columnMap() 返回关联的每一列键与行键对应的映射值的视图。 |
6 | boolean contains(Object rowKey, Object columnKey) 返回true,如果表中包含与指定的行和列键的映射。 |
7 | boolean containsColumn(Object columnKey) 返回true,如果表中包含与指定列的映射。 |
8 | boolean containsRow(Object rowKey) 返回true,如果表中包含与指定的行键的映射关系。 |
9 | boolean containsValue(Object value) 返回true,如果表中包含具有指定值的映射。 |
10 | boolean equals(Object obj) 比较指定对象与此表是否相等。 |
11 | V get(Object rowKey, Object columnKey) 返回对应于给定的行和列键,如果没有这样的映射存在值,返回null。 |
12 | int hashCode() 返回此表中的哈希码。 |
13 | boolean isEmpty() 返回true,如果表中没有映射。 |
14 | V put(R rowKey, C columnKey, V value) 关联指定值与指定键。 |
15 | void putAll(Table<? extends R,? extends C,? extends V> table) 复制从指定的表中的所有映射到这个表。 |
16 | V remove(Object rowKey, Object columnKey) 如果有的话,使用给定键相关联删除的映射。 |
17 | Map<C,V> row(R rowKey) 返回包含给定行键的所有映射的视图。 |
18 | Set<R> rowKeySet() 返回一组行键具有在表中的一个或多个值。 |
19 | Map<R,Map<C,V>> rowMap() 返回关联的每一行按键与键列对应的映射值的视图。 |
20 | int size() 返回行键/列键/表中的值映射关系的数量。 |
21 | Collection<V> values() 返回所有值,其中可能包含重复的集合。 |
三、HashBasedTable方法的使用1
1、把数据存储到Table中
Table<String,String,Integer> tables = HashBasedTable.create(); tables.put("a", "javase", 80); tables.put("b", "javaee", 90); tables.put("c", "javame", 100); tables.put("d", "guava", 70);
2、得到所有行数据 tables.cellSet()
Set<Cell<String,String,Integer>> cells = tables.cellSet(); for(Cell<String,String,Integer> temp : cells) { System.out.println(temp.getRowKey()+" "+temp.getColumnKey()+" "+temp.getValue()); }
输出结果:
d guava 70 b javaee 90 c javame 100 a javase 80
3、得到所有行(学生)rowKeySet()
Set<String> students = tables.rowKeySet(); for(String str : students) { System.out.print(str+"\t"); }
输出结果:
d b c a
4、得到所有列(课程)columnKeySet()
Set<String> courses = tables.columnKeySet(); for(String str : courses) { System.out.print(str+"\t"); }
输出结果:
70 90 100 80
5、得到所有值(成绩)values
Collection<Integer> scores = tables.values(); for(Integer in : scores) { System.out.print(in+"\t"); }
输出结果:
70 90 100 80
6、得到行和值(学生的课程成绩表) rowMap+get(stu)/row(stu)
for(String str : students) { Map<String,Integer> rowMap = tables.row(str); Set<Entry<String,Integer>> setEntry = rowMap.entrySet(); for(Entry<String,Integer> entry : setEntry) { System.out.println(entry.getKey()+" "+entry.getValue()); } }
输出结果:
guava 70 javaee 90 javame 100 javase 80
7、得到列和值(学生的姓名成绩表 )columnMap+get(course)/column(course)
for (String str : courses) { Map<String, Integer> rowMap2 = tables.column(str); Set<Entry<String, Integer>> setEntry2 = rowMap2.entrySet(); for (Entry<String, Integer> entry : setEntry2) { System.out.println(entry.getKey() + " " + entry.getValue()); } }
输出结果为:
d 70 b 90 c 100 a 80
四、HashBasedTable方法的使用2
1、允许row和column确定的二维点重复
table.put(1, 2, 3); table.put(1, 6, 3);
2、判断row和column确定的二维点是否存在
if(table.contains(1, 2)) { table.put(1, 4, 4); table.put(2, 5, 4); }
3、获取某行或某列对应的数据集
获取column为5的数据集:
Map<Integer, Integer> column = table.column(5); System.out.println(column);
获取rowkey为1的数据集:
Map<Integer, Integer> row = table.row(1); System.out.println(row);
获取所有的rowKey值的集合:
Set<Integer> keySet = table.rowKeySet(); System.out.println(keySet);
获取所有的columnKey值的集合:
Set<String> columnSet = tables.columnKeySet(); System.out.println(columnSet);
5、获取某行某列的结果
获取rowKey为1,columnKey为2的的结果
Integer value = table.get(1, 2); System.out.println(value);
6、判断是否包含某个值或 某行或某列的值
判断是否包含columnKey的值:
System.out.println(table.containsColumn(3));
判断是否包含rowKey为1的视图:
System.out.println(table.containsRow(1));
判断是否包含值为2的集合:
System.out.println(table.containsValue(2));
7、将table转换为Map套Map格式
Map<Integer, Map<Integer, Integer>> rowMap = table.rowMap(); Map<Integer, Map<Integer, Integer>> columnMap = table.columnMap();
8、删除元素或清空集合
删除rowKey为1,columnKey为2的元素,返回删除元素的值:
Integer res = table.remove(1, 2); System.out.println(res);
清空集合:
table.clear(); System.out.println(table);