protected String fingerprint(boolean detailed) {
		final StringBuilder sb = new StringBuilder();
		sb.append("@(");
		sb.append(getClass().getSimpleName());
		sb.append("; outerSize:");
		sb.append(size());
		sb.append("; innerSize:");

		// Append inner size
		Object first = null;
		int ctr = 0;

		// Count elements and extract first nonnull element.
		for (T next : this) {
			if (next != null) {
				ctr++;
				if (first == null)
					first = next;
			}
		}

		sb.append(ctr);

		// Append type of first element (disabled)
		if (first != null && detailed) {
			sb.append("; firstElement:");
			sb.append(first.getClass().getSimpleName());
		}

		// Append fingerprint
		if (size() <= 16) {
			sb.append("; fingerprint:");

			for (T next : this) {
				if (next != null) {
					sb.append(next.getClass().getSimpleName().charAt(0));
				} else
					sb.append(".");
			}
		}

		sb.append(")");
		return sb.toString();
	}