
public class Escozor {
	private int intensidad;
	private String sensacion;
	private int duracion;

	public Escozor(int intensidad, String sensacion, int duracion) {
		super();
		this.intensidad = intensidad;
		this.sensacion = sensacion;
		this.duracion = duracion;
	}

	/*
	 * Java te permite la sobreescritura del metodo equals pero para hacerlo debes
	 * cumplir un contrato que establece las reglas de como hay que hacerlo. Si lo
	 * respetas todo el cliente que use tu software podra llamar tu metodo equals
	 * sin sorpresas
	 */
	@Override
	public boolean equals(Object obj) {
		boolean retorno = false;
		// Primera ley no es null
		if (obj != null) {
			// son iguales si son le mismo
			retorno = super.equals(obj);
			if (!retorno) {
				// Son de tipo compatible
				if (obj instanceof Escozor) {
					// El contenido es igual
					// vamos a suponer que dos cuentas son iguales si tiene el mismo identificador
					Escozor instancia = (Escozor) obj;
					retorno = intensidad == instancia.getIntensidad() && duracion == instancia.getDuracion()
							&& sensacion.equals(instancia.getSensacion());
				}
			}
		}
		return retorno;
	}

	/*
	 * Según java no puedes sobreescribir equals y dejar hashcode igual El contrato
	 * te obliga a cambiar hashcode si cambias equals porque si son iguales por
	 * equals son iguales por hashcode pero no al reves es decir si son iguales por
	 * hashcode no tienen porque ser iguales segun equals
	 */
	@Override
	public int hashCode() {
		// para cumplir con lo anterior estamos obligados a crear un valor hash que
		// dependa de los
		// atributos que usamos para comparar
		// 1º usa un valor primo para la constante hash
		int hash = 13;
		// 2º genera la clave hash usando el valor anterior y algún factor numérico de
		// los campos
		// que tratamos podemos complicarlo un poco tanto como queramos dentro de las
		// leyes
		//El peso depende de los valores maximos y minimos de su valor
		//Si el peso del primer elemento es X
		//El peso del segundo elemento debe ser x+maximo del primer elemento
		int pesoIntensidad = 97;
		int pesoDuracion = 178;
		return hash*pesoIntensidad*this.intensidad+this.sensacion.hashCode()+pesoDuracion*this.duracion;
	}

	public int getIntensidad() {
		return intensidad;
	}

	public void setIntensidad(int intensidad) {
		this.intensidad = intensidad;
	}

	public String getSensacion() {
		return sensacion;
	}

	public void setSensacion(String sensacion) {
		this.sensacion = sensacion;
	}

	public int getDuracion() {
		return duracion;
	}

	public void setDuracion(int duracion) {
		this.duracion = duracion;
	}

}
