Java集合框架底层原理与性能优化:从ArrayList到HashMap
Java里的集合框架很多开发者从学习第一天就开始用ArrayList存数据、HashMap做缓存写着写着就成了肌肉记忆。但真正问你几个问题——ArrayList扩容到底怎么扩的HashMap在JDK 8里引入红黑树是为什么遍历的时候删元素为什么老报ConcurrentModificationException——能立刻答清楚的人还真不多。很多人的状态是“用得很熟原理很虚”一旦面试官往深里问两句或者线上出现一个跟集合相关的诡异问题就容易卡壳。这篇文章不打算重复“Java集合框架概述”这种教科书内容我按自己实际开发里遇到的场景把Java集合的选型、底层原理、日常使用的坑点以及面试常问的几个细节原原本本梳理一遍。适合刚学完Java基础、想系统过一遍集合框架的读者也适合准备Java面试想查漏补缺的朋友。这里说的集合是JDK里的Collection和Map两大体系不是数学课上那个集合概念别搞混。1. 先搞清楚Java集合解决的是什么问题1.1 为什么数组不够用数组是Java里最基础的数据容器但从第一天起它就有几个让人难受的缺陷。第一长度固定初始化时说好10个就永远是10个想塞第11个就得自己手动new一个新数组再把旧数据拷过去。第二数组元素的增删操作非常别扭删除中间一个元素后面的全得往前挪写起来一堆for循环还容易下标越界。第三数组只能按下标访问如果想根据某个属性找一个元素你得自己遍历比较。集合框架就是来解决这些问题的。List接口提供了自动扩容、按位置增删的能力Map接口提供了按key快速定位value的能力Set接口则帮你保证了元素不重复。说白了集合不是“数组的替代品”而是把日常开发里最常用的数据组织方式抽象成了统一的API让程序员不用每次重复造轮子。1.2 两大体系Collection和MapJava集合框架从上往下分最顶层的接口就两个Collection和Map。Collection是单列数据的集合里面存的每个元素都是独立的一个对象Map是双列数据的集合存的是键值对像查字典一样通过key找到value。Collection下面又派生出三个核心子接口List、Set和Queue。List是有序可重复的元素按插入顺序排列可以重复典型实现是ArrayList、LinkedList、Vector。Set是无序不可重复的往里面塞重复元素会被自动丢弃典型实现是HashSet、LinkedHashSet、TreeSet。Queue是队列一般用于先进先出的场景典型实现是LinkedList、PriorityQueue、ArrayDeque。Map体系中最重要的实现是HashMap、LinkedHashMap、TreeMap、Hashtable、ConcurrentHashMap。很多人刚学时背了一堆类名却不知道它们之间什么关系。我建议你脑子里至少要有这样一张图Collection下的三兄弟是List、Set、QueueMap是独立的一棵大树。这张图能帮你后面理解为什么HashSet底层其实是包装了一个HashMap。2. 接口背后的设计套路学完能看懂一半源码2.1 Collection接口的三个儿子List接口的特点是“有序可重复”它的核心子类有三个ArrayList、LinkedList和Vector。ArrayList底层是Object数组查询快、增删慢LinkedList底层是双向链表增删快、查询慢Vector和ArrayList几乎一样但方法加了synchronized是线程安全的不过性能比ArrayList差现在已经很少用了。我记得很多教材还推荐Vector实践里真没必要真要线程安全有更好的替代方案。Set接口的特点是“无序不可重复”核心子类有HashSet、LinkedHashSet、TreeSet。HashSet底层是HashMap把元素作为key存进去value统一用一个固定的Object占位所以元素不能重复LinkedHashSet在HashSet基础上维护了插入顺序TreeSet底层是TreeMap元素会按自然顺序或者你指定的比较器排序。我见过不少人在TreeSet里存自定义对象结果忘记实现Comparable接口一运行直接抛ClassCastException这个坑面试和工作中都容易踩。Queue接口稍微特殊一点它继承了Collection但语义是队列主要实现是LinkedList、ArrayDeque和PriorityQueue。PriorityQueue是个优先级队列底层是堆结构可以用来实现一个简单的定时任务调度器或者求Top K问题后面工程场景里用处不小。2.2 Map接口键值对的王国Map是键值对集合的顶层接口它的核心实现类各有侧重。HashMap允许key和value为null底层是数组加链表加红黑树是无序的。LinkedHashMap在HashMap基础上多维护了一个双向链表能记住插入顺序也能设置访问顺序做LRU缓存非常合适。TreeMap基于红黑树key按自然顺序或自定义比较器排序支持范围查询。Hashtable是早期遗留下来的线程安全Map所有方法都加了synchronized性能差基本被淘汰了。ConcurrentHashMap是JDK并发包里提供的线程安全Map是现在高并发场景下的首选。我之前在项目里做过一个简单的热搜榜功能需要实时统计关键字的热度并且按热度降序输出当时就是用TreeMap配合一个自定义Comparator实现的。如果当时不懂TreeMap的排序原理可能就得自己写一堆排序逻辑代码量直接翻倍。2.3 迭代器所有集合的统一访问方式集合框架还有一个容易被忽略的设计——Iterator接口。不管你的集合底层是数组还是链表只要实现了Iterator就能用统一的方式遍历。它的核心方法就三个hasNext()、next()、remove()。JDK 5之后有了增强for循环本质底层还是用Iterator实现的。这里有个很重要的机制叫fail-fast意思是当迭代器正在遍历一个集合时如果集合的结构被修改了比如添加或删除了元素迭代器会立刻抛出ConcurrentModificationException。它是通过一个叫modCount的字段实现的每次结构性修改都会让modCount加1迭代器初始化时记录下当时的modCount每次next()时检查是否变化变了就抛异常。这个机制不是Java的bug而是为了防止你在遍历时做出不确定的行为。后面我会详细讲这个坑的规避方法。3. ArrayList和LinkedList选型差一点性能差十倍3.1 ArrayList的扩容机制到底怎么工作ArrayList的默认初始容量是10每次扩容时新容量是旧容量的1.5倍。具体执行时如果旧容量是10扩容后就是15计算方法是用旧容量加上右移一位的结果相当于oldCapacity (oldCapacity 1)。这个位运算技巧在JDK源码里很常见比直接乘1.5更高效。扩容的核心操作是Arrays.copyOf也就是new一个新数组把旧数组元素全部拷贝过去再把引用指向新数组。这个扩容过程代价可不小尤其是在数据量大的时候。所以如果你能预估数据规模最好在构造时就指定初始容量new ArrayList(10000)这样可以避免频繁扩容带来的数组拷贝开销。我以前批量处理百万级数据时就吃过亏循环add了将近十万次结果性能慢得离谱后来加了个初始容量设置速度直接快了一个量级。3.2 LinkedList的底层细节LinkedList底层是双向链表每个节点持有三个引用当前元素值、前一个节点、后一个节点。这个结构决定了它在头部和中间插入删除元素非常快时间复杂度是O(1)或O(n/2)取决于是否命中二分查找优化。但按索引访问元素就很慢了因为得从头或尾顺着链走时间复杂度是O(n)。我见过有人用LinkedList存了一万条数据然后频繁调用get(index)来访问中间元素结果程序卡得不行。LinkedList的get方法虽然做了个优化如果index小于size的一半从头开始找否则从尾部倒着找但本质上还是O(n)的查找。这种场景就该用ArrayList。而如果你需要频繁在队列头部插入或删除LinkedList就比ArrayList合适得多。到底选哪个核心判断标准就是读多还是写多写的位置在头部还是尾部。3.3 一个真实的选型对比案例我做过一个简易的消息队列中间件模块需要支持大量生产者往队列尾部写入消息同时消费者从头部取走消息。这个场景如果用ArrayList头部取元素会导致所有元素整体前移数据量上来后性能惨不忍睹。用LinkedList就非常合适尾部offer和头部poll都是O(1)操作。但如果这个模块改成了按索引随机读取报表数据ArrayList又会吊打LinkedList。同样的数据不同的操作模式选型错了性能会差一个数量级这不是理论是实实在在踩过的坑。4. HashMap原理拆解面试常驻考题4.1 底层结构数组链表红黑树HashMap的底层结构在JDK 7和JDK 8之间有显著区别。JDK 7是数组加链表数据存在单向链表的节点里头插法插入。JDK 8改成了数组加链表加红黑树链表插入改成了尾插法同时当链表长度达到8且数组长度大于等于64时链表会转成红黑树降低查询时间。为什么是链表长度8这个阈值这是基于泊松分布计算出来的。在负载因子0.75、哈希随机性良好的前提下链表长度达到8的概率是千万分之六已经是极其罕见的情况了。这个阈值设计其实是一个时间和空间的折中链表查询是O(n)红黑树查询是O(log n)但红黑树节点占用空间更大所以不能一上来就用树只在极端哈希碰撞时才转换。4.2 put操作的完整流程往HashMap里put一个键值对时流程大致是先对key调用hashCode()再把高16位和低16位做异或运算来扰动哈希值这样能让哈希分布更均匀减少碰撞。然后用扰动后的哈希值和数组长度减一做按位与运算得到数组下标。如果该位置为空直接放一个Node节点如果不为空就遍历链表或红黑树找到key相同的节点就更新value找不到就在链表末尾追加一个新节点。这里有个关键细节哈希扰动函数的目的是让高位的信息也能参与数组下标的计算。因为数组默认长度是16计算下标时只用了低4位如果两个对象的hashCode恰好低4位相同、高位不同就会冲突。扰动函数把高16位异或到低16位等于是把高位的随机性“搅拌”到了低位大幅降低了碰撞概率。这个细节不面试但理解它对业务系统减少Hash冲突很有帮助。4.3 扩容时机和扩容过程HashMap有一个默认的负载因子0.75。意思是当元素个数超过容量乘以0.75时就会触发扩容。比如默认容量16元素个数达到12时就扩容到32。扩容后所有元素需要重新计算下标并迁移到新数组里这个迁移过程开销极大一次put操作可能要拷贝所有元素。为什么负载因子选0.75而不是1或者更高负载因子越大空间利用率越高但哈希冲突的概率也越大查询效率降低负载因子越小空间越浪费但冲突少、查询快。0.75是时间空间折中的经验值。所以在实际开发里如果你明确知道Map大概要放多少数据就应该在构造时指定初始容量计算公式是expectedSize / 0.75f 1。比如预计放1000条数据初始容量最好设为1340左右能避免扩容引起的性能损耗。4.4 并发put导致的死循环问题JDK 7的HashMap在多线程并发put时扩容过程中可能形成环形链表导致get操作进入死循环CPU飙到100%。这个问题当年在阿里、美团等大厂的线上故障里出现过不少次。JDK 8改成尾插法之后死循环问题基本解决了但并发场景下数据丢失、脏读的问题依然存在。所以不用说多线程环境下绝不直接使用HashMap。正确姿势是用ConcurrentHashMap。它采用CAS配合synchronized锁住链表头节点的方式来保证线程安全并且把整个Map分成多个桶Node数组并发度比Hashtable高得多。Hashtable是给整个表加一把大锁ConcurrentHashMap只锁单个桶性能差距在高并发下非常明显。我做过一次压测同样一万次并发写入Hashtable耗时是ConcurrentHashMap的三倍多这还是在小数据量下量大了差距只会更大。5. TreeMap和TreeSet排序背后的红黑树5.1 自然排序与ComparatorTreeMap和TreeSet的底层都是红黑树。红黑树是一种自平衡的二叉搜索树它保证最坏情况下插入、删除、查找的时间复杂度都是O(log n)。TreeMap中的key要么实现了Comparable接口也就是说要实现compareTo方法要么你在构造TreeMap时传入一个Comparator比较器。如果你存的key是一个自定义对象比如一个订单类按订单创建时间排序那就要么让订单类实现Comparable接口在compareTo方法里写排序逻辑要么单独写一个Comparator。前者只能支持一种排序方式后者灵活度更高同一个TreeMap可以配合不同比较器实现不同排序。我推荐优先用Comparator因为不改动业务类本身符合开闭原则。5.2 一个隐藏的大坑比较结果不能变TreeMap的key在存放后如果它的值发生了变化导致比较结果改变这个key在树中的位置就错了之前能查到的数据后来就查不到了。比如你用一个对象的name字段做排序依据对象存进TreeMap后又改了name那么这颗红黑树就乱了。这个坑很隐蔽因为不报错只是行为诡异。同样的道理HashSet和HashMap的key如果是可变对象并且修改了影响hashCode的字段也会导致内存泄漏元素永远无法被get到而且集合里会存在一份“失效”的数据。所以集合里的key尽量用不可变对象比如String、Integer别用可变对象当key。5.3 范围查询的实用价值TreeMap由于是有序的天然支持范围查询。subMap(fromKey, toKey)能取出一个范围内的子MapheadMap和tailMap分别取前缀和后缀。这个能力在业务里很实用比如统计某个时间段内的订单金额如果用HashMap就得全部遍历然后筛选而TreeMap直接用subMap就能拿到这个区间效率高得多。我还用TreeMap做过一个分段的IP归属判断功能。先把IP地址转换为整数每一段区间映射到一个城市存进TreeMap查询时用floorEntry找到不大于目标IP的最大key再判断是否落在对应区间内一次二分查找就搞定了性能非常好。6. 遍历、删除与并发修改最常见的运行时报错6.1 三种遍历方式的取舍Java集合遍历的方式主要有三种增强for循环、Iterator迭代器、forEach方法加Lambda表达式。对于List还有传统的for循环按索引访问。增强for循环本质上是语法糖底层就是Iterator。forEach方法接收一个Consumer函数式接口写起来很简洁但它有一个限制不能在Lambda表达式里修改集合结构否则会抛ConcurrentModificationException。这个限制不是编译器强制的而是运行时的modCount机制检测出来的。另外增强for循环也不能在循环体里删除元素原因相同。6.2 如何在遍历时安全删除实际开发里经常需要“遍历集合时删除满足条件的元素”。错误写法是直接在增强for循环里调用list.remove()运行必报ConcurrentModificationException。正确方案至少有三种。第一种是用Iterator在循环里调用iterator.remove()这是Iterator接口自带的安全删除方法它会把modCount同步更新所以不会触发异常。第二种是把要删除的元素先收集到另一个集合里遍历完统一删除适合批量删除。第三种是JDK 8之后的Collection.removeIf方法一行搞定内部实现就是基于Iterator的。我在代码里最常用的是removeIf它语义清晰代码量最少比如list.removeIf(s - s.length() 5)一行就能把所有长度大于5的字符串删除。凡是遇到“边遍历边删”的逻辑先想想能不能用removeIf。6.3 并发环境下遍历集合多线程下对同一个ArrayList进行增删操作同样可能抛出ConcurrentModificationException。如果并发读写不频繁可以用CopyOnWriteArrayList它每次修改时都会复制一份新数组读操作不加锁适合读多写极少、集合不大的场景。如果你需要一个并发环境下的有序集合可以用ConcurrentSkipListMap它的底层是跳表结构支持并发且有序。我做网关配置同步时用过CopyOnWriteArrayList来保存动态路由规则因为路由规则更新频率很低但查询概率极高。如果用普通ArrayList加锁读也会被阻塞性能会有不少浪费。CopyOnWriteArrayList的写代价是复制整个数组但如果写频率低到几分钟才一次的话这点复制成本完全可接受。7. 集合的性能细节每一个参数都值得推敲7.1 初始化容量别偷懒很多人在写new HashMap()时从来不给初始容量参数这在数据量小的时候没什么问题但一旦数据量达到几千几万扩容带来的拷贝成本就很可观。预估容量时注意一个公式initialCapacity (预期的元素个数 / 0.75f) 1这样能保证不会触发扩容。ArrayList同理new ArrayList(预期的元素个数) 比默认容量10开始扩容再拷贝要好得多。这个习惯养成之后写代码的性能隐患会少很多。我曾在处理一个几十万行Excel导入的功能时只用了一行 new ArrayList(rows.size())整个导入过程耗时从原来的十几秒降到了七八秒差别真的很明显。7.2 用对集合操作少写一堆工具方法JDK 8之后集合本身带了一些很实用的默认方法。List有sort、replaceAllMap有computeIfAbsent、merge、putIfAbsentSet有removeIf。它们能让代码量少一半也更不容易出错。比如Map的computeIfAbsent可以优雅地实现“从map里取list如果没有就new一个”的逻辑MapString, ListString map new HashMap(); map.computeIfAbsent(key, k - new ArrayList()).add(value);这一行代码等价于以前五六行的判断逻辑。merge方法则适合做统计聚合比如分组求和map.merge(key, 1, Integer::sum)就能实现计数器。这些API熟练掌握后日常开发效率提升是立竿见影的而且面试官看到你用这些方法印象分也会高一些。7.3 数据一致性视角下的集合选择这里提一个稍微进阶的点数据库和缓存的数据一致性Java集合也能沾上边。比如做本地缓存时很多人喜欢用HashMap加手动过期清理但这种方式在高并发下有数据不一致、内存泄漏的风险。更稳妥的方案是用LinkedHashMap实现LRU缓存重写removeEldestEntry方法当容量超过设定值就删除最久未使用的元素。配合ReentrantReadWriteLock来做并发控制读写锁分离读多写少的本地缓存场景性能很不错。我在一个配置中心客户端组件里就是这么实现的比直接用ConcurrentHashMap干净得多。8. 面试常问的几个集合题答好这些基本过关8.1 HashMap相关问题面试里关于HashMap的高频问题有哪些我梳理一下JDK 8和JDK 7的区别什么时候链表会转红黑树为什么阈值是8扩容机制是怎样的负载因子为什么是0.75put流程细节get流程细节为什么HashMap线程不安全ConcurrentHashMap在JDK 8里用了什么机制保证线程安全。回答这些问题的核心不在于背答案而在于理解背后的设计权衡。比如负载因子0.75本质是时间换空间还是空间换时间的取舍阈值8是泊松分布计算出的一个概率极端值。理解这些之后哪怕面试官换着角度问你也能答到点子上。8.2 List和Set相关问题List相关高频题包括ArrayList和LinkedList区别ArrayList扩容机制如何边遍历边删除元素CopyOnWriteArrayList的适用场景。Set相关高频题包括HashSet如何保证不重复LinkedHashSet为什么能保持插入顺序TreeSet排序原理。还有一个老生常谈的问题HashSet和HashMap有什么区别。要答得完整得说出来HashSet底层就是一个HashMap只是value部分固定用一个PRESENT对象占位所以HashMap有的特性HashSet基本都有HashMap的key不允许重复HashSet的元素当然也就不能重复。8.3 容易口误的概念辨析有几个概念希望大家别在面试时搞混。第一List是有序的这个序是插入顺序不是排序顺序。ArrayList按插入顺序存储不自动排序。第二Set是无序的这里说的无序是遍历顺序不保证和插入顺序一致但是HashSet的底层数组长度是固定的某些情况下遍历顺序看起来也“像”是有序的这不是保证。第三HashMap允许null键但Hashtable不允许null键ConcurrentHashMap也不允许null键。这三个集合的null策略容易记错面试经常被问。8.4 面试时要小心避开的坑我见过不少人在面试里这样回答“如果HashMap一直发生哈希冲突怎么办”答案是链表会越来越长查询性能退化到O(n)JDK 8之后链表长度到8且数组长度到64会转红黑树。但如果面试官追问“为什么是8而不是16”这时候要答出泊松分布、时间空间折中相关的权衡背一个数字是不够的。还有人会被问到“为什么HashMap的容量必须是2的幂次方”这不仅是因为计算下标时可以用按位与代替取模提速明显更重要的是能保证扩容后元素的新位置要么在原位置要么在原位置加旧容量这样可以用位运算快速迁移数据性能提升很大。最后再讲点实在的我做Java开发这些年越来越觉得集合框架是整个Java生态里最值得精读源码的基础库之一。它的继承关系清晰设计模式用得恰到好处JDK 8之后还引入了大量函数式接口和默认方法读一遍源码不仅能提升编写业务代码的能力还能学到大量真正的工程技巧。很多人纠结要不要读源码我的建议是先把HashMap和ArrayList的源码读透就足够了这两份代码能把数据结构、算法、性能设计一次讲明白。如果这篇文章里的某个点让你有共鸣或者让你想起自己踩过的某个集合相关的坑欢迎在评论区聊聊你的经历。也建议你找一个周末打开JDK源码从ArrayList的add方法开始顺着整个集合框架读一遍读完你会有一种“原来如此”的通透感。

