l gustaría crear una dinámica de matriz 2D, donde el número de filas y columnas es desconocido. Llenado por la adición de un elemento a la vez. Por ejemplo, 1 haga clic con el botón = M[1][1] (en este momento, la matriz contiene sólo este elemento), entonces M[1][2], [1][3]….etc.

InformationsquelleAutor guts | 2011-04-04

3 Comentarios

  1. 6

    Uso de las colecciones para ello. Por ejemplo:

    List<List<Integer>> dynamic2D = new ArrayList<List<Integer>>();
    
    dynamic2D.add(new ArrayList<Integer>());
    dynamic2D.add(new ArrayList<Integer>());
    dynamic2D.add(new ArrayList<Integer>());
    
    dynamic2D.get(0).add(5);
    dynamic2D.get(0).add(6);
    dynamic2D.get(0).add(7);
    
    System.out.println(dynamic2D.get(0).get(0)); //5
    System.out.println(dynamic2D.get(0).get(1)); //6
    System.out.println(dynamic2D.get(0).get(2)); //7
  2. 2

    Aquí es una opción a tener en cuenta para mantener su matriz 2D rápido para su procesamiento. Se inicia con un tamaño fijo de la matriz de int[][] y crece sólo cuando sea necesario:

    public class DynamicMatrix2D {
    private int[][] matrix = new int[5][5];
    public void set(int x, int y, int value) {
    if (x >= matrix.length) {
    int[][] tmp = matrix;
    matrix = new int[x + 1][];
    System.arraycopy(tmp, 0, matrix, 0, tmp.length);
    for (int i = x; i < x + 1; i++) {
    matrix[i] = new int[y];
    }
    }
    if (y >= matrix[x].length) {
    int[] tmp = matrix[x];
    matrix[x] = new int[y + 1];
    System.arraycopy(tmp, 0, matrix[x], 0, tmp.length);
    }
    matrix[x][y] = value;
    }
    public int get(int x, int y) {
    return x >= matrix.length || y >= matrix[x].length ? 0 : matrix[x][y];
    }
    public static void main(String[] args) {
    DynamicMatrix2D matrix2d = new DynamicMatrix2D();
    matrix2d.set(1, 1, 1);     //set (1, 1) to 1
    matrix2d.set(10, 10, 2);   //set (10, 10) to 2
    matrix2d.set(100, 100, 3); //set (100, 100) to 3
    System.out.println(matrix2d.get(1, 1));     //outputs 1
    System.out.println(matrix2d.get(10, 10));   //outputs 2
    System.out.println(matrix2d.get(100, 100)); //outputs 3 
    }
    }
  3. 1

    Usted podría (1) utilizar un hash mapa, el cual se asigna puntos a los estados de botón y tener el máximo número de filas y columnas se almacenan en variables independientes; alternativamente, usted podría (2) el uso de un árbol y tiene un nodo para cada fila, y agregar nodos de la fila correspondiente a los nodos para representar la matriz de entradas.

    Usted podría también (3) el uso de un pedido, la dinámica de la lista (lista de matriz, lista enlazada, etc.) de los números enteros, donde el primer n bits de cada número entero puede almacenar la fila, la siguiente n los bits de la columna, y el resto de los bits de datos relativos al estado del botón. El tamaño de n, sin embargo, depende de lo que su máximo de los límites para el número de filas y columnas. El uso de operadores bit a bit para extraer los datos relevantes a la hora de recuperar un elemento de la lista.

    La cantidad de memoria asignada sería menos de (3) si una matriz se utiliza la lista, pero de lo contrario, cada entrada tiene algunos datos adicionales asociados al agregar elementos adicionales, debido a la naturaleza de la estructura de datos. La búsqueda sería más rápido con (1); los dos (2) y (3) debe exhibir O(log(n)), a la búsqueda de veces, pero yo sospecho que (3) sería significativamente más rápido a causa de la localidad de los datos. De métodos (1) y (2), adición y eliminación de elementos sería más rápido con (1); el tiempo que se tarda para la aproximación (3) para agregar o quitar un elemento depende de la implementación de la lista.

    Estoy seguro de que hay un montón de otras estructuras que se puede utilizar que no he enumerado aquí, pero es posible que desee tomar nota de que si usted puede garantizar que el número de filas y de las columnas permanecen dentro de límites razonables, a continuación, utilizando una estructura de datos estática realmente podría acelerar las cosas.

Dejar respuesta

Please enter your comment!
Please enter your name here