code: public int build(List<String> _key, int _length[], int _value[],
                       int _keySize)
      {
          if (_key == null || _keySize > _key.size())
              return 0;
  
          // progress_func_ = progress_func;
          key = _key;
          length = _length;
          keySize = _keySize;
          value = _value;
          progress = 0;
          allocSize = 0;
  
          resize(65536 * 32); // 32个双字节
  
          base[0] = 1;
          nextCheckPos = 0;
  
          Node root_node = new Node();
          root_node.left = 0;
          root_node.right = keySize;
          root_node.depth = 0;
  
          List<Node> siblings = new ArrayList<Node>();
          fetch(root_node, siblings);
          insert(siblings, new BitSet());
          shrink();
  
          // size += (1 << 8 * 2) + 1; // ???
          // if (size >= allocSize) resize (size);
  
          key = null;
          length = null;
  
          return error_;
      }
docs: 唯一的构建方法
  
  @param _key     值set，必须字典序
  @param _length  对应每个key的长度，留空动态获取
  @param _value   每个key对应的值，留空使用key的下标作为值
  @param _keySize key的长度，应该设为_key.size
  @return 是否出错