You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Activiti7流程高亮场景下HashSet仅能添加一次null值问题求解

问题解答

HashSet对null元素的存储规则

HashSet本身允许存储最多1个null元素,底层逻辑如下:

  • HashSet的实现完全基于HashMap,调用add(元素)方法本质是执行HashMap的put(元素, PRESENT),其中PRESENT是HashSet预定义的静态常量对象,作为所有key对应的固定占位value。
  • HashMap处理null类型的key时,会将null的哈希值固定设置为0,对应存储在哈希数组下标为0的位置。
  • 第一次调用add(null)时,HashMap中没有key为null的键值对,插入操作生效,add()方法返回true。
  • 后续再次调用add(null)时,HashMap会检测到key为null的键值对已存在,仅会覆盖对应的value值,不会新增key,因此HashSet不会新增元素,add()方法返回false,后续的null无法重复加入集合。

场景问题修复建议

你代码中出现null元素,是因为部分拼接得到的actPair不存在于sequenceFlowMap的键集合中,调用get()方法返回了null。如果要避免集合中出现无效的null,可以在添加前增加非空判断,代码示例如下:

actPairSet.forEach(actPair -> {
  logger.info("actPair:{}, seq:{}", actPair, sequenceFlowMap.get(actPair));
  String sequenceId = sequenceFlowMap.get(actPair);
  // 仅非空的序列流ID才加入高亮集合
  if (sequenceId != null) {
    highSequenceSet.add(sequenceId);
  }
  logger.info("{}",highSequenceSet.toString());
});

内容的提问来源于stack exchange,提问作者Criwran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:54:02