ArrayList Rimuovi e aggiungi dinamici per il client socker [chiuso]

-5

Ho un ArrayList in Java e un save the socket e un ID univoco.

Quando qualcuno client viene aggiunto in ArrayList, unique id ho NON è lo stesso con posizione in ArrayList.

Quando qualcuno client è andato rimuovo il client da ArrayList put i need to find the unique id .

Il mio problema: è quando voglio inviare informazioni al client perché la posizione ArrayList non è la stessa con ID univoco.

Una soluzione: è quando voglio inviare qualcosa che creo un for nell'array per controllare se l'id univoco è lo stesso e poi inviare le informazioni nella posizione in ArrayList.

Can è fare qualcosa di meglio e più veloce al riguardo, o mi sono bloccato nella soluzione for

Grazie: P

Edit for add code

Increase one the uniqueId,connect first time the client

ClientThread(Socket socket) {
        //For every client is connect uniqueId add one more
        serverUniqueID = Server.uniqueId++; 

Remove client from the server

public static void remove(int id) {

    for (int i = 0; i < clientThreadArrayList.size(); i++) {
        ClientThread ct = clientThreadArrayList.get(i);

        if (ct.serverUniqueID == id) {
            clientThreadArrayList.remove(i);
            onlineUser--;

            return;
        }
    }
}

Send the message into the 2 client

for(int i=0; i<Server.clientThreadArrayList.size(); i++){
    //check if is the same idUniqueServer and the idUsers
    int serverId = Server.clientThreadArrayList.get(i).serverUniqueID;

    if(idUsers[0]==serverId || idUsers[1]==serverId ){
                     ......

    }
}

Spiacente mi dimentico di dirti da un client che voglio inviare il messaggio ad un altro client

Siamo spiacenti

    
posta cdemet 29.06.2016 - 12:27
fonte

2 risposte

2

Usa una mappa

Map<Integer, ClientThread> threads = new HashMap<>();

Aggiungi thread per mappare

ClientThread thread = new ClientThread(socket);
threads.put(thread.serverUniqueId, thread);

Rimuovi una discussione

threads.remove(id);

Ottieni un thread per id

theads.get(id);

Ottieni thread per più ID

int[] ids = {1,2,3,4};
for (Map.Entry<Integer, ClientThread> entry : threads.entrySet()) {
    // Java 8+
    if (IntStream.of(ids).anyMatch(id -> id == entry.getKey().intValue()) {
        ClientThread thread = entry.getValue();
        // Do stuff, i.e. send message
    }
}
    
risposta data 29.06.2016 - 21:45
fonte
0

Se vuoi trovare qualcosa in un array non ordinato, iterarlo è la cosa più veloce che puoi fare. È necessario memorizzare gli zoccoli in una HashMap. Puoi inserire l'id e ottenere il socket corrispondente in tempo costante.

    
risposta data 29.06.2016 - 21:14
fonte

Leggi altre domande sui tag