2011-01-24 12 views
22

¿Qué clase funcionaría mejor para una lista de pares no ordenados? Tomaré un grupo de pares (flotante, corto) y tendré que poder realizar cálculos simples (como multiplicar el par para devolver un flotador individual, etc.). List solo toma un argumento, y HashMap no permitirá duplicados (hasta donde yo sé). ¿Alguna idea?Crear una lista de pares en java

Respuesta

37

Usted puede utilizar la clase Entry<U,V> que HashMap usos pero se le pegado con su semántica de getKey y getValue:

List<Entry<Float,Short>> pairList = //... 

Mi preferencia sería la creación de su propia clase simple Pair:

public class Pair<L,R> { 
    private L l; 
    private R r; 
    public Pair(L l, R r){ 
     this.l = l; 
     this.r = r; 
    } 
    public L getL(){ return l; } 
    public R getR(){ return r; } 
    public void setL(L l){ this.l = l; } 
    public void setR(R r){ this.r = r; } 
} 

Luego, por supuesto haga un List usando esta nueva clase, por ejemplo:

List<Pair<Float,Short>> pairList = new ArrayList<Pair<Float,Short>>(); 

También siempre se puede hacer una List s de List s, pero se hace difícil hacer cumplir dimensionamiento (que sólo dispone de pares) y se verá obligado, al igual que con las matrices, para tener la tipificación consistente.

+0

Pero sin duda lo acaba de hacer la clase de marcador de posición y luego añadir instancias de la misma a un películas-- llamar al pan, pan ... Let –

+0

de di que iba a hacer esto sin una nueva clase. Estoy pensando en ejecutar dos listas del tipo apropiado. ¿Por qué se queja cuando lo hago: private List floatList = new List (); pero no cuando dejo el operador de asignación y solo tengo lista privada floatList; ? Todavía necesita ser instanciado ¿no? – V1rtua1An0ma1y

+0

@ V1rtua1An0ma1y: porque 'List' es una interfaz, necesita una implementación, como, por ejemplo,' ArrayList' o 'LinkedList'. –

11

Use una lista de instancias de clases personalizadas. La clase personalizada es una especie de Par o Coordinación o lo que sea. A continuación, sólo

List<Coordinate> = new YourFavoriteListImplHere<Coordinate>() 

Este enfoque tiene la ventaja de que hace que satisface este requisito "realizar operaciones matemáticas sencillas (como multiplicar el par juntos para devolver un solo flotador, etc.)" limpia, porque la clase personalizada puede tener métodos para lo matemáticas que necesita hacer ...

1

Parece que necesita crear su propia clase de pares (consulte discussion here). A continuación, cree una lista de la clase de pares que creó

0

Si desea multiplicidades, puede ponerlo en el mapa que asigna el par al día. De esta manera solo habrá un par de valores dados, pero puede representar múltiples ocurrencias.

Entonces, si tiene muchos valores repetidos y desea realizar alguna operación en todos los valores, puede ahorrar muchos cálculos.

4

sólo ajustar algunos pequeños errores en el código de Mark Elliot:

public class Pair<L,R> { 
    private L l; 
    private R r; 
    public Pair(L l, R r){ 
     this.l = l; 
     this.r = r; 
    } 
    public L getL(){ return l; } 
    public R getR(){ return r; } 
    public void setL(L l){ this.l = l; } 
    public void setR(R r){ this.r = r; } 
} 
Cuestiones relacionadas