java list几个平均分配
时间: 2023-07-20 22:30:55 浏览: 81
如果您想将一个Java List分成n个部分并平均分配,请使用以下代码:
```java
public static <T> List<List<T>> splitList(List<T> list, int n) {
List<List<T>> result = new ArrayList<>();
int size = list.size();
int quotient = size/n;
int remainder = size%n;
int offset = 0;
for(int i = 0; i < n; i++) {
int len = quotient + (i < remainder ? 1 : 0);
if(len > 0) {
result.add(list.subList(offset, offset + len));
offset += len;
}
}
return result;
}
```
这个方法接收一个List和一个整数n作为参数,并返回一个包含n个List的List,每个List包含原始List的项的平均分配。如果原始List不能被n整除,则前remainder个List将包含一个额外的项。
相关问题
资产管理系统中的某微服务需要使用多线程处理多个工作任务(每个工作任务的工作量大小不一旦不可分割),为了均撕多个线程的处理时间,需要一个分配算法能根据任务的工作量把多个任务切分成和线程数相同的几个集合,使得这些集合的工作量能基本均衡。 示例1: 输入: works =[1,2,3,6,5,4,7,8,9] workerCount =2 说明:1,2,3,6,5,4,7,8,9表示有9个工作任务,每个工作任务的工作量大小为1,2,3,6,5,4,7,8,9 输出: 22:[8,7,4,3] 23:[9,6,5,2,1] 使用JAVA语言
您好,我可以为您提供关于资产管理系统中多线程任务分配算法的答案。
该算法可以采用如下方式实现:
1. 输入工作任务列表及线程数量。例如,输入works=[1,2,3,6,5,4,7,8,9]和workerCount=2。
2. 计算任务的总工作量。例如,这里的总工作量为1+2+3+6+5+4+7+8+9=45。
3. 计算每个线程应该承担的工作量。例如,这里应该平均分配工作量,即每个线程应承担的工作量为总工作量除以线程数,即22.
4. 将任务分配给对应的线程。这里可以采用贪心算法,将工作量最大的任务分配给当前工作量较少的线程。
5. 输出结果。例如,结果为22:[8,7,4,3]和23:[9,6,5,2,1],表示将工作任务分配给两个线程,分别为8、7、4和3,以及9、6、5、2和1。
您可以根据上述步骤实现该算法,在Java中,您可以使用List和线程池去实现。
希望能为您提供帮助!
阅读全文