当前位置:首页 > JavaScript

js实现treemap

2026-03-14 22:01:50JavaScript

实现 TreeMap 的基本思路

TreeMap 是一种基于红黑树(Red-Black Tree)实现的有序键值对数据结构。在 JavaScript 中,可以通过对象或 Map 结合自定义排序逻辑来模拟 TreeMap 的功能。

js实现treemap

使用 JavaScript 实现 TreeMap

方法一:基于数组和二分查找

通过数组存储键值对,并使用二分查找维护有序性。插入和删除操作需要手动维护数组的顺序。

js实现treemap

class TreeMap {
  constructor() {
    this.keys = [];
    this.values = [];
  }

  // 二分查找插入位置
  _findIndex(key) {
    let low = 0, high = this.keys.length;
    while (low < high) {
      const mid = Math.floor((low + high) / 2);
      if (this.keys[mid] < key) {
        low = mid + 1;
      } else {
        high = mid;
      }
    }
    return low;
  }

  set(key, value) {
    const index = this._findIndex(key);
    if (index < this.keys.length && this.keys[index] === key) {
      this.values[index] = value; // 更新已有键
    } else {
      this.keys.splice(index, 0, key);
      this.values.splice(index, 0, value); // 插入新键
    }
  }

  get(key) {
    const index = this._findIndex(key);
    if (index < this.keys.length && this.keys[index] === key) {
      return this.values[index];
    }
    return undefined;
  }

  delete(key) {
    const index = this._findIndex(key);
    if (index < this.keys.length && this.keys[index] === key) {
      this.keys.splice(index, 1);
      this.values.splice(index, 1);
      return true;
    }
    return false;
  }

  has(key) {
    const index = this._findIndex(key);
    return index < this.keys.length && this.keys[index] === key;
  }
}

方法二:基于 JavaScript 的 Map 和排序

利用 Map 存储键值对,并在需要时对键进行排序。适用于不频繁插入但需要有序遍历的场景。

class TreeMap {
  constructor() {
    this.map = new Map();
  }

  set(key, value) {
    this.map.set(key, value);
  }

  get(key) {
    return this.map.get(key);
  }

  delete(key) {
    return this.map.delete(key);
  }

  has(key) {
    return this.map.has(key);
  }

  // 返回排序后的键值对数组
  entries() {
    return Array.from(this.map.entries()).sort((a, b) => a[0] - b[0]);
  }
}

性能优化建议

  • 对于频繁插入和删除的场景,方法一的数组实现可能性能较差(O(n) 时间)。可以结合更高效的数据结构(如平衡二叉搜索树)优化。
  • 如果需要高性能的 TreeMap,可以考虑使用第三方库(如 bintreesimmutable.jsOrderedMap)。

示例用法

const treeMap = new TreeMap();
treeMap.set(3, 'three');
treeMap.set(1, 'one');
treeMap.set(2, 'two');

console.log(treeMap.entries()); // [[1, 'one'], [2, 'two'], [3, 'three']]
console.log(treeMap.get(2)); // 'two'

通过以上方法,可以在 JavaScript 中实现类似 Java TreeMap 的功能,支持有序键值对操作。

标签: jstreemap
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…