相关新闻

USACO白银组真题解析:BFS、序列DP与边界陷阱

USACO白银组真题解析:BFS、序列DP与边界陷阱

2008年2月的USACO白银组,是很多早期选手在 usaco.org 或 POJ 上反复刷的一套题。那年白银组一共三道题:Meteor Shower(流星雨)、Eating Together(一起吃饭)、Dining Cows(奶牛排队)&…

2026/10/11 13:11:08 阅读更多 →
微软DCU英国法庭首战:从技术溯源到司法打击黑产链

微软DCU英国法庭首战:从技术溯源到司法打击黑产链

事情得从微软数字犯罪部门第一次以原告身份走进英国法院说起。对圈外人来说,这可能只是一条关于“网络黑产被告上法庭”的新闻;但对做安全运营的人来说,这条消息传递的信号其实非常重:科技巨头开始从“受害者保护者”的位置&#…

2026/10/11 8:53:37 阅读更多 →
开发团队如何评估链助手内测分发的实际价值

开发团队如何评估链助手内测分发的实际价值

开发团队如何评估链助手内测分发的实际价值在移动应用快速迭代的背景下,许多技术负责人和开发者开始关注链助手内测分发服务的性价比怎么样。其核心价值并非单纯体现在价格层面,而在于如何在降低部署成本与提升测试效率之间找到最佳平衡点。链助手通过简…

