Duvidas Array List / LinkedList

olá amigos, por favor, em um exercício com implemtação de Collections que estou fazendo, criei um ArrayList e LinkedList, de por exemplo, clientes, com apenas nome e endereços ( já que pode haver mais de um endereço ), fiz toda a implementação da LinkedList, do ArrayList, removi, adicionei clientes etc. em outra parte do codigo que ja estava pronta, tem uma classe contatos, e uma enum para contatos, tipo, vizinho, avo, tia, mãe etc. bom, o que não consegui fazer e entender, foi: da maneira que fiz, imprimir a lista Array e Linked, consegui imprimir o endereco de memoria , e também não entendi, por exemplo, em que parte do código iria utilizar a enum. aqui mesmo tem um artigo do Vinny sobre isso, mas não consegui assimilar onde estou errando. posto abaixo meu codigo:

classe cliente

import java.util.Collection;
import java.util.Set;
import java.util.ArrayList;
import java.util.List;

public class Cliente {
	
	private String nome ;
	
	private List enderecos;     // se criar um Array list neste caso , vai manter uma colecao
								// mas esta limitando p/ trabalhar somente com array list.
								// sempre manter o mais basico List
	
	private Set contatos;

	public Cliente(String nome, List enderecos) {
		super();
		this.nome = nome;
		this.enderecos = enderecos;
	}
	
	public Cliente(String nome, List enderecos, Set contatos) {
		super();
		this.nome = nome;
		this.enderecos = enderecos;
		this.contatos = contatos;
	}


	public Cliente() {
		super();
		
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public List getEnderecos() {
		return enderecos;
	}

	public void setEnderecos(List enderecos) {
		this.enderecos = enderecos;
	}
	
	
}

a classe endereco:

public class Endereco {
	
	private String endereco ;
	private String cidade ;
	
	public Endereco(String endereco, String cidade) {
		super();
		this.endereco = endereco;
		this.cidade = cidade;
	}

	public String getEndereco() {
		return endereco;
	}

	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}

	public String getCidade() {
		return cidade;
	}

	public void setCidade(String cidade) {
		this.cidade = cidade;
	}

}

a classe Contato:


import java.util.Set;
           
// enum TipoContato { VIZINHO , TIO, AVO, IRMAO }  pode ser aqui

public class Contato {

	
	enum TipoContato { VIZINHO , TIO, AVO, IRMAO }
	
	private String nome ;
	
	private TipoContato tipo;
	
	private Set contatos ; 
	// interface Set , nao permite itens duplicados
	
	
	public Contato() {
		super();
	}

	public Contato(String nome, TipoContato tipo) {
		super();
		this.nome = nome;
		this.tipo = tipo;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public TipoContato getTipo() {
		return tipo;
	}

	public void setTipo(TipoContato tipo) {
		this.tipo = tipo;
	}
	
}

e por último a classe TestaCliente :


import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class TesteCliente {
	
	public static void main(String[] args) {
		
		
		LinkedList enderecos = new LinkedList();
		
		enderecos.addLast(new Endereco("end1", "cidade1"));
		enderecos.addFirst( new Endereco("end2","cidade2"));
		enderecos.add( new Endereco("end3","cidade3"));
		
		ArrayList enderecos2 = new ArrayList();
		
		enderecos2.add(new Endereco("end4", "cidade4"));
		enderecos2.add( new Endereco("end5","cidade5"));
		enderecos2.add(new Endereco("end6","cidade6"));
		

		Cliente cliente = new Cliente("Joana Joana", enderecos);
		Cliente manuel = new Cliente("Silva da silva", enderecos);	
		
		
		ArrayList clientesArray = new ArrayList();
		
		clientesArray.add("Joao da Silva2");
		clientesArray.add("Joana da Silva2");
		
		LinkedList clientesLink = new LinkedList();
		
		clientesLink.add("Joana da silva3");
		clientesLink.add("Joana da silva4");
		clientesLink.remove("Joana da silv3");
		
		
		for (Object object : cliente.getEnderecos()) {
	
			System.out.println(object.toString());
		}
		
		for (Object object : manuel.getEnderecos()) {

			System.out.println(object.toString());
		}
	}
}

Bem, eu normalmente crio o enum como public em separado, algo assim:

public enum TipoContato{

               VIZINHO , TIO, AVO, IRMAO;

 

    public String toString(){
        switch (this){
            case VIZINHO: return "vizinho";
            case TIO: return "tio";
            case AVO: return "avo";
            default: return "irmao";
        }
    }
}

E daí posso usar esse enum em qualquer classe que quiser como a sua de Contatos e de teste.

E o método toString do enum me permite imprimir esse atributo a partir do valor acumulado.

Assim quando for criar um novo Contato pode simplesmente passar assim:

Contato cn = new Contato("nome do fulano", TipoContato.AVO);

  1. Você não imprimiu nenhum endereço de memória. Você imprimiu o hashCode de diversos objetos. Essa é a implementação padrão do método toString() da classe Object;
  2. Você está chamando toString() nos objetos da lista, sem ter implementado o método toString(). Adicione o método na sua classe, por exemplo, o do cliente poderia ser assim:

@Override public String toString() { return nome; }

deu certo Viny…Novamente obrigado a vc e acomunidade GUJ !!!