Guava库学习:学习Collections(七)Table

    链接地址:http://www.xx566.com/detail/147.html

    上一篇,我们学习了Collections(六)BiMap与HashBiMap,BiMap 是一种特殊的key-value双向关联的数据结构,通过BiMap我们可以通过键值获取value值,是对Map的逆向设计,本篇继续进行Guava Collections库的学习,学习一种Guava新定义的数据结构:Table,主要是用来解决 Map<R,Map<C,V>>这种复杂集合的遍历及value的获取。

 

    Table类似于关系型数据库的表结构或二维表格:有行和列,行和列唯一确定一个记录值。Table是Guava定义的一个接口,是一种由一对键值唯一确 定一个value值的数据结构,行值RowKey,列值ColumnKey和value值。翻开源码,我们看到Table内部维护了一个Cell接 口,Cell接口是用于快速获取rowKey和columnKey和value的入口,类似于Map中的Map.Entry。接下来,我们简单的说明一下 接口中各个方法的作用,如下:

 

contains(@Nullable Object rowKey, @Nullable Object columnKey):判断Table中是否存在指定行列值的映射关系

containsRow(@Nullable Object rowKey):判断Table中是否存在行值

containsColumn(@Nullable Object columnKey):判断Table中是否存在列值

containsValue(@Nullable Object value):判断Table中是否包含指定的value值

 

clear():删除Table中所有的行列映射关系

get(@Nullable Object rowKey, @Nullable Object columnKey):根据行值和列值获取value值

put(R rowKey, C columnKey, V value):在指定row和column处放入value值

remove(@Nullable Object rowKey, @Nullable Object columnKey):删除指定行列的value值

 

row(R rowKey):返回指定rowKey下的所有columnKey与value映射

column(C columnKey):返回指定columnKey下的所有rowKey与value映射

cellSet():返回以Table.Cell<R, C, V>为元素的Set集合,类似于Map.entrySet

rowKeySet():返回所有的rowKey

columnKeySet():返回所有的columnKey

values():返回各行各列中所有的value值

 

rowMap():返回以rowkey为外层map键值的Map<R,Map<C,V>>

columnMap():返回已columnKey为外层map键值的Map<R,Map<C,V>>

 

    与Map接口的重要实现HashMap一样,Table接口也有的一种重要实现HashBasedTable,翻开源码,内部提供了create()静态工厂方法的实现和一些重要的方法,如下:

create():返回一个空的HashBasedTable

create( int expectedRows, int expectedCellsPerRow):构造具有期望行列值的Table映射关系的HashBasedTable

create( Table<? extends R, ? extends C, ? extends V> table):构造与指定Table有相同行列映射关系的HashBasedTable

 

contains( @Nullable Object rowKey, @Nullable Object columnKey):Table中是否存在指定rowKey和columnKey的映射关系

containsColumn(@Nullable Object columnKey):Table中是否包含指定的columnkey

containsRow(@Nullable Object rowKey):Table中是否包含指定的rowKey

containsValue(@Nullable Object value):Table中是否包含指定的value

 

get(@Nullable Object rowKey, @Nullable Object columnKey):获取Table中指定行列值的映射关系

remove( @Nullable Object rowKey, @Nullable Object columnKey):删除Table中指定行列值的映射关系

 

    最后,我们简单的通过一段代码来学习一下Table提供的APIs,代码如下:

package guava;
 
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Table;
import org.junit.Test;
 
import java.util.Map;
import java.util.Set;
 
/**
 * Table:Map<R,Map<C,V>>数据结构
 * User: Realfighter
 * Date: 2014/10/14
 * Time: 22:07
 */
public class TableTest {
 
    @Test
    public void testTable() {
        //create():返回一个空的HashBasedTable
        Table<String, Integer, Integer> table = HashBasedTable.create();
        /**
         * put(R rowKey, C columnKey, V value):
         * 在指定row和column处放入value值
         */
        table.put("A", 1, 100);
        table.put("A", 2, 101);
        table.put("B", 1, 200);
        table.put("B", 2, 201);
        /**
         *  contains(Object rowKey, Object columnKey):
         *  Table中是否存在指定rowKey和columnKey的映射关系
         */
        boolean containsA3 = table.contains("A", 3); //false
        boolean containColumn2 = table.containsColumn(2); //true
        boolean containsRowA = table.containsRow("A"); //true
        boolean contains201 = table.containsValue(201); //true
        /**
         * remove(Object rowKey,Object columnKey):
         * 删除Table中指定行列值的映射关系
         */
        table.remove("A", 2);
        /**
         * get(Object rowKey, Object columnKey):
         * 获取Table中指定行列值的映射关系
         */
        table.get("B", 2);
        /**
         * column(C columnKey):返回指定columnKey下的所有rowKey与value映射
         */
        Map<String, Integer> columnMap = table.column(2);
        /**
         * row(R rowKey):返回指定rowKey下的所有columnKey与value映射
         */
        Map<Integer, Integer> rowMap = table.row("B");
        /**
         * 返回以Table.Cell<R, C, V>为元素的Set集合
         * 类似于Map.entrySet
         */
        Set<Table.Cell<String, Integer, Integer>> cells = table.cellSet();
        for (Table.Cell<String, Integer, Integer> cell : cells) {
            //获取cell的行值rowKey
            cell.getRowKey();
            //获取cell的列值columnKey
            cell.getColumnKey();
            //获取cell的值value
            cell.getValue();
        }
    }
}


转载于:https://my.oschina.net/realfighter/blog/349909

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值