5 Domanda: Elenco o mappa a 3 dimensioni

domanda creata a Thu, Jul 2, 2015 12:00 AM

Ho bisogno di qualcosa come una 3-dimensione (come una lista o una mappa), che riempio con 2 stringhe e un intero all'interno di un ciclo. Ma, sfortunatamente, non so quale struttura dati usare e come.

 
// something like a 3-dimensional myData
for (int i = 0; i < 10; i++) {
    myData.add("abc", "def", 123);
}
    
12
  1. Qual è la relazione tra i tre valori?
    2012-05-01 15: 52: 42Z
  2. Vengono dinamicamente da JTextFields e JButtons.
    2012-05-01 15: 53: 31Z
  3. Ok, ma vuoi fare con loro?
    2012-05-01 15: 58: 41Z
  4. Non sei sicuro di quale sia il tuo caso d'uso esatto in modo da fornire un'altra opzione. Se puoi fare affidamento su una libreria open source, puoi sfruttare la tabella di Guava class.
    2012-05-01 16: 01: 55Z
  5. Inserisci in un database.
    2012-05-01 16: 03: 29Z
5 risposte                              5                         

Crea un oggetto che incapsula i tre insieme e aggiungili a un array o a Elenco:

 
public class Foo {
    private String s1;
    private String s2; 
    private int v3;
    // ctors, getters, etc.
}

List<Foo> foos = new ArrayList<Foo>();
for (int i = 0; i < 10; ++i) {
    foos.add(new Foo("abc", "def", 123);
}

Se vuoi inserirlo in un database, scrivi una classe DAO:

 
public interface FooDao {
    void save(Foo foo);    
}

Implementare se necessario utilizzando JDBC.

    
19
2012-05-01 16: 37: 53Z
  1. Ho bisogno di una classe simile "container" per memorizzare esattamente tre proprietà. Inizializzo queste proprietà tramite il costruttore e ho bisogno di avere accesso a ogni proprietà separatamente. La classe non ha alcuna logica in esso, solo quelle tre proprietà e un costruttore. Qual è il modo migliore per accedere a tali proprietà? È in questo caso l'impostazione delle proprietà come pubblica, o dovrei scrivere getter? Le proprietà sono definitive.
    2015-07-02 18: 26: 25Z
  2. Va bene? Chi ti fermerà? Renderli pubblici finali; sono immutabili in questo modo. Aspettatevi che la polizia dell'OO venga a bussare.
    2015-07-02 18: 28: 22Z
  3. Sto chiedendo se va bene perché non voglio codificare qualcosa che sia contro i concetti OO. Dalla tua risposta suppongo che le proprietà finali non richiedano i getter, in quanto non possono essere comunque modificati? O il "pubblico finale" va bene solo in caso di questo piccolo caso?
    2015-07-02 19: 22: 50Z
  4. "Contro concetti OO"? Non ci sono poliziotti OO. Puoi fare tutto ciò che desideri. Dovresti pensare e capire le implicazioni. Non hai bisogno di permesso. Questo è il codice. Se non funziona, cambialo.
    2015-07-02 19: 40: 45Z
  5. Questa risposta mi ha permesso di risparmiare un sacco di tempo.
    2015-10-21 09: 56: 39Z

Il codice Guava di Google è simile al seguente:  

import com.google.common.collect.Table;
import com.google.common.collect.HashBasedTable;

Table<String, String, Integer> table = HashBasedTable.create();

for (int i = 0; i < 10; i++) {
    table.put("abc", "def", i);
}

Il codice sopra costruirà una HashMap all'interno di una HashMap con un costruttore che assomiglia a questo:

 
Table<String, String, Integer> table = Tables.newCustomTable(
        Maps.<String, Map<String, Integer>>newHashMap(),
        new Supplier<Map<String, Integer>>() {
    @Override
    public Map<String, Integer> get() {
        return Maps.newHashMap();
    }
});

Nel caso in cui desideri sovrascrivere le strutture sottostanti, puoi facilmente modificarlo.

12
2015-02-18 21: 32: 46Z

Crea semplicemente una classe

 
 class Data{
  String first;
  String second;
  int number;
 }
    
4
2012-05-01 15: 53: 29Z

La risposta dipende da quale sia la relazione tra i valori.

1) vuoi solo memorizzare tutti e tre nello stesso ordine in cui vengono: crea una classe personalizzata che racchiuda tutti e tre gli elementi e aggiungi un'istanza di questa classe a un List<MyData>.

2) vuoi associare la stringa sirst con il secondo e terzo dato (e associare il secondo con l'int): crea una mappa > e aggiungi gli elementi (dovrai creare la mappa interna per ogni nuova prima stringa)

3) non vuoi conservare i duplicati, ma non vuoi /hai bisogno di una mappa .: crea un tipo personalizzato (a'la 1)) e inseriscili in un Set<MyData>

3) mix-and match

    
1
2012-05-01 15: 58: 05Z

Puoi andare con questo codice!

 
public class List3D {

    public static class MyList {
        String a = null;
        String b = null;
        String c = null;

        MyList(String a, String b, String c) {
            this.a = a;
            this.b = b;
            this.c = c;
        }
    }

    public static void main(String[] args) {

        List<MyList> myLists = new ArrayList<>();
        myLists.add(new MyList("anshul0", "is", "good"));
        myLists.add(new MyList("anshul1", "is", "good"));
        myLists.add(new MyList("anshul2", "is", "good"));
        myLists.add(new MyList("anshul3", "is", "good"));
        myLists.add(new MyList("anshul4", "is", "good"));
        myLists.add(new MyList("anshul5", "is", "good"));

        for (MyList myLista : myLists)
            System.out.println(myLista.a + myLista.b + myLista.c);
    }
}
    
- 1
2017-10-07 16: 52: 14Z
fonte posta Qui
Altre domande