Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/06/2010, 17:06
uv3
 
Fecha de Ingreso: noviembre-2009
Mensajes: 31
Antigüedad: 14 años, 5 meses
Puntos: 0
Algoritmo sencillo para listado, necesito optimizarlo.

Buenas tengo estas tablas (pongo solo los atributos necesarios para esta consulta)

Cliente (CliId)
Articulo (ArtId)
Compra (ComId, objCliente) 1----->* LineasCompra(objArticulo)

Lo que deseo es obtener por cada Articulo, que cliente lo ha comprado.
Para eso he diseñado el siguiente algoritmo.

A esta funcion la corro una vez por cada articulo que tengo registrado. La coleccion de "Compras" que le paso como parametros ya viene ordenada , por eso es que uso un atributo como bandera para optimizar un poco el algoritmo.

Código:
public Vector<Cliente> obtenerClientesQueCompraronArticulo(Articulo xobjA, Vector<Compra> xcolCompras)
        
        Vector<Cliente> colCliente= new Vector();
        Cliente objCBandera = null ;
 
        for (Compra objC : xcolCompras){
            
           if (!objC.getObjC().equals(objCBandera))
              
                if (objC.tengoEseArticuloEnAlgunaLineaCompra(xobjA)){
                    colCliente.add(objC.getObjC());
                    objPBandera=objC.getObjC();
                }
        }
        return colProveedor;
    }
La cuestion es que me funciona perfecto, pero si yo un dia llego a tener 1 millon de compras registradas en mi bd, y por ejemplo tengo 200 articulos registrados, voy a tener que recorrer 200 veces (una por cada articulo) el millon de compras que tengo, para asi saber que cliente me ha comprado tal articulo. Me preguntaba si talvez hacer algun algoritmo por corte de control pero no se como en este caso.

Si yo se que no era tan facil