package com.ks.lucky.util; import java.util.*; /** * 开奖帮助类 */ public class LuckyRunUtil { /** * 计算开奖的人 * * @param map * @param number * @return */ public static Set compute(Map map, int number) { List mList = new ArrayList<>(); for (Iterator its = map.keySet().iterator(); its.hasNext(); ) { String uid = its.next(); int c = map.get(uid); for (int i = 0; i < c; i++) { mList.add(uid); } } Set luckyUids = new HashSet<>(); for (int i = 0; i < number; i++) { if (mList.size() == 0) break; long startTime = System.currentTimeMillis(); int p = (int) (mList.size() * Math.random()); String uid = mList.get(p); luckyUids.add(uid); //移除列表右面的相同uid while (mList.size() > p && mList.get(p) == uid) { mList.remove(p); } //查询相同uid的列表左侧起点 for (int j = p - 1; j >= 0; j--) { if (!mList.get(j).equalsIgnoreCase(uid)) { p = j + 1; break; } else if (j == 0) { p = 0; } } //删除左侧相同uid while (mList.size() > p && mList.get(p) == uid) { mList.remove(p); } System.out.println("运行时间:" + (System.currentTimeMillis() - startTime)); } System.out.println(luckyUids); return luckyUids; } }