public HeaderTable copy() {
   HeaderTable headerTable = new HeaderTable(windowSize);
   Map<String, Integer> ids = getUniqueIds();
   Iterator iterator = ids.entrySet().iterator();
   while (iterator.hasNext()) {
     Map.Entry pair = (Map.Entry) iterator.next();
     String id = (String) pair.getKey();
     int totalNode = (Integer) pair.getValue();
     headerTable.addNewTableItem(id, totalNode);
   }
   return headerTable;
 }
 public HeaderTable copy(UNode uNode) {
   HeaderTable newTable = new HeaderTable(windowSize);
   List<UNode> distinctNodes = uNode.getDistinctNodes();
   for (HeaderTableItem item : this.headerTableItems) {
     HeaderTableItem newTableItem = newTable.addNewTableItem(item.getItemId());
     newTableItem.addProbabilityAndPrefixValue(
         item.getTotalProbability(), item.getTotalPrefixValue());
   }
   for (UNode node : distinctNodes) {
     newTable.updateHeaderTable(node, 0, 0);
   }
   return newTable;
 }