ResultSet estranha

e vai mais um probleminha básico agora de java:

public static Vector getEstados() throws SQLException
	{
		Connection conn = ConexaoDB.getConnection();
		Statement stm = conn.createStatement();
		ResultSet rs;
		Vector vEstados = new Vector();
		Estado estados = new Estado();
		
		try
		{

			rs = stm.executeQuery("select * from Estado");

			int colCount = rs.getMetaData().getColumnCount();

			
			while (rs.next())
			{
			    System.out.println("codigo do estado");
			    System.out.println(rs.getString(1));
				estados.setIdEstado(rs.getString(1));
				System.out.println("nome do estado");
				System.out.println(rs.getString(2));
				estados.setNomeEstado(rs.getString(2));
				
				vEstados.addElement(estados);
			}

			rs.close();
			stm.close();

		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		
		for(int i = 0; i<vEstados.size(); i++)
		{
		    estados = (Estado) vEstados.elementAt(i);
		    System.out.println("Esse estado : " + i + " eh o : " + estados.getNomeEstado());
		}
		
		return vEstados;
	}

esse é um método que iria carregar o vetor com os estados…
mas não sei pq ele tá carregando o vetor com o ultimo estado…
entao vem todos os registros no vetor com um unico valor
alguém sabe pq?

coloque

estados = new Estado();

dentro do loop. caso contrário você está adicionando a mesma referência (objeto) no vetor. e mais uma vez hoje, prefira usar ArrayList.

confere ?