admin
2020-12-01 5cc5a1103a95765aeec6234d1c15220d132eea9a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package com.ks.lucky.util;
 
import java.util.*;
 
/**
 * 开奖帮助类
 */
public class LuckyRunUtil {
 
 
    /**
     * 计算开奖的人
     *
     * @param map
     * @param number
     * @return
     */
    public static Set<String> compute(Map<String, Integer> map, int number) {
 
        List<String> mList = new ArrayList<>();
        for (Iterator<String> 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<String> 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;
    }
 
 
}