Java para mejorar la variedad de artículos (1)

 

Tabla de contenido

¿Por qué la matriz (cero) es especial?

(1) Descripción general de la matriz

(2) Matriz unidimensional

(Tres) matriz bidimensional

Comprender el modelo de matriz de cada dimensión en JAVA


Recientemente aprendí el conocimiento de las matrices JAVA y escribí un blog como notas de estudio para una fácil referencia, principalmente desde cuatro aspectos. (0) ¿Por qué la matriz es especial? (1) Introducción a la matriz (2) matriz unidimensional, definición, declaración, inicialización, uso, análisis de memoria, (3) matriz bidimensional, definición, declaración, inicialización, uso, análisis de memoria. (4) Cuando utilice la clase de matriz y sus métodos, agregue, elimine, modifique y verifique. Las matrices están relacionadas con algoritmos de clasificación, como la clasificación de burbujas, la dicotomía mínima, etc., que se introducen en Estructuras de datos y algoritmos. La aplicación de matrices aquí solo introduce la adición, eliminación, modificación y verificación de datos en la matriz.

¿Por qué la matriz (cero) es especial?

Hay muchas otras formas de contener objetos en JAVA, entonces, ¿qué hace que las matrices sean únicas?

Hay tres diferencias entre las matrices y otros tipos de contenedores: eficiencia, tipos y la capacidad de almacenar tipos básicos . En Java, las matrices son la forma más eficiente de almacenar y acceder aleatoriamente a secuencias de objetos. Las matrices son secuencias lineales simples. hace que el acceso a los elementos sea muy rápido, pero el precio que se paga por esta velocidad es que el tamaño del objeto de la matriz es fijo y su ciclo de vida es inmutable. La razón por la que las matrices son mejores que los contenedores como los genéricos es que puede crear una matriz para contener un tipo específico, lo que significa que puede verificar el compilador para evitar insertar mensajes de error y extraer tipos incorrectos.

Entonces, ¿por qué definir una matriz?

Defina 100 variables enteras, la estructura es la siguiente:

int i1, i2, i3, ... i100;

 

Esta forma de definición es muy problemática, porque estas variables no están relacionadas entre sí. Cuando desea generar el contenido de estas 100 variables, significa que debe escribir System.out.println()declaraciones 100o imprimir 100 veces con un bucle for.

De hecho, una matriz se refiere a un conjunto de variables de tipos relacionados, y estas variables se pueden operar de manera uniforme, es decir, un conjunto del mismo tipo de datos. De esta manera, los datos se guardan para realizar la adición, eliminación de datos , modificación y verificación. La matriz en sí es un tipo de datos de referencia.

(1) Descripción general de la matriz

Array (Array) es una colección de múltiples datos del mismo tipo dispuestos en un orden determinado, nombrados con un nombre, y una gestión unificada de estos datos por numeración. Los conceptos más utilizados en las matrices incluyen el nombre de la matriz, el subíndice, el elemento y la longitud de la matriz.

  • La matriz en sí es un tipo de datos de referencia y los elementos de la matriz pueden ser de cualquier tipo de datos, incluidos los tipos de datos básicos y los tipos de datos de referencia.
  •  La creación de un objeto de matriz abrirá todo un espacio continuo en la memoria, y el nombre de la matriz se refiere a la primera dirección de este espacio continuo.
  •  Una vez que se determina la longitud de la matriz, no se puede modificar.
  •  Podemos llamar directamente al elemento en la posición especificada por subíndice (o índice), que es muy rápido.
  •  Clasificación de matrices: Según las dimensiones: matriz unidimensional, matriz bidimensional, matriz tridimensional, ...; según el tipo de datos del elemento: una matriz de elementos de tipo de datos básicos, una matriz de datos de referencia elementos de tipo (es decir, una matriz de objetos)

Hay dos formas de declarar una matriz, inicialización estática e inicialización estática

Inicialización estática de la matriz:

  • Tipo de datos [] Nombre de la matriz =  new tipo de datos [] {elemento 1, elemento 2, elemento 3, ...}, como int [] sa = new int [] {1,2.3};

Inicialización dinámica de matriz:

  • Declare y abra una matriz:
    • Tipo de datos [] Nombre de la matriz =  new tipo de datos [longitud], como int [] a = new int [5];
    • Tipo de datos Nombre de matriz [] =  new tipo de datos [longitud], como int a [] = new int [4];

