前言:
1,订单编号格式:AAAAOrder2020-
2,创建1个存储100万订单的集合
3,随机删除100万个订单中的2个
4,从100万个订单中找到被随机删除的2个订单
准备工作
/**
* 存储订单集合的深度(默认100万)
*/
private static final String SIZE = "1000000";
/**
* 订单编号前缀
*/
private static final String PREFIX = "AAAAOrder2020-";
/**
* 随机删除的订单数量(默认删除2个)
*/
private static final int NUMBER = 2;
步骤一(按要求生成100万个订单,通过hash存储)
/**
* 返回一个固定size的Map订单集合
* @return
*/
private static Map<Integer, String> getOrderMaps() {
int size = Integer.parseInt(SIZE);
Map<Integer, String> oMaps = new HashMap<>(size);
for (int i = 1; i <= size + 1; i++) {
oMaps.put(i, addOrders(String.valueOf(i)));
}
return oMaps;
}
/**
* 组装订单编号(位数不足则填充0)
* @param suffix
* @return
*/
private static String addOrders(String suffix) {
if (suffix.length() < SIZE.length()) {
String $suffix = "";
for (int j = 0; j < (SIZE.length() - suffix.length()); j++) {
$suffix += "0";
}
suffix = $suffix + suffix;
}
return PREFIX + suffix;
}
步骤二:随机删除两个订单
/**
* 随机删除订单集合中的2个订单
* @param oMaps
*/
public static void delete(Map<Integer, String> oMaps) {
for(int i=1;i<NUMBER+1;i++) {
int key = (int) (Math.random() * Math.pow(10, SIZE.length() - 1));
System.out.println("删除第" + i + "个订单:" + oMaps.get(key));
oMaps.remove(key);
}
}
步骤三:查找被随机删除掉的订单号
/**
* 查找被随机删除掉的两个订单
* @param oMaps
*/
public static void search(Map<Integer, String> oMaps) {
// 查询次数,如果找到一次,则+1次,找完了之后就不继续循环遍历
int n=0;
for(int i=1;i<Integer.parseInt(SIZE)+1 && n!=NUMBER;i++) {
if(oMaps.get(i) == null) {
System.out.println("被删除的第" + (++n) + "个订单:" + addOrders(String.valueOf(i)));
}
}
}
测试结果(耗时:毫秒)
完整代码:
import java.util.HashMap;
import java.util.Map;
/**
* 查找随机删除的订单(注意:删除之前,订单编号连号)
*/
public class FindRandomDelOrder {
/**
* 集合深度(默认100万)
*/
private static final String SIZE = "1000000";
/**
* 订单前缀
*/
private static final String PREFIX = "AAAAOrder2020-";
/**
* 随机删除的订单数量(默认删除两个)
*/
private static final int NUMBER = 2;
/**
* 返回一个固定size的Map订单集合
* @return
*/
private static Map<Integer, String> getOrderMaps() {
int size = Integer.parseInt(SIZE);
Map<Integer, String> oMaps = new HashMap<>(size);
for (int i = 1; i <= size + 1; i++) {
oMaps.put(i, addOrders(String.valueOf(i)));
}
return oMaps;
}
/**
* 组装订单编号(位数不足则填充0)
* @param suffix
* @return
*/
private static String addOrders(String suffix) {
if (suffix.length() < SIZE.length()) {
String $suffix = "";
for (int j = 0; j < (SIZE.length() - suffix.length()); j++) {
$suffix += "0";
}
suffix = $suffix + suffix;
}
return PREFIX + suffix;
}
/**
* 随机删除订单集合中的两个订单
* @param oMaps
*/
public static void delete(Map<Integer, String> oMaps) {
for(int i=1;i<NUMBER+1;i++) {
int key = (int) (Math.random() * Math.pow(10, SIZE.length() - 1));
System.out.println("删除第" + i + "个订单:" + oMaps.get(key));
oMaps.remove(key);
}
}
/**
* 查找被随机删除掉的两个订单
* @param oMaps
*/
public static void search(Map<Integer, String> oMaps) {
// 查询次数,如果找到一次,则+1次,找完了之后就不继续循环遍历
int n=0;
for(int i=1;i<Integer.parseInt(SIZE)+1 && n!=NUMBER;i++) {
if(oMaps.get(i) == null) {
System.out.println("被删除的第" + (++n) + "个订单:" + addOrders(String.valueOf(i)));
}
}
}
/**
* 程序执行入口
*/
public static void execute() {
// 初始时间
long sT = System.currentTimeMillis();
// 创建订单集合
Map<Integer, String> oMaps = getOrderMaps();
// 随机删除两个订单
delete(oMaps);
// 找到被随机删除的两个订单
search(oMaps);
// 结束时间
long eT = System.currentTimeMillis();
System.out.println("縂耗时:" + (eT-sT) + "毫秒");
}
public static void main(String[] args) {
execute();
}
}