class ImmutableAppendedList implements List<T> {

    @Override
    public int hashCode() {
        if (hc == 0) {
            int hashCode = 1;
            for (T element : this) {
                hashCode = 31 * hashCode + (element == null ? 0 : element.hashCode());
            }
            hc = hashCode;
        }
        return hc;
    }

    public  ImmutableAppendedList( List<T> parent,
                                  T element );

}