2012-10-05 18 views
5

¿Hay alguna manera de manejar las listas en Java como bidimensionales?Lista bidimensional en Java

La situación: Tengo un gráfico con nodos, bordes y peso por borde. Ahora necesito una estructura de datos para almacenar para cada nodo: a) sus vecinos b) el peso del borde para cada neigbour

Primero pensé en la creación de un "nodo" nueva clase con un identifyer y algo así como un período de dos matriz dimensional para almacenar identificadores de vecinos y pesas de borde. Pero el número de vecinos para cada nodo no se proporciona y puede aumentar dinámicamente durante el tiempo de ejecución. Por lo tanto, creo que las matrices bidimensionales no son el camino a seguir aquí.

pensé que sería posible tener en el "nodo" clase una lista como:

List<node> neighbours = new ArrayList<node>(); 

Pero, obviamente, esto sólo se encarga de los nodos vecinos - no los pesos de sus bordes.

¿Alguien tiene una pista sobre cómo construir un "gráfico" donde para cada nodo se almacenan los identificadores del vecino y el peso del borde correspondiente?

Gracias por leer :-)

+0

Una matriz bidimensional haría, pero si implementarlo en modo de matriz 2D no es necesario y usted es flexible. ¿Puedo sugerir el uso de MAPS en Java? http://docs.oracle.com/javase/6/docs/api/java/util/Map.html –

+2

Similares: http://stackoverflow.com/questions/745048/looking-for-a-simple- java-api-for-creating-graphs-edges-nodes – yiannis

+0

[JGraphT] (http://jgrapht.sourceforge.net/) es increíble y una gran alternativa a los mapas de Java. – coroner

Respuesta

4

más directo es el uso de HashMap:

class Edge { 
// represents edge with destination node and it's weight 
     private final Node node; 
     private final int weight; 

     Edge(Node node, int weight) { 
      this.node = node; 
      this.weight = weight; 
     } 

    } 

// represents map which holds all outgoing edges keyed by source nodes. 
    Map<Node, Set<Edges>> edgesByOutgoingNodes = new HashMap<Node, Set<Edges>>(); 
+0

@coroner HashMap es el camino a seguir ... ;-) –

+0

¡Muchas gracias! :-) – coroner

0

se podría hacer algo como esto:

List<Connection> connections = new ArrayList<Connection>(); 

Donde 'Conexión' es definido como:

Class Connection { 
    private int weight; 
    private Node node; 

    .... add getters/setters here .... 
} 
0

La interfaz Table en Guava puede ser de alguna utilidad. Nunca lo he usado pero he escuchado que es bueno. Este método create puede ser de alguna utilidad

Cuestiones relacionadas