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

如何在Scala中基于两个列表构建嵌套的Java TreeMap?

Scala 实现嵌套TreeMap的高效方案

以下分别给出Scala原生TreeMap和Java TreeMap两种实现:

前置定义

两个原始列表定义如下:

private val a = List(0, 100000, 500000, 1000000)
private val b = List(0, 5, 25, 50)

1. Scala原生TreeMap实现

不可变版本(适合只读场景,内存效率最高)

不可变TreeMap可安全复用内层实例,避免重复构建:

import scala.collection.immutable.TreeMap

// 预构建内层模板,所有外层键复用同一个实例
private val innerTemplate = TreeMap.from(b.map(k => k -> 0))
val nestedScalaTreeMap: TreeMap[Int, TreeMap[Int, Int]] = TreeMap.from(a.map(k => k -> innerTemplate))

可变版本(适合需要后续修改内层值的场景)

import scala.collection.mutable.TreeMap

val nestedMutableScalaTreeMap = TreeMap.from(
  a.map(outerKey =>
    outerKey -> TreeMap.from(b.map(innerKey => innerKey -> 0))
  )
)

2. Java TreeMap实现(Scala调用)

只读场景(复用内层模板)

import java.util.TreeMap

// 预构建内层模板
private val javaInnerTemplate = new TreeMap[Int, Int]()
b.foreach(k => javaInnerTemplate.put(k, 0))

val nestedJavaTreeMap = new TreeMap[Int, TreeMap[Int, Int]]()
a.foreach(outerKey => nestedJavaTreeMap.put(outerKey, javaInnerTemplate))

可修改场景(每次新建内层实例)

import java.util.TreeMap

val nestedJavaTreeMap = new TreeMap[Int, TreeMap[Int, Int]]()
a.foreach { outerKey =>
  val inner = new TreeMap[Int, Int]()
  b.foreach(k => inner.put(k, 0))
  nestedJavaTreeMap.put(outerKey, inner)
}

效率说明

  • 只读场景下复用内层模板,可将时间复杂度从O(m*n log n)降到O(m log m + n log n),其中m为列表a的长度、n为列表b的长度,是该需求下的最优复杂度
  • 批量调用集合工厂方法构建实例,比逐个插入元素性能更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:24:02