开发可正确序列化和反序列化的guava table组件

首先,什么是Table,可以理解为前端使用的html table组件,它具有行头,列头,以及具体的数据.即描述有多少行,多少列,在行为X,列为Y的二维格子中所对应的值是多少.

在使用google guava组件同时,也在讨论其组件的一些局限性,比如它的不变性,对序列化支持的不友好等.
其中table就是一个例子,作为一个表格组件的后端对应数据结构,其自带的table实现完全不能满足实际的需要.其大部分实现都是不可变的,即意味着必须要使用类似builder的模式来进行创建,一旦创建好之后,就不能再次修改.那么,作为一个实际可用的table实现,它需要哪些特性呢.以下例出我们所需要的要求:

1. 查找 按行,按列,快速定位
2. 快速迭代,按行,按列,支持稀疏迭代
3. 泛型支持(通用化)
4. 支持排序
5. 行,列动态增长,削减
6. 反序列化支持(json)

也就是说,我们期望像使用java的集合一样,创建出相应的数据之后,一直都是可变的,并且可以随意地进行传递,然后再任意地进行处理.无论按行,按列,都能够很好地使用.
本篇即描述了如何实现这样一个table组件,以及它最终的效果.

已实现的github地址:https://github.com/flym/array-tree-table

继续阅读“开发可正确序列化和反序列化的guava table组件”

如何使用git从主仓库(main)更新数据到分支(fork)中-转

本文转自 http://my.oschina.net/luffyke/blog/70336 原文为 Github update fork 作者:kxt

Github上经典的fork+pull request模式可以很容易的让你参加到github上的开源项目,但是,如果主项目有更新,这个时候怎么把主项目的更新合并到自己Fork的版本中呢?到目前为止,github没提供一个按钮来完成这个功能。
下面我以druid(https://github.com/AlibabaTech/druid)来做一个git update fork的示范。
首先先fork druid到自己的github中。

克隆到自己本地的计算机。(read only)
用git clone git@github.com:luffyke/druid.git for write and read access

继续阅读“如何使用git从主仓库(main)更新数据到分支(fork)中-转”