Luego, cuando la matriz abre espacio, puede usar las siguientes operaciones:

  • El acceso a la matriz se completa con el índice, es decir: "nombre de la matriz [índice]", como [2]; el índice de la matriz 0comienza desde el principio y el rango del índice es 0 ~ longitud de la matriz - 1, por ejemplo 3, se abre una matriz de espacio, por lo que se puede usar El índice es: 0,1,2, si el acceso excede el rango de índice de la matriz en este momento, se generará un java.lang.ArrayIndexOutOfBoundsException mensaje de excepción;
  • Cuando nuestra matriz usa la inicialización dinámica para abrir espacio, cada elemento de la matriz es el valor predeterminado del tipo de datos correspondiente de la matriz; y cada tipo de datos tiene su propio valor predeterminado.
  • La matriz en sí es una operación de conjunto ordenado, por lo que la operación del contenido de la matriz a menudo se realiza en un modo de bucle. La matriz es un conjunto de datos limitado, por lo que for se deben usar  bucles.
  • En  Java , se proporciona una longitud de matriz dinámica logrado por: el nombre de la matriz .length
public class ArrayDemo {
	public static void main(String args[]) {
		int data[] = new int[3]; /*开辟了一个长度为3的数组*/
		data[0] = 10; // 第一个元素
		data[1] = 20; // 第二个元素
		data[2] = 30; // 第三个元素
		for(int x = 0; x < data.length; x++) {
			System.out.println(data[x]); //通过循环控制索引
		}
	}
}
/*
输出结果为
10
20
30

*/

 

(2) Matriz unidimensional

    Una matriz unidimensional es una colección de datos compuesta por el mismo tipo de datos. Está compuesto por datos unidimensionales, como se muestra en la siguiente figura:

(1) Declaración

       Hay dos formas de declarar una matriz unidimensional: tipo var [] o tipo [] var, por ejemplo, int a [], o int [] a;

(2) Inicialización

Hay dos métodos de inicialización, inicialización dinámica e inicialización estática.

  • Inicialización dinámica: la operación de declaración de la matriz y la asignación de espacio para los elementos de la matriz y la asignación se llevan a cabo por separado

  • Inicialización estática: al definir la matriz, asigne espacio y asigne valores a los elementos de la matriz.

(3) Referencia

  • Después de definir y usar el operador new para asignarle espacio, se puede hacer referencia a cada elemento de la matriz;
  • Método de referencia de los elementos de la matriz: nombre de la matriz [subíndice del elemento de la matriz]
  •  El índice de un elemento de matriz puede ser una constante entera o una expresión entera. Como a [3], b [i], c [6 * i];
  • El subíndice del elemento de la matriz comienza desde 0; el rango de valor del subíndice válido de una matriz de longitud n: 0 -> n-1; por ejemplo, int a [] = new int [3]; Los elementos de la matriz a los que se puede hacer referencia son un [0], un [1], un [2]
  • Cada matriz tiene una longitud de atributo que indica su longitud, por ejemplo: a.length indica la longitud de la matriz a (número de elementos)
  • Una vez que se inicializa la matriz, su longitud es inmutable

(4) Valor de inicialización predeterminado

La matriz es un tipo de referencia y sus elementos son equivalentes a las variables miembro de la clase, por lo tanto, una vez que se asigna espacio para la matriz, cada elemento en ella se inicializa implícitamente de la misma manera que las variables miembro. En el siguiente programa, la dirección de inicialización predeterminada de un [3] es 0;

public class Test {
public static void main(String argv[]){
int a[]= new int[5];
System.out.println(a[3]); //a[3]的默认值为0
}
}

En términos generales, los valores predeterminados para otros tipos de datos son:

(5) Análisis de memoria

El diagrama simplificado de la memoria jvm en Java es

 

Entonces, para el siguiente programa, su proceso de ejecución es:

 package strings;

/**
 * Created with IntelliJ IDEA.
 * User:  yongping Li
 * Date: 2020/11/14
 * Time: 15:10
 * Description: No Description
 */
public class Test{
    public static void main(String args[]){
        int[] s;
        s = new int[10];
        for ( int i=0; i<10; i++ ) {
            s[i] =2*i+1;
            System.out.println(s[i]);
        }
    }
} 

En int [] s; en s = new int [10]; en s [i] = 2 * i + 1 ;:

                         

