2011-03-18 14 views
5

Esiste un caso di utilizzo reale per parallel arrays in Java? Sembra troppo ingombrante per mantenere N array che sono correlati.Perché utilizzare gli array paralleli in Java?

Esempio:

int ages[] = {0,   17,  2,   52,   25}; 
String names[] = {"None", "Mike", "Billy", "Tom",  "Stan"}; 
int parent[] = {0,   3,   1,   0,   3}; 

posso solo creare una persona di classe e oggetti archivio in un unico array. Sarà poco più costoso, ma molto facile da usare, giusto?

risposta

10

Gli array paralleli sono un residuo di linguaggi come Basic (quello originale) che non aveva strutture di dati diverse dagli array. Dovresti invece definire gli oggetti come suggerisci.

1

Crea rappresentazione di classe/oggetto solo se ciò che stai cercando di rappresentare può essere meglio spiegato come oggetto.

Le mappe di hash sono un'altra soluzione. Ad esempio, invece di matrici diverse per età e nomi, se i nomi sono univoci, è possibile utilizzare il nome come chiavi ed età come valore.

+2

Le mappe sono quasi pessime come le matrici parallele. –

+0

@stephan: beh, sono d'accordo, ma a volte preferisco usare le mappe quando le cose sono semplici :) – Sujoy

+0

Lo correggerò. Per certi aspetti, Maps è peggio; per esempio. sono inevitabilmente più lenti e più affamati di memoria rispetto agli array paralleli e all'approccio preferito (classi personalizzate). Inoltre l'approccio della mappa diventa ingombrante se si hanno più di due attributi da associare ... come in questo caso. –

1

Le classi sono migliori, ma se il caso d'uso è limitato, ad es. un metodo di lavoro, è uno spreco crearne uno. Se hai una classe Pair, potresti specializzarla per lo scopo senza creare una nuova classe.

11

L'unico vero vantaggio degli array paralleli in Java è una misura (IMO extreme) per ridurre l'allocazione degli oggetti e/o l'utilizzo dell'heap. Per una collezione abbastanza grande di oggetti, 3 matrici occuperanno meno spazio E useranno meno oggetti di una singola matrice di istanze di alcune classi personalizzate.

Questo approccio è normalmente una cattiva idea, poiché rende il codice molto più fragile. Creare e usare una classe personalizzata è l'approccio migliore nella maggior parte delle situazioni.

+3

Sì, questo è qualcosa da tenere a mente nello sviluppo di Android. Non tutti i dispositivi Android sono uguali e in generale i telefoni cellulari dispongono di risorse limitate. Per citare i suggerimenti sulle prestazioni del riferimento degli sviluppatori Android, '" Se devi implementare un contenitore che memorizza tuple di oggetti (Foo, Bar), prova a ricordare che due array Foo [] e Bar [] paralleli sono generalmente molto meglio di una singola matrice di oggetti personalizzati (Foo, Bar). "' http://developer.android.com/training/articles/perf-tips.html – loeschg

Problemi correlati