[resolvido] ArrayList dentro de HashMap... pode?

Olá! Estou fazendo uma aplicação super simples e acabei com esse problema. Gostaria de colocar um conjunto de Strings dentro de um HashMap. A idéia é associar os filmes locados ao identificador do cliente.

Os códigos:

public class Aluguel {
 
	private Date dataDevolucao;
	private int idLocacao;
	
	private HashMap<Cliente, Aluguel> locacoesFeitas;

.....
public class ControladoraLocacao {
	
	Aluguel aluguel;

	public void realizarLocacao(int numeroCartaoAVS, ArrayList<Video> filmes){
		
		aluguel.getLocacoesFeitas().put(numeroCartaoAVS, filmes);
	}
}

O método realizarLocacao recebe o identificador do cliente e a lista dos filmes que ele vai locar… Mas a classe Aluguel registra todos as locações que já foram feitas. Daí o que eu pensei foi nesse modo de implementar. É possível colocar o ArrayList dentro do HashMap? Ou alguém sugere uma implementação melhor?

Obrigada!

É claro que pode.

O map aceita como value qualquer Object, tendo em vista que uma Lista é um Object, ele aceita perfeitamente.
Podes colocar até mesmo outro Map se quiser :slight_smile:

Resumidamente, qualquer objeto.

Ahhhh! Obrigada! Eu estava com problemas porque tinha que declarar o seguinte:

public class Aluguel {
 
	private Date dataDevolucao;
	private int idLocacao;
	
	private HashMap<Integer, ArrayList<Video>> locacoesFeitas;

E eu não tinha colocado o tipo ArrayList na declaração do HashMap!

Agora deu certo! =)

o java permite fazer map de qquer coisa:

private  Map&lt;Cliente, Collection&gt;&lt;Video&gt;&gt; locacoes;

public void realizarLocacao(Cliente cliente, Collection&lt;Video&gt; filmes){  
    Collection&lt;Video&gt; filmesAtuais = locacoes.get(cliente);  
    if (filmesAtuais != null) {
        filmesAtuais.addAll(filmes);
    } else {
        locacoes.put(cliente, filmes);
    }
}
...

Ah, obrigada! Vou adicionar a validação! =)

Isso e complementando o que o colega disse, busque programar orientado a interfaces, você ia usando um ArrayList como objeto do value.
E se tu quisesse usar uma Linkedlist, como ficaria? Teria de ir e alterar seu Map ou criar um novo.
Por isso o ideal é usar uma interface, como a Collections ou a List, para o seu caso, é claro.

Mas no caso eu teria que declarar como Collection ou List para armazenar os valores? E no caso de eu precisar associar no caso um identificador a um elemento? No caso do HashMap isso é possível, é? E nos outros casos?

Vai da sua decisão, particularmente, uso a list por prover mais métodos.
Quais seriam os outros casos ? Pois do modo como demonstrou está associando o identificador a possiveis valores já.

Na verdade eu entendi… usando Collection eu posso criar qualquer outro tipo, né?

Assim:

public class Locadora{
private Collection<Video> video;

....
public Locadora(String nome, String endereco) {
		this.nome = nome;
		this.endereco = endereco;
		video = new ArrayList<Video>();
	}

Era isso? XD