¿Java tiene algo similar a [a, b, c] = (1, 2, 3)
de Python o list($a, $b, $c) = array(1, 2, 3)
de PHP?asignación paralela en Java?
Respuesta
No realmente. Puede hacer x = y = 0
para establecer varias variables, pero no una asignación paralela como Python. asignación múltiple
Probar int[] list = {1,2,3}
. Esto crea una matriz de enteros con los valores 1, 2 y 3 respectivamente.
necesitaría un 'nuevo int []' antes del '{...' – corsiKa
En realidad, no necesita un 'nuevo int []' antes del inicializador del array, al menos no cuando el inicializador del array es el lado derecho de una tarea. –
de Python es bastante potente, ya que también se puede utilizar para la asignación paralelo, como esto:
(x,y) = (y,x) # Swap x and y
No hay un equivalente para la asignación paralela en Java; que tendría que utilizar una variable temporal:
t = x; x = y; y = t;
Se pueden asignar varias variables de expresiones en una sola línea como la siguiente:
int a = 1, b = 2, c = 3;
O al mapa de una matriz, se puede hacer esto:
int a = array[0], b = array[1], c = array[2];
Si esto parece demasiado prolijo, puede crear temporalmente una referencia de una letra a la matriz de la misión:
int[] t = array;
int a = t[0], b = t[1], c = t[2];
Para obtener más información sobre la raíz de la pregunta, la asignación múltiple suele ser útil en Python en situaciones donde el código pasa varias variables relacionadas (quizás de diferentes tipos) juntas en una lista o matriz. En Java (o C/C++), la forma más idiomática de hacer esto sería crear una pequeña clase de datos (o estructura) para agrupar estas variables, y hacer que tanto el productor como el consumidor lo utilicen. A continuación, puede hacer referencia a los campos por su nombre en lugar de por el índice, como esto:
class Foo {
public int a;
public int b;
public int c;
}
/* ... */
Foo produceFoo() {
Foo f = new Foo();
f.a = 1;
f.b = 2;
f.c = 3;
return f;
}
/* ... */
Foo f = produceFoo();
System.out.println(f.a + "," + f.b + "," + f.c);
Esto también abre la puerta a la refactorización más tarde que hará Foo una clase real con el comportamiento y encapsulado de datos privados, no sólo un dato clase.
La asignación paralela no sería difícil de agregar a Java, de hecho la implementamos en nuestra extensión de lenguaje OptimJ. Pero simplemente no está allí.
Como Derrick menciona, se requiere una asignación en paralelo para una declaración de intercambio atómico.
Lo que usted llama asignación en paralelo es una instancia de un concepto más general llamado "asignación de desestructuración": usted tiene cierta estructura, y usted combina partes de ella con variables.
Suponga que tiene incrustado tuplas, a continuación, la asignación destructing puede extraer datos en cualquier nivel:
(x, (y, z)) = ((1, 2, 3), (4, (5, 6)))
// x = (1, 2, 3)
// y = 4
// z = (5, 6)
Suponga que tiene una lista o conjunto, a continuación, asignación desestructurada puede extraer sublistas o subconjuntos (x es un elemento , x * es sinónimo de una lista secundaria):
[ x, y*, z ] = [ 1, 2, 3, 4 ]
// x = 1
// y = [ 2, 3 ]
// z = 4
Obviamente listas y conjuntos pueden ser integrados con tuplas. Este esquema simple proporciona abstracciones de programación muy potentes, útiles tan pronto como necesite extraer datos.
- 1. Asignación paralela en C++
- 2. Operador de asignación paralela en Ruby
- 3. Scala: asignación paralela de Tuples
- 4. Asignación de matriz paralela en PHP
- 5. Programación paralela en Java
- 6. Multiplicación paralela de matrices en Java 6
- 7. Deteniendo una tarea java paralela con ant
- 8. Asignación de objetos Java
- 9. Java Memoria Asignación Fugas
- 10. Programación paralela en C#
- 11. optimización paralela en R
- 12. iteración paralela en C#?
- 13. Programación paralela en Mathematica
- 14. Algoritmo para transformar un DAG de flujo de trabajo en una asignación de recursos paralela?
- 15. Caja de herramientas de computación paralela Matlab, asignación dinámica de trabajo en parfor loops
- 16. Segmentación paralela
- 17. Asignación de matriz de encadenamiento en Java
- 18. Algoritmo de ordenación paralela
- 19. Suma paralela para vectores
- 20. Haskell ejecución paralela especulativa
- 21. Programación paralela dinámica
- 22. Programación paralela y C++
- 23. Multiplicación de matriz paralela
- 24. Asignación de memoria sin bloqueo de Java
- 25. Problemas de asignación Java - ¿Esto es atómico?
- 26. Asignación de matriz de Java (valores múltiples)
- 27. Asignación de referencia atómica multihilo de Java
- 28. Alineación de asignación de memoria Java
- 29. Asignación entre paquetes Oracle y paquetes Java
- 30. Asignación de memoria para Java Webstart Application
¿Es esto lo mismo que usar 'x = 0; y = 0; '? Quiero decir durante la compilación de JIT. –
sí, el código generado es exactamente el mismo. –
Basado en la evaluación derecha-izquierda, debe ser: 'y = 0; x = y; 'De lo contrario,' x = y = new Object(); '¿realmente creará dos objetos? – loungerdork