Modo migliore per memorizzare l'elenco come costante

1

Diciamo che voglio analizzare alcuni JSON e memorizzo il percorso in una classe di costanti Java sul percorso che voglio seguire.

Ad esempio:

public static final List<String> path = Arrays.asList("a", "b", "c"); 

così posso farlo (pseudocodice):

public boolean checkSomething() {
    JsonThing json = ...
    for (String path : Constants.path) {
        json.get(path);
    }

    return json.getAsString().equals("value");
}

Sarebbe meglio memorizzare questa costante come una stringa come:

public static final String path = "a:b:c";

e poi fai:

public boolean checkSomething() {
    JsonThing json = ...
    for (String path : Constants.path.split(":") {
        json.get(path);
    }
    return json.getAsString().equals("value");
}

Poiché il percorso è già memorizzato in memoria, sarebbe più efficace mantenere solo un: elenco separato poiché quella stringa occupa meno spazio dell'array. In questo caso, c'è un po 'più di lavoro da fare (iterando su String per trasformarlo in lista), ma poi la lista è garbage collection quando il metodo è finito.

    
posta flyinghigh 23.11.2018 - 06:45
fonte

1 risposta

4

La differenza nel consumo di memoria di un elenco di stringhe rispetto a una stringa concatenata dovrebbe essere priva di significato. Scegli la struttura dati che meglio si adatta alle esigenze funzionali.

È molto probabile che un oggetto List che avvolge una serie di stringhe, che è ciò che Arrays.asList("a", "b", "c") produce, è una buona scelta. Una stringa concatenata, d'altra parte, è raramente una buona scelta come struttura dati.

Tuttavia, se il consumo di memoria è un problema reale, che potrebbe essere vero se è necessario conservare milioni di tali percorsi, è possibile prendere in considerazione alternative. Devo dire che è difficile immaginare un caso del genere se i tuoi dati consistono in percorsi JSON. Sente l'odore di un serio problema di progettazione che dovrebbe essere risolto su carta e penna prima di provare a risolverlo ottimizzando a livello di codice.

La stringa di per sé non è un modo ottimale per memorizzare i dati dei caratteri che fanno uso di un sottoinsieme molto limitato di Unicode. Se dovessi tenere in memoria un'enorme quantità di dati relativi ai caratteri, dovrei prima cercare di codificare i dati dei caratteri in modo efficiente invece di usare le stringhe.

    
risposta data 23.11.2018 - 09:09
fonte

Leggi altre domande sui tag