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

如何基于LinkedHashMap生成保持条目顺序的字符串全组合

实现思路
  • 先将LinkedHashMap的entry转换为有序列表,完全保留Map原有插入顺序
  • 初始化结果列表,初始值仅包含1个空字符串,作为拼接的起始基准
  • 按顺序遍历每个entry:
    • 对当前结果列表中的每一个已有字符串,分别拼接当前entry的key和value,生成新的字符串
    • 用新生成的所有字符串替换原结果列表,进入下一个entry的处理
  • 遍历完所有entry后,结果列表就是所有符合要求的组合
Java 代码实现(迭代版,易理解无栈溢出风险)
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public class CombinationGenerator {
    public static List<String> generateAllCombinations(LinkedHashMap<String, String> map) {
        // 把entry转成有序列表,保证顺序和Map完全一致
        List<Map.Entry<String, String>> entryList = new ArrayList<>(map.entrySet());
        List<String> result = new ArrayList<>();
        // 初始值为空串,方便后续拼接
        result.add("");
        
        for (Map.Entry<String, String> entry : entryList) {
            List<String> temp = new ArrayList<>();
            String key = entry.getKey();
            String value = entry.getValue();
            // 已有每个字符串都分别拼接key和value
            for (String s : result) {
                temp.add(s + key);
                temp.add(s + value);
            }
            // 替换结果列表进入下一轮处理
            result = temp;
        }
        return result;
    }

    // 测试用例
    public static void main(String[] args) {
        // 测试示例1
        LinkedHashMap<String, String> map1 = new LinkedHashMap<>();
        map1.put("a", "ab");
        map1.put("b", "c");
        System.out.println("示例1输出:");
        generateAllCombinations(map1).forEach(System.out::println);

        // 测试示例2
        LinkedHashMap<String, String> map2 = new LinkedHashMap<>();
        map2.put("A", "a");
        map2.put("B", "b");
        System.out.println("\n示例2输出:");
        generateAllCombinations(map2).forEach(System.out::println);
    }
}
递归实现(可选)

如果偏好递归写法,可以参考如下逻辑:

private static void dfs(List<Map.Entry<String, String>> entryList, int index, String current, List<String> result) {
    // 所有entry处理完成,将当前拼接结果加入列表
    if (index == entryList.size()) {
        result.add(current);
        return;
    }
    Map.Entry<String, String> entry = entryList.get(index);
    // 选择当前entry的key,递归处理下一个条目
    dfs(entryList, index + 1, current + entry.getKey(), result);
    // 选择当前entry的value,递归处理下一个条目
    dfs(entryList, index + 1, current + entry.getValue(), result);
}

调用时先转换得到entry有序列表,初始化空的结果列表,传入index=0、current=""即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:54:04