2026/10/11 8:56:00 阅读更多 →

最新新闻

向量数据库与图数据库协同检索:突破多跳关联推理瓶颈

向量数据库与图数据库协同检索:突破多跳关联推理瓶颈

做知识类应用的开发者,大概都经历过这样的场景:一开始把文档切片、做embedding、灌进向量数据库,接上大模型做检索增强生成,demo跑起来挺顺,问什么答什么。可一旦问题从"某功能怎么用"变成"A出问题会不…

2026/10/11 13:58:14 阅读更多 →
NodePy节点式自动化:从脚本到可视化数据流的办公提效实践

NodePy节点式自动化:从脚本到可视化数据流的办公提效实践

1. 为什么我放弃了"万能脚本",转向NodePy这类节点方案先说说我自己的情况。过去几年里,我的日常工作中有一大半是和数据打交道——不是那种需要建模型的高深数据,而是最朴素的:把几个Excel表合并、按某种规则给文件重新…

2026/10/11 13:58:14 阅读更多 →
视频分析算法60讲实战拆解:从数学公式到MATLAB源码落地

视频分析算法60讲实战拆解:从数学公式到MATLAB源码落地

简介:《视频分析算法60讲》配套PDF教程与MATLAB实现源码,面向图像与视频处理学习者、计算机视觉研究者及算法工程师,可用于系统掌握视频分析各环节核心算法。内容从去噪、增强、帧间插值等预处理展开,深入讲解光流法、卡尔曼滤波器…

