代码编织梦想

一、简介

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.方法 & 描述
1Set<Table.Cell<R,C,V>> cellSet()
返回集合中的所有行键/列键/值三元组。
2void clear()
从表中删除所有映射。
3Map<R,V> column(C columnKey)
返回在给定列键的所有映射的视图。
4Set<C> columnKeySet()
返回一组具有表中的一个或多个值的列键。
5Map<C,Map<R,V>> columnMap()
返回关联的每一列键与行键对应的映射值的视图。
6boolean contains(Object rowKey, Object columnKey)
返回true,如果表中包含与指定的行和列键的映射。
7boolean containsColumn(Object columnKey)
返回true,如果表中包含与指定列的映射。
8boolean containsRow(Object rowKey)
返回true,如果表中包含与指定的行键的映射关系。
9boolean containsValue(Object value)
返回true,如果表中包含具有指定值的映射。
10boolean equals(Object obj)
比较指定对象与此表是否相等。
11V get(Object rowKey, Object columnKey)
返回对应于给定的行和列键,如果没有这样的映射存在值,返回null。
12int hashCode()
返回此表中的哈希码。
13boolean isEmpty()
返回true,如果表中没有映射。
14V put(R rowKey, C columnKey, V value)
关联指定值与指定键。
15void putAll(Table<? extends R,? extends C,? extends V> table)
复制从指定的表中的所有映射到这个表。
16V remove(Object rowKey, Object columnKey)
如果有的话,使用给定键相关联删除的映射。
17Map<C,V> row(R rowKey)
返回包含给定行键的所有映射的视图。
18Set<R> rowKeySet()
返回一组行键具有在表中的一个或多个值。
19Map<R,Map<C,V>> rowMap()
返回关联的每一行按键与键列对应的映射值的视图。
20int size()
返回行键/列键/表中的值映射关系的数量。
21Collection<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);

最后:TreeBasedTable的使用方式跟HashBasedTable基本相同

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/AlbenXie/article/details/115481365

google guava学习(8)-guava集合工具 table接口_jalen备忘录的博客-爱代码爱编程

1. 功能:简化表格操作,形似Excel的单元格操作; 2. 代码: package com.example.google.guava.demo.collection; import com.google.common.collect.HashBasedTable; import com.google.common.collect.Table;

guava新集合类型_卓立~的博客-爱代码爱编程_guava 新集合类型

开发中,集合类型无疑是JDK最常用的数据类型之一。但是JDK提供的诸如List、Set、Map都是一些基础的集合类型,有这特定的使用场景限制,往往不能满足我们的开发需求,比如集合类型嵌套的情况,Map<string, List<String>>甚至更复杂的嵌套类型等。Guava在JDK集合框架的基础上新开发了一套常用的集合类型,以简

谷歌guava工具包详解_munger6的博客-爱代码爱编程_guava包

概述 工具类 就是封装平常用的方法,不需要你重复造轮子,节省开发人员时间,提高工作效率。谷歌作为大公司,当然会从日常的工作中提取中很多高效率的方法出来。所以就诞生了guava。 guava的优点: 高效设计良好的API,被Google的开发者设计,实现和使用遵循高效的java语法实践使代码更刻度,简洁,简单节约时间,资源,提高生产力 Guava工程包

Guava学习笔记:Guava新集合-Table等-爱代码爱编程

本文转载自: http://www.cnblogs.com/peida/p/3183505.html 作者:peida 转载请注明该声明。   Table   当我们需要多个索引的数据结构的时候,通常情况下,我们只能用这种丑陋的Map<FirstName, Map<LastName, Person>>来实现。为此Guava提供了

关于table元素最后一个子节点的问题-爱代码爱编程

最近在慕课网上学习javascript,编写练习代码,需要删除表格里的一行。参考代码的删除函数是: function deleteRow(obj){         var tbody = document.getElementById('table').lastChild;           var tr = obj.parentNode.paren

Guava 心得:Guava 新集合 —— Table 等-爱代码爱编程

Table 当我们需要多个索引的数据结构的时候,通常情况下,我们只能用这种丑陋的Map<FirstName, Map<LastName, Person>>来实现。为此Guava提供了一个新的集合类型-Table集合类型,来支持这种数据结构的使用场景。Table支持“row”和“column”,而且提供多种视图。 @Test

Google 开源的 Guava 工具库,太强大了~-爱代码爱编程

目前Google Guava在实际应用中非常广泛,本篇博客将以博主对Guava使用的认识以及在项目中的经验来给大家分享!正如标题所言,学习使用Google Guava可以让你快乐编程,写出优雅的JAVA代码! 以面向对象思想处理字符串:Joiner/Splitter/CharMatcher JDK提供的String还不够好么? 也许还不够友好,至少让我们

google java. 集合_google guava集合之Table-爱代码爱编程

在guava库中还提供了一种二维表结构:Table。使用Table可以实现二维矩阵的数据结构,可以是稀溜矩阵。 我们看一个使用示例:import com.google.common.collect.HashBasedTable;import com.google.common.collect.Table;import java.util.Map;pu