2012-05-01 6 views
12

Necesito algo así como una 3 dimensión (como una lista o un mapa), que llené con 2 cadenas y un entero dentro de un bucle. Pero, lamentablemente, no sé qué estructura de datos usar y cómo.Lista de 3 dimensiones o Mapa

// something like a 3-dimensional myData 
for (int i = 0; i < 10; i++) { 
    myData.add("abc", "def", 123); 
} 
+0

¿Cuál es la relación entre los tres valores? – Attila

+0

Vienen dinámicamente de JTextFields y JButtons. – user1170330

+0

Bien, pero ¿quieres _hacer_ con ellos? – Attila

Respuesta

18

Crear un objeto que encapsula los tres juntos y añadirlos a una matriz o lista:

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); 
} 

Si desea insertar en una base de datos , escriba una clase DAO:

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

Implemente según sea necesario usando JDBC.

+0

Necesito una clase similar de "contenedor" para almacenar exactamente tres propiedades. Inicializo esas propiedades a través del constructor, y necesito tener acceso a cada propiedad por separado. La clase no tiene lógica, solo esas tres propiedades y un constructor. ¿Cuál es la mejor forma de acceder a esas propiedades? ¿Está en este caso estableciendo las propiedades como públicas, o debería escribir getters? Las propiedades son finales. – kazy

+1

¿Está bien? ¿Quién te detendrá?Hazlos públicos finales; ellos son inmutables de esa manera. Espere que la policía de OO vaya a llamar. – duffymo

+0

Me pregunto si está bien porque no quiero codificar algo que va en contra de los conceptos de OO. De su respuesta, supongo que las propiedades finales no requieren getters, ya que no se pueden cambiar de todos modos. ¿O está bien el "público final" solo en caso de este pequeño caso? – kazy

2

Basta con crear una clase

class Data{ 
    String first; 
    String second; 
    int number; 
} 
1

La respuesta depende de la relación entre los valores.

1) solo desea almacenar los tres en el mismo orden en que aparecen: cree una clase personalizada que abarque los tres elementos y agregue una instancia de esta clase a List<MyData>.

2) desea asociar la primera cadena con el segundo y tercer dato (y asociar el segundo con el int): crear un Mapa> y agregarle los elementos (deberá crear el mapa interno) para cada nueva primera cadena)

3) no desea mantener duplicados, pero no quiere/necesita un mapa .: Cree un tipo personalizado (a'la 1)) y póngalos en un Set<MyData>

3) de mezcla y partido

9

código de Google Un Guava se vería así:

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); 
} 

Código anterior construirá un HashMap dentro de un HashMap con un constructor que tiene este aspecto:

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(); 
    } 
}); 

En caso de que desee anular las estructuras subyacentes que se pueden cambiar fácilmente.

-1

¡Usted puede ir con este código!

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); 
    } 
} 
Cuestiones relacionadas