2026/10/11 13:58:14 阅读更多 →
校园互助平台Java毕设:全栈开发与部署避坑指南

校园互助平台Java毕设:全栈开发与部署避坑指南

1. 选题与整体方案设计:这个题目为什么值得做 每年到毕设季,Java方向的同学问得最多的就是“做什么题能保证过且工作量合适”。校园互助平台这个题目,我的评价是:看着不起眼,实际是个标准的“小闭环、深纵向”题目&…

2026/10/11 13:58:14 阅读更多 →
棉花病害目标检测实战:YOLO格式数据训练与避坑指南

棉花病害目标检测实战:YOLO格式数据训练与避坑指南

简介:这份数据集聚焦棉花主要病害图像的目标检测任务,已标注约4,600张现场图像,采用YOLO标注格式,类别涵盖枯萎病、卷曲、灰霉、健康、叶斑病等6类,可直接用于YOLOv5等模型训练与农业病害识别研究。包体共2000个文件&a…

2026/10/11 13:58:14 阅读更多 →
广工操作系统实验:Linux内核模块实操指南

广工操作系统实验:Linux内核模块实操指南

简介:本资源是广东工业大学操作系统课程配套的完整实验实践包,面向计算机专业本科生及操作系统初学者,聚焦进程调度、作业调度、主存管理与文件系统四大核心模块,助力理解内核级机制并提升系统编程能力。压缩包共12个文件&#xf…

2026/10/11 13:57:13 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →