StringUtils.split比 "".split 性能要好11倍。差一个数量级

本文通过实验比较了两种字符串拆分方法的性能:使用标准Java方法abc.split(b)与Apache Commons Lang库中的StringUtils.split方法。结果显示,StringUtils.split方法在执行10,000次拆分操作时,比标准Java方法快约11倍。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public static void main(String[] args) {
int count=10000;
long start = System.currentTimeMillis();
for(int i=0;i<count;i++){
"abc".split("b");
}
long mid = System.currentTimeMillis();
for(int i=0;i<count;i++){
StringUtils.split("abc",'b');
}
long end = System.currentTimeMillis();

System.out.println(mid-start);
System.out.println(end-mid);
}

输出:
27
310


也就是说StringUtils.split比 "".split 性能要好11倍。差一个数量级
@Override public void complete(WfTaskBo taskBo) { Task task = taskService.createTaskQuery().taskId(taskBo.getTaskId()).singleResult(); if (Objects.isNull(task)) { throw new ServiceException("任务不存在"); } // 获取 bpmn 模型 ModelInstance bpmnModel = repositoryService.getBpmnModelInstance(task.getProcessDefinitionId()); identityService.setAuthenticatedUserId(TaskUtils.getUserId()); if (DelegationState.PENDING.equals(task.getDelegationState())) { //taskService.addComment(taskBo.getTaskId(), taskBo.getProcInsId(), FlowComment.DELEGATE.getType(), taskBo.getComment()); taskService.addComment(taskBo.getTaskId(), taskBo.getProcInsId(), taskBo.getComment()); taskService.resolveTask(taskBo.getTaskId()); } else { //taskService.addComment(taskBo.getTaskId(), taskBo.getProcInsId(), FlowComment.NORMAL.getType(), taskBo.getComment()); taskService.addComment(taskBo.getTaskId(), taskBo.getProcInsId(), taskBo.getComment()); taskService.setAssignee(taskBo.getTaskId(), TaskUtils.getUserId()); if (ObjectUtil.isNotEmpty(taskBo.getVariables())) { // 获取模型信息 //String localScopeValue = ModelUtils.getUserTaskAttributeValue(bpmnModel, task.getTaskDefinitionKey(), "camunda:local"); //boolean localScope = Convert.toBool(localScopeValue, false); //taskService.complete(taskBo.getTaskId(), taskBo.getVariables(), localScope); taskService.complete(taskBo.getTaskId(), taskBo.getVariables()); } else { taskService.complete(taskBo.getTaskId()); } } // 设置任务节点名称 taskBo.setTaskName(task.getName()); // 处理下一级审批人 if (StringUtils.isNotBlank(taskBo.getNextUserIds())) { this.assignNextUsers(bpmnModel, taskBo.getProcInsId(), taskBo.getNextUserIds()); } // 处理抄送用户 if (!copyService.makeCopy(taskBo)) { throw new RuntimeException("抄送任务失败"); } } private void assignNextUsers(ModelInstance bpmnModel, String processInsId, String userIds) { // 获取所有节点信息 List<Task> list = taskService.createTaskQuery() .processInstanceId(processInsId) .list(); if (list.size() == 0) { return; } Queue<String> assignIds = CollUtil.newLinkedList(userIds.split(",")); if (list.size() == assignIds.size()) { for (Task task : list) { taskService.setAssignee(task.getId(), assignIds.poll()); } return; } // 优先处理非多实例任务 Iterator<Task> iterator = list.iterator(); while (iterator.hasNext()) { Task task = iterator.next(); if (!ModelUtils.isMultiInstance(bpmnModel, task.getTaskDefinitionKey())) { if (!assignIds.isEmpty()) { taskService.setAssignee(task.getId(), assignIds.poll()); } iterator.remove(); } } // 若存在多实例任务,则进行动态加减签 if (CollUtil.isNotEmpty(list)) { if (assignIds.isEmpty()) { // 动态减签 for (Task task : list) { runtimeService.deleteMultiInstanceExecution(task.getExecutionId(), true); } } else { // 动态加签 for (String assignId : assignIds) { Map<String, Object> assignVariables = Collections.singletonMap("assignee", assignId); runtimeService.addMultiInstanceExecution(list.get(0).getTaskDefinitionKey(), list.get(0).getProcessInstanceId(), assignVariables); } } } }帮我把// 若存在多实例任务,则进行动态加减签 if (CollUtil.isNotEmpty(list)) { if (assignIds.isEmpty()) { // 动态减签 for (Task task : list) { runtimeService.deleteMultiInstanceExecution(task.getExecutionId(), true); } } else { // 动态加签 for (String assignId : assignIds) { Map<String, Object> assignVariables = Collections.singletonMap("assignee", assignId); runtimeService.addMultiInstanceExecution(list.get(0).getTaskDefinitionKey(), list.get(0).getProcessInstanceId(), assignVariables); } } }中的deleteMultiInstanceExecution和addMultiInstanceExecution替换成camunda的
最新发布
07-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值