在产品ID的内存索引中,按inventory_count排序

时间:2010-08-15 23:21:56

标签: java indexing

每当有新数据进入Web应用程序时,我都需要重新排序索引。

在内存中,我有一个产品列表和每个产品的inventoryCount。

我想保留productID的索引,按库存计数排序。

因此,如果新订单进入,库存会被修改,因此我必须更新product_inventory索引。

最快的方法是什么?

我不能使用数据库,它必须通过java代码全部在内存中

1 个答案:

答案 0 :(得分:1)

您可以使用比较器按库存计数的顺序维护产品ID列表。比较器在给定产品ID的情况下查找库存计数,并将其用作比较的基础。

假设您有班级:

class Product {
   int productID;
   int inventoryCount;
}

比较器看起来像:

class ProductInventoryComparator implements Comparator<Product> {
   public int compare(Product p1, Product p2) {
      return p1.inventoryCount-p2.inventoryCount;
   }
}

通过这种方式,您可以通过将元素插入正确的位置来维护已排序的列表,以使列表保持排序。要在列表中查找插入位置,请使用Collections.binarySearch找到插入点:

ProductInventoryComparator comp = new ProductInventoryComparator();
List<Product> productList = new ArrayList<Product>();
Product p = ...new product to add;
int pos = Collections.binarySearch(productList, comp, p);
if (pos<0) { // not found
   productList.add(-pos-1);
}

你提到你想要一个ProductID列表,可能是一个整数列表 - 如果可能的话,我建议为上面的Product创建一个简单的对象,以避免装箱/取消装箱整数值的开销。