Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Differenze tra ArrayList e LinkedList

    Salve. Vorrei sapere qual è la differenza tra queste 2 classi, dato che ho provato a modificare un programma e andava bene con entrambe o_O

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,280

    Re: Differenze tra ArrayList e LinkedList

    Originariamente inviato da Dreamer89
    Salve. Vorrei sapere qual è la differenza tra queste 2 classi, dato che ho provato a modificare un programma e andava bene con entrambe o_O
    Sono entrambe implementazioni "concrete" della interfaccia List. Solo che ArrayList è basata su un array, mentre LinkedList è basata su una lista linkata. Questo porta ad una differenza nella complessità (e quindi nelle "performance") delle varie operazioni. Il get() per ArrayList ha una complessità O(1) mentre per LinkedList è O(n). Con un array se chiedi l'elemento all'indice 10, lo ottieni subito, mentre con una lista linkata deve scansionare tutta la lista fino a quel punto!

    Quindi una collezione non la si sceglie così "a caso" o solo notando che "funzionano" entrambe. Bisogna vedere cosa devi fare e come la devi utilizzare. Ci sono questioni di performance. Se poi non ti interessa nemmeno questo ... beh, ok, scegli quella che vuoi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Quindi un ArrayList è più performante? Perchè allora scegliere una LinkedList? E quali sono le differenze con Vector?

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da Dreamer89
    Quindi un ArrayList è più performante? Perchè allora scegliere una LinkedList?
    Dipende da quello che devi fare...

    Esempio.
    Hai 1000 elementi da mettere in una struttura dati.

    Dopo averli inseriti devo solo leggerli in maniera "random"? ArrayList
    Dopo averli inseriti devo continuare ad aggiungere/togliere elementi? Dipende (se devo togliere un elemento da un array devo poi ricompattare tutto mentre in una lista basta aggiornare un puntatore):
    devo leggere ed inserire sempre in fondo? ArrayList
    devo leggere ed inserire sempre in testa? LinkedList



    Originariamente inviato da Dreamer89
    E quali sono le differenze con Vector?
    Vector mi pare sia simile ad ArrayList però è sincronizzato ed ha un diverso fattore di crescita :master:
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,280
    Originariamente inviato da Dreamer89
    Quindi un ArrayList è più performante? Perchè allora scegliere una LinkedList? E quali sono le differenze con Vector?
    Nessuna delle due è "meglio" dell'altra, ognuna ha le sue caratteristiche e i suoi vantaggi/svantaggi e quindi bisogna vedere esattamente come la devi usare.

    Se devi usare moltissimo l'accesso "casuale" agli elementi (tante get()), allora è meglio ArrayList. Se devi fare tanti inserimenti in testa allora è meglio LinkedList. In una lista linkata, aggiungere in testa è facilissimo (complessità O(1) ), mentre in un array devi spostare tutti gli elementi seguenti ed eventualmente riallocare l'array se la sua "capacity" non basta! Idem per il remove in testa.
    Quindi come vedi nessuna è meglio dell'altra, ognuna delle varie operazioni ha complessità diversa, quindi cosa è meglio usare ... dipende da come la userai!

    Vector concettualmente è esattamente come ArrayList (salvo una leggera differenza nella API) ma è la "vecchia" collezione "legacy" mantenuta per compatibilità. Ed è "synchronized".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Ma cosa intendete per "aggiungere in testa"? Intendete dall'inizio? Perchè io su un libro trovo un esempio in cui una LinkedList viene aggiunta ad un'altra e viene aggiunta alla fine e non all'inizio.

  7. #7
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da Dreamer89
    Ma cosa intendete per "aggiungere in testa"? Intendete dall'inizio?
    Si, all'inizio.

    Originariamente inviato da Dreamer89
    Perchè io su un libro trovo un esempio in cui una LinkedList viene aggiunta ad un'altra e viene aggiunta alla fine e non all'inizio.
    E quindi? In una LinkedList puoi anche aggiungere elementi in coda... anche in mezzo volendo.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  8. #8
    Credo di aver capito... grazie mille a tutti

  9. #9

    Re: Re: Differenze tra ArrayList e LinkedList

    Originariamente inviato da andbin
    Sono entrambe implementazioni "concrete" della interfaccia List. Solo che ArrayList è basata su un array, mentre LinkedList è basata su una lista linkata. Questo porta ad una differenza nella complessità (e quindi nelle "performance") delle varie operazioni. Il get() per ArrayList ha una complessità O(1) mentre per LinkedList è O(n). Con un array se chiedi l'elemento all'indice 10, lo ottieni subito, mentre con una lista linkata deve scansionare tutta la lista fino a quel punto!

    Quindi una collezione non la si sceglie così "a caso" o solo notando che "funzionano" entrambe. Bisogna vedere cosa devi fare e come la devi utilizzare. Ci sono questioni di performance. Se poi non ti interessa nemmeno questo ... beh, ok, scegli quella che vuoi.
    Scusa una curiosità. Se faccio:

    codice:
    private static int _somma3Aux(List<Integer> lista) {
    int somma = 0;
    for (int i = 0; i < lista.size(); i++) {
    somma += lista.get(i);
    }
    return somma;
    }
    Cosa cambia in termini di complessità se passo un ArrayList o una LinkedList?

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,280

    Re: Re: Re: Differenze tra ArrayList e LinkedList

    Originariamente inviato da Javino89
    codice:
    private static int _somma3Aux(List<Integer> lista) {
    int somma = 0;
    for (int i = 0; i < lista.size(); i++) {
    somma += lista.get(i);
    }
    return somma;
    }
    Cosa cambia in termini di complessità se passo un ArrayList o una LinkedList?
    Che se è una LinkedList il get() deve scorrersi tutta la lista fino a trovare l'indice voluto.

    Se invece di fare il for per indice, usassi l'Iterator della lista (o visto che usi almeno Java 5 il "for-each" che usa di nascosto l'iteratore), non cambierebbe più (praticamente) nulla tra fare la iterazione su ArrayList o su LinkedList.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.