Erro Collection - Metodo add de HashSet[RESOLVIDO]

Estou com um problema bem chato,

tenho uma lista de objetos que ao invés de adicionar elementos está sobrescrevendo.

Primeiramente usei uma List e depois um Set.

[code]for(XmlItemNota itNota : listaItNota){

		        		c170nfeAux.setArquivoXML(		arquivos[i].getAbsolutePath());
		        		c170nfeAux.setC100_f04_COD_PART(	xmlNota.getC100_f04_COD_PART());
		        		c170nfeAux.setC100_f05_COD_MOD(		xmlNota.getC100_f05_COD_MOD());
		        		c170nfeAux.setC100_f07_SER(		xmlNota.getC100_f07_SER());
		        		c170nfeAux.setC100_f08_NUM_DOC(		xmlNota.getC100_f08_NUM_DOC());
		        		c170nfeAux.setF01_REG(			"C170NFe");
		        		c170nfeAux.setF02_NUM_ITEM(		itNota.getF02_NUM_ITEM());
		        		c170nfeAux.setF03_COD_ITEM(		itNota.getF03_COD_ITEM());
		        		c170nfeAux.setF04_DESCR_COMPL(		itNota.getF04_DESCR_COMPL());
		        		c170nfeAux.setF05_QTD(			itNota.getF05_QTD());
		        		c170nfeAux.setF06_UNID(			itNota.getF06_UNID());
		        		c170nfeAux.setF07_VL_ITEM(		itNota.getF07_VL_ITEM());
		        		c170nfeAux.setF08_VL_DESC(		itNota.getF08_VL_DESC());
		        		c170nfeAux.setF09_IND_MOV(		itNota.getF09_IND_MOV());
		        		c170nfeAux.setF10_CST_ICMS(		itNota.getF10_CST_ICMS());
		        		c170nfeAux.setF11_CFOP(			itNota.getF11_CFOP());
		        		c170nfeAux.setF12_COD_NAT(		itNota.getF12_COD_NAT());
		        		c170nfeAux.setF13_VL_BC_ICMS(		itNota.getF13_VL_BC_ICMS());
		        		c170nfeAux.setF14_ALIQ_ICMS(		itNota.getF14_ALIQ_ICMS());
		        		c170nfeAux.setF15_VL_ICMS(		itNota.getF15_VL_ICMS());
		        		c170nfeAux.setF16_VL_BC_ICMS_ST(	itNota.getF16_VL_BC_ICMS_ST());
		        		c170nfeAux.setF17_ALIQ_ST(		itNota.getF17_ALIQ_ST());
		        		c170nfeAux.setF18_VL_ICMS_ST(		itNota.getF18_VL_ICMS_ST());
		        		c170nfeAux.setF19_IND_APUR(		itNota.getF19_IND_APUR());
		        		c170nfeAux.setF20_CST_IPI(		itNota.getF20_CST_IPI());
		        		c170nfeAux.setF21_COD_ENQ(		itNota.getF21_COD_ENQ());
		        		c170nfeAux.setF22_VL_BC_IPI(		itNota.getF22_VL_BC_IPI());
		        		c170nfeAux.setF23_ALIQ_IPI(		itNota.getF23_ALIQ_IPI());
		        		c170nfeAux.setF24_VL_IPI(		itNota.getF24_VL_IPI());
		        		c170nfeAux.setF25_CST_PIS(		itNota.getF25_CST_PIS());
		        		c170nfeAux.setF26_VL_BC_PIS(		itNota.getF26_VL_BC_PIS());
		        		c170nfeAux.setF27_ALIQ_PIS(		itNota.getF27_ALIQ_PIS());
		        		c170nfeAux.setF28_QUANT_BC_PIS(		itNota.getF28_QUANT_BC_PIS());
		        		c170nfeAux.setF29_ALIQ_PIS(		itNota.getF29_ALIQ_PIS());
		        		c170nfeAux.setF30_VL_PIS(		itNota.getF30_VL_PIS());
		        		c170nfeAux.setF31_CST_COFINS(		itNota.getF31_CST_COFINS());
		        		c170nfeAux.setF32_VL_BC_COFINS(		itNota.getF32_VL_BC_COFINS());
		        		c170nfeAux.setF33_ALIQ_COFINS(		itNota.getF33_ALIQ_COFINS());
		        		c170nfeAux.setF34_QUANT_BC_COFINS(	itNota.getF34_QUANT_BC_COFINS() );
		        		c170nfeAux.setF35_ALIQ_COFINS(		itNota.getF35_ALIQ_COFINS());
		        		c170nfeAux.setF36_VL_COFINS(		itNota.getF36_VL_COFINS());
		        		c170nfeAux.setF37_COD_CTA(		itNota.getF37_COD_CTA());
		        		c170nfeAux.setF38_DT_EMIS(		itNota.getF38_DT_EMIS());
		        		
		        		listaC170NFe.add(c170nfeAux);
		        	}[/code]

A listaItNota possui três elementos distintos no campo numero do item, respectivamente 1, 2 e 3

Após adicionar os objetos a listaC170NFe e percorrer a mesma usando a interface List via depurador do NetBeans, pude observar que:

No primeiro laço foi adicionado o primeiro objeto corretamente.

[list]obj1.num_item = 1[/list]

No segundo Laço foi adicionado o objeto 2 e o objeto 1 foi sobrescrito pelo objeto 2.

[list]obj1.num_item = 2[/list]
[list]obj2.num_item = 2[/list]

No terceiro laço foi adicionado o objeto 3 e os objetos 1 e 2 foram sobrescritos pelo 3.

[list]obj1.num_item = 3[/list]
[list]obj2.num_item = 3[/list]
[list]obj3.num_item = 3[/list]

Repeti o mesmo procedimento utilizando a interface Set e a implementação HashSet, e observei que;

No primeiro laço foi adicionado o primeiro objeto corretamente.

[list]obj1.num_item = 1[/list]

No segundo Laço foi adicionado o objeto 2 sobrescrevendo a primeira entrada. Continua com apenas um elemento.

[list]obj2.num_item = 2[/list]

No terceiro Laço foi adicionado o objeto 3 sobrescrevendo a segunda entrada. Continua com apenas um elemento.

[list]obj3.num_item = 3[/list]

Achei a solução,

Eu esta instanciando o objeto c170nfeAux fora do for, estão esta utilizando apenas um objeto na memória e apenas trocando os seus valores de atributos.

Isto acontece porque a Collections pega o método Equals dos objetos para verificar se são diferentes, e não os seus valores de atributo. Isso fez com que sua comparação sempre fosse true pois se tratava do mesmo objeto.

Quando passei a intanciar os objeto dentro do laço, passei a criar um objeto diferente na memória para cada laço e fazer com as listas adicionassem os lementos corretamente.