java 根据权重取随机数如何实现

有一个表A(配置了50条数据,以后会增加),用户每天看见的数据会从A表里随机抽一条进行查看,会有N多用户进行查看(每个用户之间互相独立),如何控制每个用户在查看完A表所有数据之前,每天看到数据不会重复。用户数量级(百万)

补充:A表中的数据没有属性(类似标志位),A表递增速度也就是几十条的递增,举个例子:假如A表中有两条数据,a和b,用户张三第一天看到是a,李四看到是b,第二天期望,张三看到b,李四看到a。感谢各位大神解答

每条数据做个标记,看了就设置为false ,没看就是默认true,
用文件存储看了的记录,根据记录随机,在记录内的继续随机

A表的数据量以后会是什么样的规模?

1.建议加一个状态标识一下是否看过,看过是1,没看过是0,然后每次只在没看过的随机一条,然后当所有都看过后,把所有的都标识为没看过。

2.如下是前count个数不重复的数的Java方法。

public class TestMain{

    public static void main(String[] args) {

        for(int i=0;i<50;i++ ){
            System.out.println(getRandom(50));
        }
    }

    public static int getRandom(int count){
        List<String> slist = new ArrayList<String>();
        List<String> slist2 = new ArrayList<String>();
        int returnvalue;
        for(int i=0;i<count;i++){
            slist.add(String.valueOf(i+1));
        }
        if(slist.size()>0){
            int temp = (int) Math.round(Math.random()*slist.size());
            if(temp==0){
                temp=1;
            }
            String suiji = slist.get(temp-1);
            slist2.add(suiji);
            slist.remove(temp-1);
            returnvalue = Integer.parseInt(suiji);
        }else{
            slist=slist2;
            int temp = (int) Math.round(Math.random()*slist.size());
            if(temp==0){
                temp=1;
            }
            String suiji = slist.get(temp-1);
            slist2.add(suiji);
            slist.remove(temp-1);
            returnvalue = Integer.parseInt(suiji);
        }
        return returnvalue;
    }
}