当前位置: 首页 > news >正文

广告网站做动图怎么做做缓网站

广告网站做动图怎么做,做缓网站,网页设计与制作素材库,石家庄手机网站制作多少钱HashMap、LinkedHashMap与TreeMap的核心特性与使用场景总结 本文基于实际开发中遇到的“Map按Key排序”问题,结合源码特性,总结三种常见Map的区别与最佳实践。 一、核心特性对比 特性HashMapLinkedHashMapTreeMap内部结构数组链表/红黑树数组链表双向链…

HashMap、LinkedHashMap与TreeMap的核心特性与使用场景总结

本文基于实际开发中遇到的“Map按Key排序”问题,结合源码特性,总结三种常见Map的区别与最佳实践。


一、核心特性对比

特性HashMapLinkedHashMapTreeMap
内部结构数组+链表/红黑树数组+链表+双向链表红黑树
排序规则无顺序插入顺序 或 访问顺序(LRU)Key的自然顺序 或 自定义Comparator
get/put时间复杂度O(1)O(1)O(log n)
线程安全
适用场景纯快速查找需保留插入/访问顺序需Key排序

二、详细解析

1. HashMap:无序的哈希表

  • 核心特性

    • 不保证顺序(Java 8后同一桶内链表转红黑树)
    • 通过hashCode()equals()定位键值
  • 使用场景

    // 简单键值存储,无需顺序
    Map<String, Integer> wordCount = new HashMap<>();
    ### **2. LinkedHashMap:有序的哈希表**
  • 核心特性

    • 插入顺序(默认):按**put**操作的顺序迭代

    • 访问顺序(构造参数**accessOrder=true**):实现LRU缓存基础

      // LRU缓存示例(最近最少使用)
      Map<String, Data> cache = new LinkedHashMap<>(16, 0.75f, true) {@Overrideprotected boolean removeEldestEntry(Map.Entry eldest) {return size() > MAX_CACHE_SIZE;}
      };
      
  • 无法按Key排序

    • 其顺序仅由插入或访问操作决定,与Key自身大小无关

3. TreeMap:基于红黑树的有序Map

  • 核心特性

    • 自动按Key的自然顺序(实现**Comparable接口)或自定义Comparator**排序
    • 提供**firstKey()**, lastKey(), **subMap()**等导航方法
  • 典型应用:日期排序

    // Key为"yyyy-MM-dd"格式字符串的排序
    Map<String, List<ScoreTide>> scoreMap = new TreeMap<>(); // 默认自然升序// 若需逆序
    Map<String, List<ScoreTide>> reversedMap =new TreeMap<>(Comparator.reverseOrder());
    
    • 注意:字符串格式必须严格统一(如**"2023-09-05"而非"2023-9-5"**),否则字典序可能与实际日期顺序不符!

三、实际案例:日期Key的排序问题

需求场景

存储按日期(格式**yyyy-MM-dd**)排序的数据,要求:

  • 自动按日期升序排列
  • 支持快速范围查询(如查2023-10月的所有数据)

错误实现

// 错误!Comparator.reverseOrder()导致逆序
Map<String, Data> map = new TreeMap<>(Comparator.reverseOrder());

正确方案

// 方案1:依赖字符串的自然顺序(格式必须严格)
Map<String, Data> map = new TreeMap<>();// 方案2:显式转换为LocalDate比较(更健壮)
Map<String, Data> safeDateMap = new TreeMap<>(Comparator.comparing(key -> LocalDate.parse(key, DateTimeFormatter.ISO_LOCAL_DATE))
);

四、如何选择合适的Map?

  1. 需要极速查找且不关心顺序?

    → 选**HashMap**

  2. 需要保留插入顺序或实现LRU缓存?

    → 选**LinkedHashMap**

  3. 需要按Key排序或范围查询?

    → 选**TreeMap**


五、注意事项

  1. 线程安全

    三者均非线程安全!多线程环境应使用:

    • ConcurrentHashMap
    • Collections.synchronizedMap()
  2. Key的可排序性

    • TreeMap的Key必须实现Comparable或提供Comparator
    • 自定义对象作为Key时需谨慎实现**compareTo()equals()**
  3. 内存开销

    LinkedHashMap > TreeMap > HashMap(因额外维护链表或树结构)


源码是最终答案!建议阅读JDK中HashMap的putVal()、LinkedHashMap的afterNodeAccess()和TreeMap的fixAfterInsertion()方法,深入理解实现细节。

http://www.dtcms.com/a/459777.html

相关文章:

  • WordPress建站步骤收录网站的平台有哪些
  • 坪山城市建设局官方网站淘客手机网站源码
  • 京东的电子网站建设唐山网站建设优化
  • 绍兴网站建设做网站华夏名网网站建设
  • 如何做一个自己的网站3万网站建设费会计分录
  • 南宁网站建设王道下拉強wordpress文章页怎么调用网站图片
  • 网站进行规划与设计苏州做网站的公司有哪些
  • 企业网站报价方案下载长春可做微网站的公司
  • 江苏做网站公司排名中国建筑装修网
  • 网站开发都用什么wordpress2级目录伪静态
  • 网站设计的资质叫什么网络哪里能接活做网站
  • 海外网站加速器下载网站建设编辑
  • ssr网站开发石家庄营销网站建设多少钱
  • 关键词爱站网wordpress 主题 教程
  • 网站左侧漂浮代码苏州优化亚当
  • 网站营销队伍网站建设贰金手指下拉贰拾
  • 广西玉林网站建设正规公司WordPress对象储存
  • 关于旅游类网站建设设计方案手机网站改版了
  • 科研网站怎么建设网站情况建设说明
  • 做网站就上房山华网天下图文识别微信小程序是什么
  • 免费网站怎么注册seo数据优化教程
  • 南通 网络 公司网站东莞网站优化关键词公司
  • 网上有做衣服的网站河南省建设厅建筑信息网官网
  • 苏州建设职业培训中心网站英文网站策划
  • 分享10个国外优秀的平面设计网站表格制作方法
  • 如何修改网站模板二手手表交易平台
  • 网站做服务端花卉网站建设策划方案
  • (2) SwiftUI 基础(第二篇)
  • (3) SwiftUI 基础(第三篇)
  • wordpress企业建seo技术优化技巧