2012-04-19 37 views
8

¿Cómo guardo un conjunto de números emparejados en java? ¿Uso listas o matrices o tal vez algo más?Almacenar pares de números en java

por ejemplo. [(1,1), (2,1), (3,5)]

+1

Se pueden utilizar todos los anteriores, pero no hay manera de adivinar a partir de lo que ha dicho. –

+0

@Erwald: use '[desc] (link)' para publicar el enlace en los comentarios – amit

+0

@Erwald Su única solución, pero podría no ser la mejor para lo que está haciendo el OP. –

Respuesta

8

Hay algunas opciones :

escribir una clase personalizada IntPair

class IntPair { 
    // Ideally, name the class after whatever you're actually using 
    // the int pairs *for.* 
    final int x; 
    final int y; 
    IntPair(int x, int y) {this.x=x;this.y=y;} 
    // depending on your use case, equals? hashCode? More methods? 
} 

y luego crear un IntPair[] o una List<IntPair>.

De forma alternativa, cree una matriz bidimensional new int[n][2], y trate las filas como pares.

Java no tiene un sistema incorporado en Pair clase por varias razones, pero la más notable es que es bastante fácil de escribir una clase que tiene la misma función, pero tiene mucho nombres más esclarecedores, útiles para la clase, sus campos y sus métodos.

Si supiéramos más acerca de para qué está usando esto realmente, podríamos brindarle sugerencias más detalladas, por lo que sabemos, un Map podría ser apropiado aquí.

+0

Tengo una matriz 2D de caracteres.Y quiero almacenar ciertas posiciones por separado. ¿Ayudas? – saviok

+0

¿Está almacenando posiciones en la matriz 2D? (En ese caso, las opciones que describí anteriormente son probablemente las mejores disponibles.) –

+0

En realidad, la pregunta era ¿cómo almacenar las posiciones? – saviok

0
class Pair<T> { 
    T p1, p2; 
    Pair(T p1, T p2) { 
     this.p1 = p1; 
     this.p2 = p2; 
    } 

Pair<Integer> pair = new Pair<Integer>(1,2); 

int i1 = pair.p1; 
int i2 = pair.p2; 

También se puede poner en getters, setters, iguales, código hash, etc.

+2

Me gustaría hacer 'p1',' p2' 'private final' y también anular' equals() 'y' hashCode() ' – amit

+0

@amit: buenos puntos. Agregué un comentario después del código. –

0

Si puede vivir con estructuras de bajo nivel y necesita desesperadamente una forma compacta de "forma literal" de "conjunto de pares" - esto me sucede en la prueba de unidad, cuando necesito un conjunto de accesorios - puede simplemente utilizar una matriz de matrices:

int[][] squares = { 
    { 1, 1 }, 
    { 2, 4 }, 
    { 3, 9 } 
}; 

Pero hay que tener en cuenta que no hay semántica de tal tipo - que todo depende de un uso adecuado, compilador no le dará una advertencia si escribe squares[0][1] cuando realmente quería squares[1][0].

0

Si necesita evitar duplicados, entonces un HashSet sería una buena opción, pero no entonces una ArrayList funcionaría.

Class IntPair(){ 
    int i; 
    int j; 
} 
HashSet<IntPair> set = new HashSet<IntPair>(); 

o

ArrayList<IntPair> list = new ArrayList<IntPair>(); 
+0

Si desea evitar duplicados, también deberá anular equals y hashCode. http://stackoverflow.com/a/7520464/3215004 – gmatht

Cuestiones relacionadas