Confronto tra Red / Black Tree e Java ArrayList, quali sono i vantaggi di ciascuno? [chiuso]

-1

Stavo esaminando alcune delle complessit'a degli algoritmi di Big-O generali per diverse strutture di dati e mi chiedevo quale sarebbe stato il ArrayList di Java .

Dato che tendo a default a ArrayList nel mio codice Java quando ho bisogno di un List ( a meno che non sappia di aver bisogno di qualche funzionalità aggiuntiva ), mi chiedevo quali vantaggi ci sarebbero stati se invece ho usato un'implementazione ( presumo ben implementata ) di un albero rosso-nero.

Poiché ArrayList è supportato da Array , suppongo che sia considerato come Array o Singly-Linked List in base al sito Web collegato. Se ciò è vero, sembrerebbe che un'implementazione Albero rosso-nero possa utilizzare una struttura dati "predefinita" migliore.

Quali sarebbero i vantaggi / svantaggi dell'utilizzo di un albero rosso-nero al posto di ArrayList? ( e una domanda secondaria di accompagnamento, che cosa sarebbe ArrayList da prendere in considerazione nel Algorithm Complexities sito web? )

    
posta DoubleDouble 04.12.2015 - 19:48
fonte

1 risposta

1

Poiché si tratta di Java, vale la pena separare le interfacce dalle implementazioni nel suo framework Collections.

ArrayList e LinkedList sono entrambi tipi di elenco. Una lista è una collezione ordinata a cui fa riferimento un indice arbitrario (cioè l'indice non è una proprietà dei dati che vengono memorizzati). ArrayList è supportato da un array, che è una sequenza di archiviazione ad accesso casuale. Sono veramente utili quando devi accedere a elementi casuali e non vengono inseriti nel mezzo: ArrayList supporta questa operazione, ma è potenzialmente lenta.

TreeMap e TreeSet sono tipi di Map e Set (e gli Sets delegati alle Trees, quindi le differenze nella pratica sono nul). Questi oggetti sono referenziati da qualche proprietà (chiave) che è un oggetto arbitrario: per una mappa può essere qualsiasi cosa tu voglia (tipicamente una stringa), per un insieme è l'elemento stesso. Si tratta di raccolte ordinate, ovvero gli elementi nell'albero sono ordinati sia dall'ordinamento naturale degli elementi sia da altri criteri (questo è l'interfaccia di Comparator utilizzata).

Quindi le differenze sono:

  • Accesso: per indice per la lista, per chiave o elemento per l'albero.
  • Mutazione: entrambe sono ordinate, ma una lista è in qualsiasi ordine arbitrario mentre l'albero ricorre a se stesso mentre si inseriscono gli elementi.

Utilizzerai una lista quando non hai bisogno di accedere agli elementi con una chiave, hai solo bisogno di un gruppo di oggetti o di cui hai bisogno in un ordine particolare che non è il loro ordinamento naturale. Dovresti utilizzare una struttura (o una tabella hash) quando desideri un archivio di chiavi / valori simile al recupero dei record da un database tramite la chiave primaria.

    
risposta data 04.12.2015 - 20:09
fonte

Leggi altre domande sui tag