/**
   * 生成此序列的所有子序列
   *
   * @return
   */
  public ArrayList<Sequence> createChildSeqs() {
    ArrayList<Sequence> childSeqs = new ArrayList<>();
    ArrayList<Integer> tempItems;
    Sequence tempSeq = null;
    ItemSet tempItemSet;

    for (int i = 0; i < this.itemSetList.size(); i++) {
      tempItemSet = itemSetList.get(i);
      if (tempItemSet.getItems().size() == 1) {
        tempSeq = this.copySeqence();

        // 如果只有项集中只有1个元素,则直接移除
        tempSeq.itemSetList.remove(i);
        childSeqs.add(tempSeq);
      } else {
        tempItems = tempItemSet.getItems();
        for (int j = 0; j < tempItems.size(); j++) {
          tempSeq = this.copySeqence();

          // 在拷贝的序列中移除一个数字
          tempSeq.getItemSetList().get(i).getItems().remove(j);
          childSeqs.add(tempSeq);
        }
      }
    }

    return childSeqs;
  }
  /** 拷贝一份一模一样的序列 */
  public Sequence copySeqence() {
    Sequence copySeq = new Sequence();
    for (ItemSet itemSet : this.itemSetList) {
      copySeq.getItemSetList().add(new ItemSet(itemSet.copyItems()));
    }

    return copySeq;
  }
  /**
   * 比较2个序列是否相等,需要判断内部的每个项集是否完全一致
   *
   * @param seq 比较的序列对象
   * @return
   */
  public boolean compareIsSame(Sequence seq) {
    boolean result = true;
    ArrayList<ItemSet> itemSetList2 = seq.getItemSetList();
    ItemSet tempItemSet1;
    ItemSet tempItemSet2;

    if (itemSetList2.size() != this.itemSetList.size()) {
      return false;
    }
    for (int i = 0; i < itemSetList2.size(); i++) {
      tempItemSet1 = this.itemSetList.get(i);
      tempItemSet2 = itemSetList2.get(i);

      if (!tempItemSet1.compareIsSame(tempItemSet2)) {
        // 只要不相等,直接退出函数
        result = false;
        break;
      }
    }

    return result;
  }
 @Override
 public int compareTo(Sequence o) {
   // TODO Auto-generated method stub
   return this.getFirstItemSetNum().compareTo(o.getFirstItemSetNum());
 }