Duvida em relação a hashmap e arraylist

Olá,

Estou desenvolvendo um servidor de chat como trabalho escolar e estou guardando (na verdade tentando) cada cliente em um arraylist e no hashmap eu coloco como chave para aquele cliente o ID dele.
Exemplos do que eu fiz:

public Map<Integer,Client> clientsmap = new HashMap(); public ArrayList<Client> clients = new ArrayList<Client>();

Método para guardar os clientes:

public void addClient(Socket socket) throws IOException{ int MinIndex=utils.ClientMinIndex(); int lastindex=clients.size(); clients.add(new Client(socket,MinIndex)); clientsmap.put(MinIndex, clients.get(lastindex)); new Thread(utils.getClient(MinIndex)).start(); }

Até aí beleza, o problema é quando eu tento acessar o cliente através do hashmap da null pointer exception. Estou fazendo algo errado? Existe alguma forma mais simples de fazer o mesmo?

Obrigado.

A forma de inserir no mapa está certa.
Mas é difícil saber se você está usando o índice certo ou não na hora de ler isso do mapa.

Esse código faz chamada a funções como Utils.ClienteMinIndex() que não tenho idéia do que fazem.

Se eu fosse fazer um método assim, seria algo muito mais simples como:

    public synchronized void addClient(Socket socket) throws IOException{
        int clientId = ++lastId;
        Client client = new Client(socket, clientId);
        clients.add(client);
        clientsmap.put(clientId, client);
        new Thread(client).start();
    }

Embora possivelmente eu faria a classe Client controlar a Thread, ao invés de dispara-la externamente.
E também não teria 2 estruturas. Para que ter o ArrayList se você já tem o Map?