每当有新数据进入Web应用程序时,我都需要重新排序索引。
在内存中,我有一个产品列表和每个产品的inventoryCount。
我想保留productID的索引,按库存计数排序。
因此,如果新订单进入,库存会被修改,因此我必须更新product_inventory索引。
最快的方法是什么?
我不能使用数据库,它必须通过java代码全部在内存中
答案 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创建一个简单的对象,以避免装箱/取消装箱整数值的开销。