2010-10-15 11 views
12

Vorrei una mappa che preservasse l'ordine degli elementi se esiste una cosa del genere.Esiste un ArraySet e ArrayMap?

Sono consapevole del fatto che sarebbe non eseguire in prossimità di una HashMap, ma ho intenzione di usarlo solo per programmi piccoli/temporanei.

risposta

11

Non c'è ArrayMap. :)

Ma un LinkedHashMap manterrà l'ordine di inserzione e un ordine TreeMap verrà ordinato in base all'ordinamento naturale dei tasti.

+0

@broady, dove dice che il poster originale vuole ordine di inserimento? –

+0

Siamo spiacenti, non ero chiaro, ma stavo cercando l'ordine di inserimento. Grazie! –

+3

ArrayMap e ArraySet sono in Android –

6

se si intende un ordinamento definito gli elementi che è possibile utilizzare un TreeMap (doc here) .. altrimenti, se si parla di ordine di inserimento è possibile utilizzare un LinkedHashMap (doc).

+0

ma ... TreeMap utilizza ordinamento naturale ... OP: che cosa si intende per 'ordine degli elementi' ??? –

+0

Penso che ciò che intende per "ordine definito" è che userà il confronto incorporato nella classe della chiave, o userà un comparatore che puoi passare. –

+0

@broady TreeMap usa l'ordinamento naturale ... a meno che tu non fornisca il tuo Comparatore al costruttore. – highlycaffeinated

1

Dai un'occhiata a LinkedHashSet e -Map.

Questa implementazione differisce da HashSet in quanto mantiene una lista doppiamente collegata che attraversa tutte le sue voci. Questo elenco collegato definisce l'ordine di iterazione, che è l'ordine in cui gli elementi sono stati inseriti nel set (ordine di inserimento). Si noti che l'ordine di inserimento non è influenzato se un elemento viene reinserito nel set.

Questa implementazione risparmia i propri clienti dall'ordinamento non specificato, generalmente caotico fornito da HashSet, senza incorrere nell'aumento del costo associato a TreeSet. Può essere usato per produrre una copia di un set che ha lo stesso ordine dell'originale, indipendentemente dall'implementazione del set originale.

1

O che ne dici di una ListOrderedMap che conserva l'ordine degli elementi. ListOrderedMap Api

+1

LinkedHashMap nell'API standard fa lo stesso e non richiede di includere un JAR di terze parti nel progetto. – Jesper

+2

LOM ha estensioni API che LinkedHashMap non può duplicare . Esempio: in commons-collections 3.2, put (int, Object, Object) è stato aggiunto a LOM, che consente di inserire una mappatura in una particolare posizione . Ce ne sono altri – DeliveryNinja

3

È necessario controllare il progetto fastutil, una memoria Java ed efficiente in termini di tempo. Fornisce un'implementazione della mappa dell'array, come ad esempio Int2IntArrayMap

Provalo! Non uso più la libreria standard, i fastutils fanno davvero la differenza. Speranza che aiuta

1

C'è un ArrayMap nelle librerie di supporto Android. Ci sono alcuni componenti non JDK, ma non dovrebbe essere così difficile da portare.

Source

Problemi correlati