文档章节

Guava新集合-Table

Kevin-air
 Kevin-air
发布于 2016/08/05 13:53
字数 521
阅读 22
收藏 0

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

示例

import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Table;
import org.junit.Test;
import java.util.Map;

/**
 * @author Kevin
 * @description
 * @date 2016/8/5
 */
public class TableTest {

    @Test
    public void TableTest() {
        // Map<String,Map<Integer,String>> map;
        // 第一个String为rowKey
        // Integer为columnKey
        // 第二个String为value
        Table<String, Integer, String> aTable = HashBasedTable.create();

        for (char a = 'A'; a <= 'C'; ++a) {
            for (Integer b = 1; b <= 3; ++b) {
                aTable.put(Character.toString(a), b, String.format("%c%d", a, b));
            }
        }
        // init table data
        // {
        //  A={1=A1,2=A2,3=A3},
        //  B={1=B1,2=B2,3=B3},
        //  C={1=C1,2=C2,3=C3}
        // }

        // {A=A2, B=B2, C=C2}
        System.out.println(aTable.column(2));
        // {1=B1, 2=B2, 3=B3}
        System.out.println(aTable.row("B"));
        // B2
        System.out.println(aTable.get("B", 2));
        // false
        System.out.println(aTable.contains("D", 1));
        // true
        System.out.println(aTable.containsColumn(3));
        // true
        System.out.println(aTable.containsRow("C"));

        // 以column为key返回map
        Map<Integer, Map<String, String>> columnMap = aTable.columnMap();
        // {1={A=A1, B=B1, C=C1}, 2={A=A2, B=B2, C=C2}, 3={A=A3, B=B3, C=C3}}
        System.out.println(columnMap);

        // {A={1=A1, 2=A2, 3=A3}, B={1=B1, 2=B2, 3=B3}, C={1=C1, 2=C2, 3=C3}}
        System.out.println(aTable.rowMap());

        // B3
        System.out.println(aTable.remove("B", 3));
    }
}

 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是一个需要在构建的时候就需要定下行列的表格。这种表格由二维数组实现,这样可以在密集数据的表格的场合,提高时间和空间的效率。

© 著作权归作者所有

共有 人打赏支持
Kevin-air
粉丝 13
博文 73
码字总数 26587
作品 0
深圳
Guava集合-不可变集合

JDK的Collections.unmodifiableXXX方法实现不可变集合的一些问题:   1.它用起来笨拙繁琐你不得不在每个防御性编程拷贝的地方用这个方法   2.它不安全:如果有对象reference原始的被封装...

Kevin-air
2016/08/04
12
0
Guava一些高效类的使用实践

guava是google的一个强大的工具包,目前已经更新到版本22 https://github.com/google/guava,一直有断断续续的用过一些方法,但是没有系统的撸一遍所有功能 今天参考并发编程网记录一些高效的...

zimingforever
2017/06/15
0
0
Guava用法(一)

Guava用法(一) 前置条件检查:checkArgument,checkElementIndex,checkPositionIndexes几个比较有用的方法使用。 ComparisonChain链式比较器,减少了部分if/else的循环 Java,多个键做索引的...

年少爱追梦
2016/12/26
28
0
Google Guava 笔记

一、引言 Guava 是 google 几个java核心类库的集合,包括集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common ...

qllinhongyu
2014/09/18
0
0
【java代码之美】---guava之Immutable(不可变)集合

Immutable(不可变)集合 一、概述 guava是google的一个库,弥补了java语言的很多方面的不足,很多在java8中已有实现,暂时不展开。Collections是jdk提供的一个工具类。 Guava中不可变对象和C...

雨点的名字
08/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

自定义Ubuntu/Windows双系统引导菜单主题

学习Linux自然少不了要装双系统,其中Ubuntu便是我们用的最多的Linux系统。装完双系统后,Ubuntu会自动生成grub开机引导及菜单,及其丑陋,而且很多我们用不到的选项。今天我们就介绍burg:修...

Linux就该这么学
11分钟前
0
0
Go 并发(二)

Go Mutex 通过Mutex和信道处理竞态条件。 临界区 当程序并发运行时,多个协程不应该同时访问那些修改共享资源的代码,这些修改共享资源的代码称为临界区。 Go中通过Mutex可以避免同时访问临界...

春哥大魔王的博客
13分钟前
0
0
CentOS 7安装和部署Docker

Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。通过 uname -r 命令查看你当前的内核版本 uname -r3.10.0-514.el7.x86_64 1、...

狼王黄师傅
17分钟前
0
0
php扩展可以通过pecl 或者phpize 安装

pecl 算是 php 扩展的一个官方聚合平台,一些比较有名,有特点的扩展会被 pecl 收录,收录后可以通过 pecl 的方式安装。但是更多的扩展是没有收录在 pecl 上的,这些扩展还是需要通过 phpize...

bengozhong
18分钟前
0
0
CentOS中如何安装7ZIP

执行以下命令下载安装: wget http://nchc.dl.sourceforge.net/project/p7zip/p7zip/9.20.1/p7zip_9.20.1_src_all.tar.bz2tar -jxvf p7zip_9.20.1_src_all.tar.bz2cd p7zip_9.20.1make......

凯文加内特
23分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部