zoukankan      html  css  js  c++  java
  • Guava包学习--Table

    Table,顾名思义,就好像HTML中的Table元素一样,其实就是行+列去确定的值,更准确的比喻其实就是一个二维矩阵。

    其实它就是通过行+列两个key去找到一个value,然后它又containsvalue、containsrow、containscolumn等方法来判断是否包含。

    同事put方法也是3个参数;另外你可以通过row()或者column方法得到一列或者一行的一个map《k,v》值。

    我感觉这个集合非常有想法,你在处理类似Dom中的二维数组中的值都可以在程序中用这个进行模拟。

    具体的方法都非常简单,就不再写例子了。看下它的Hash实现类:

    还是那一套,弄个接口,弄个抽象类实现接口,然后后面的具体实现去继承抽象类~~~bulabula

    我们看看方法的具体实现,create:

      public static <R, C, V> HashBasedTable<R, C, V> create(
          int expectedRows, int expectedCellsPerRow) {
        checkNonnegative(expectedCellsPerRow, "expectedCellsPerRow");
        Map<R, Map<C, V>> backingMap = Maps.newHashMapWithExpectedSize(expectedRows);
        return new HashBasedTable<R, C, V>(backingMap, new Factory<C, V>(expectedCellsPerRow));
      }

    我们看一眼那个标准Table的实现就不难理解Table的结构了:

      StandardTable(Map<R, Map<C, V>> backingMap, Supplier<? extends Map<C, V>> factory) {
        this.backingMap = backingMap;
        this.factory = factory;
      }

    public boolean containsValue(@Nullable Object value) {
    for (Map<C, V> row : rowMap().values()) {
    if (row.containsValue(value)) {
    return true;
    }
    }
    return false;
    }

    其实就是分开去循环了一下内容。

    其实去看一下它的remove和get方法,中间都是先用R也就是行去获得了列的map,然后再用列的map去做具体处理。

    虽然这个结果使用两个map也可以直接实现,但是人家能直接设计出来并且覆盖百分百用例然后封装好拿出来共享就真的不同了。

  • 相关阅读:
    关于enum ,调用webservice,用户控件与主页面之间的交互,datsource属性,net面试题,反射类生成sql语句,URl重写一个小实例
    一个很简单的图片上传后立即显示在页面的控件(c#)
    委托之实现异步调用
    跟我学Linq
    w3c关于sql sever的基础操作
    join操作基础
    表操作基础
    javascript理论篇(详情见地址)
    android universal-image-loader的使用
    json相关类库,java对象与json相互转换
  • 原文地址:https://www.cnblogs.com/congsg2016/p/5122890.html
Copyright © 2011-2022 走看看