Para el siguiente programa, su análisis de memoria es

public class ArrayDemo {
	public static void main(String args[]) {
		int data[] = null;
		data = new int[3]; //开辟一个长度为3的数组
		int temp[] = null; //声明对象
		data[0] = 10;
		data[1] = 20;
		data[2] = 30;
		temp = data;  //int temp[] = data;
		temp[0] = 99;
		for(int i = 0; i < temp.length; i++) {
			System.out.println(data[i]);
		}
	}
}

Análisis de memoria:

è¿éåå¾çæè¿ °

int[] arr1 = new int[4];
arr1[0] = 10;
arr1[2] = 20;
String[] arr2 = new String[3];
arr2[1] = “刘杰”;
arr2 = new String[5];

Análisis de memoria:

int[] arr = new int[]{1,2,3};
String[] arr1 = new String[4];
arr1[1] = “刘德华”;
arr1[2] = “张学友”;
arr1 = new String[3];
sysout(arr1[1]);//null

Análisis de memoria:

 

Ejemplo de código de programa de matriz unidimensional:

package arrays;//: arrays/ArrayOptions.java
// Initialization & re-assignment of arrays.
import java.util.*;


public class ArrayOptions {
  public static void main(String[] args) {
    // Arrays of objects:
    BerylliumSphere[] a; // Local uninitialized variable
    BerylliumSphere[] b = new BerylliumSphere[5];
    // The references inside the array are
    // automatically initialized to null:
    System.out.println("b: " + Arrays.toString(b));
    BerylliumSphere[] c = new BerylliumSphere[4];
    for(int i = 0; i < c.length; i++)
      if(c[i] == null) // Can test for null reference
        c[i] = new BerylliumSphere();
    // Aggregate initialization:
    BerylliumSphere[] d = { new BerylliumSphere(),
      new BerylliumSphere(), new BerylliumSphere()
    };
    // Dynamic aggregate initialization:
    a = new BerylliumSphere[]{
      new BerylliumSphere(), new BerylliumSphere(),
    };
    // (Trailing comma is optional in both cases)
    System.out.println("a.length = " + a.length);
    System.out.println("b.length = " + b.length);
    System.out.println("c.length = " + c.length);
    System.out.println("d.length = " + d.length);
    a = d;
    System.out.println("a.length = " + a.length);

    // Arrays of primitives:
    int[] e; // Null reference
    int[] f = new int[5];
    // The primitives inside the array are
    // automatically initialized to zero:
    System.out.println("f: " + Arrays.toString(f));
    int[] g = new int[4];
    for(int i = 0; i < g.length; i++)
      g[i] = i*i;
    int[] h = { 11, 47, 93 };
    // Compile error: variable e not initialized:
    //!print("e.length = " + e.length);
    System.out.println("f.length = " + f.length);
    System.out.println("g.length = " + g.length);
    System.out.println("h.length = " + h.length);
    e = h;
    System.out.println("e.length = " + e.length);
    e = new int[]{ 1, 2 };
    System.out.println("e.length = " + e.length);
  }
} /* Output:
b: [null, null, null, null, null]
a.length = 2
b.length = 5
c.length = 4
d.length = 3
a.length = 3
f: [0, 0, 0, 0, 0]
f.length = 5
g.length = 4
h.length = 3
e.length = 3
e.length = 2
*///:~

Los resultados de la operación son:

(Tres) matriz bidimensional

La matriz unidimensional se puede considerar como una fila de datos, como se muestra en la siguiente figura:

La matriz bidimensional se puede considerar como una lista, como se muestra a continuación:

Por lo tanto, una matriz bidimensional se puede considerar como una combinación de dos matrices unidimensionales.

(1) Declaración e inicialización

 

Inicialización de una matriz bidimensional:

  • Inicialización dinámica de la matriz: matriz de objeto de tipo de datos [] [] = nuevo tipo de datos [número de filas] [número de columnas];
  • Inicialización estática de la matriz: matriz de objeto de tipo de datos [] [] = nuevo tipo de datos [número de filas] [número de columnas] { {valor, valor,…}, {valor, valor,…},…};

(2) Análisis de memoria

 

 

Comprender el modelo de matriz de cada dimensión en JAVA

 

 

Supongo que te gusta

Origin blog.csdn.net/weixin_41792162/article/details/109692597
Recomendado
Clasificación