一个简单的java分配算法

一、简单的平均算法

/* 
     * 平均分配 
     */  
    public Map<String,List> allotOfAverage(List users,List tasks){  
        Map<String,List> allot=new ConcurrentHashMap<String,List>(); //保存分配的信息  ,同步的MAP安全
        if(users!=null&&users.size()>0&&tasks!=null&&tasks.size()>0){  //如果任务数大于员工数
            for(int i=0;i<tasks.size();i++){  
                int j=i%users.size();  //任务数下标除员工数取余,保证每个人都有
                if(allot.containsKey(users.get(j))){  
                    List list=allot.get(users.get(j));  
                    list.add(tasks.get(i));  
                    allot.put(users.get(j), list);  
                }else{  
                    List list=new ArrayList();  
                    list.add(tasks.get(i));  
                    allot.put(users.get(j), list);  
                }  
            }  
        }  
        return allot;  
    }  

二、随机分配算法

/* 
     * 随机分配 
     */  
    public Map<String,List> allotOfRandom(List users,List tasks){  
        Map<String,List> allot=new ConcurrentHashMap<String,List>(); //保存分配的信息  
        if(users!=null&&users.size()>0&&tasks!=null&&tasks.size()>0){  
            for(int i=0;i<tasks.size();i++){  
                    int r_user=new Random().nextInt(users.size());  //生成随机数下标
                    if(allot.containsKey(users.get(r_user))){  
                        List list=allot.get(users.get(r_user));  
                        list.add(tasks.get(i));  
                        allot.put(users.get(r_user), list);  
                    }else{  
                        List list=new ArrayList();  
                        list.add(tasks.get(i));  
                        allot.put(users.get(r_user), list);  
                    }  
            }  
        }  
        return allot;  
    } 

三、权重分配

/* 
     * 权重分配 
     */  
    public Map<String,List> allotOfProportion(Map<String,String> users,List tasks){  
            Map<String,List> allot=new ConcurrentHashMap<String,List>(); //保存分配的信息  
            if(users!=null&&users.size()>0&&tasks!=null&&tasks.size()>0){  
                int a=0;//总权重   
                for(Entry<String, String> entry:users.entrySet()){    
                   a+=Integer.parseInt(entry.getValue());    
                }  
                int start=0,end=0;//起始下标 ,结束下标   
                if(a>0){  
                    for(Entry<String, String> entry:users.entrySet()){    
                        List allotTask=new ArrayList();    
                        end+=Integer.parseInt(entry.getValue());//权重累计    
                        for(;start < tasks.size()*end/a;start++){    
                            allotTask.add(tasks.get(start));    
                        }    
                        allot.put(entry.getKey(),allotTask);    
                    }   
                }  
            }  
        return allot;  
    } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值