Java Languagecollezioni

introduzione

Il framework delle collezioni in java.util fornisce un numero di classi generiche per insiemi di dati con funzionalità che non possono essere fornite da array regolari.

Il framework Collections contiene interfacce per Collection<O> , con le sottointerfacce principali List<O> e Set<O> e la mappatura della collezione Map<K,V> . Le raccolte sono l'interfaccia di root e vengono implementate da molti altri framework di raccolta.

Osservazioni

Le raccolte sono oggetti che possono contenere raccolte di altri oggetti all'interno di esse. È possibile specificare il tipo di dati memorizzati in una raccolta utilizzando Generics .

Le raccolte generalmente utilizzano gli spazi dei nomi java.util o java.util.concurrent .

Java SE 1.4

Java 1.4.2 e versioni successive non supportano i generici. Pertanto, non è possibile specificare i parametri di tipo contenuti in una raccolta. Oltre a non avere la sicurezza del tipo, è necessario utilizzare anche i cast per ottenere il tipo corretto da una raccolta.

Oltre alla Collection<E> , esistono diversi tipi principali di raccolte, alcune delle quali hanno sottotipi.

  • List<E> è una raccolta ordinata di oggetti. È simile a un array, ma non definisce un limite di dimensioni. Le implementazioni di solito aumentano di dimensioni internamente per accogliere nuovi elementi.
  • Set<E> è una raccolta di oggetti che non consente duplicati.
    • SortedSet<E> è un Set<E> che specifica anche l'ordinamento degli elementi.
  • Map<K,V> è una raccolta di coppie chiave / valore.
    • SortedMap<K,V> è una Map<K,V> che specifica anche l'ordinamento degli elementi.
Java SE 5

Java 5 aggiunge un nuovo tipo di raccolta:

  • Queue<E> è una raccolta di elementi che devono essere elaborati in un ordine specifico. L'implementazione specifica se si tratta di FIFO o LIFO. Questo obsoleta la classe dello Stack .
Java SE 6

Java 6 aggiunge alcuni nuovi sottotipi di raccolte.

  • NavigableSet<E> è un Set<E> con metodi di navigazione speciali integrati.
  • NavigableMap<K,V> è una Map<K,V> con metodi di navigazione speciali integrati.
  • Deque<E> è una Queue<E> che può essere letta da entrambe le estremità.

Si noti che gli elementi di cui sopra sono tutte le interfacce. Per poterli utilizzare, è necessario trovare le classi di implementazione appropriate, come ArrayList , HashSet , HashMap o PriorityQueue .

Ogni tipo di raccolta ha più implementazioni che hanno parametri di prestazioni e casi d'uso diversi.

Si noti che il Principio di sostituzione di Liskov si applica ai sottotipi di raccolta. Cioè, un SortedSet<E> può essere passato ad una funzione che si aspetta un Set<E> . È inoltre utile leggere i Parametri limitati nella sezione Generici per ulteriori informazioni su come utilizzare le raccolte con ereditarietà delle classi.

Se si desidera creare le proprie raccolte, potrebbe essere più semplice ereditare una delle classi astratte (come AbstractList ) anziché implementare l'interfaccia.

Java SE 1.2

Prima della versione 1.2, dovevi utilizzare le seguenti classi / interfacce:

  • Vector invece di ArrayList
  • Dictionary invece di Map . Nota che Dictionary è anche una classe astratta piuttosto che un'interfaccia.
  • Hashtable invece di HashMap

Queste classi sono obsolete e non dovrebbero essere utilizzate nel codice moderno.

collezioni Esempi correlati