/**
   * Rehashes the concatenation of the results of all single hashcodes.
   *
   * @see EquivalenceComparator#equivalenceHashcode(Object, Object)
   */
  public int equivalenceHashcode(E arg1, C context) {
    StringBuffer hashStringBuffer = new StringBuffer();
    for (ListIterator<EquivalenceComparator<? super E, ? super C>> iter = this.chain.listIterator();
        iter.hasNext(); ) {
      EquivalenceComparator<? super E, ? super C> currentComparator = iter.next();
      int currentHashCode = currentComparator.equivalenceHashcode(arg1, context);
      hashStringBuffer.append(currentHashCode);

      // add a delimeter only if needed for next
      if (iter.hasNext()) {
        hashStringBuffer.append('+');
      }
    }
    return hashStringBuffer.toString().hashCode();
  }