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

jdk8 list 删除500行开始的数据

在 JDK 8 中,要从List中删除从第 500 行开始的所有数据(即删除索引 >= 499 的所有元素),有多种方式。根据你的具体需求,我整理了几种常用方法:


一、删除从第 500 行开始到末尾的所有数据

方法一:使用subList().clear()(推荐,最高效)

java

List<String> list = new ArrayList<>(yourData); int startIndex = 499; // 第 500 行的索引(从 0 开始) if (list.size() > startIndex) { list.subList(startIndex, list.size()).clear(); }

原理subList()返回的是原 List 的视图,clear()会直接删除该视图范围内的所有元素,性能最好,O(n)复杂度,不会产生新 List。


方法二:使用List.subList()+ 重新赋值

java

List<String> list = new ArrayList<>(yourData); int startIndex = 499; if (list.size() > startIndex) { list = list.subList(0, startIndex); }

注意subList(0, startIndex)返回的是原 List 的视图,如果后续还需要修改原 List,建议重新new ArrayList<>(list)包装一下。


方法三:使用removeRange()(需要继承 ArrayList)

java

public class CustomList<E> extends ArrayList<E> { public void removeRange(int fromIndex, int toIndex) { super.removeRange(fromIndex, toIndex); } } CustomList<String> list = new CustomList<>(yourData); list.removeRange(499, list.size());

JDK 8 中ArrayList.removeRange()protected方法,需要继承才能调用。


方法四:使用 Stream(Java 8)

java

List<String> list = new ArrayList<>(yourData); int startIndex = 499; if (list.size() > startIndex) { list = list.stream() .limit(startIndex) .collect(Collectors.toList()); }

会产生新的 List,适合对原 List 影响较小的场景。


方法五:使用Iterator手动删除

java

List<String> list = new ArrayList<>(yourData); Iterator<String> iterator = list.iterator(); int index = 0; while (iterator.hasNext()) { iterator.next(); if (index >= 499) { iterator.remove(); } index++; }

适合需要条件判断删除的场景,但性能不如subList().clear()


方法六:使用removeIf()(按条件删除)

java

List<String> list = new ArrayList<>(yourData); AtomicInteger index = new AtomicInteger(0); list.removeIf(e -> index.getAndIncrement() >= 499);

适合 JDK 8,但每次删除都要遍历,性能略低于subList().clear()


二、性能对比

方法时间复杂度是否产生新 List推荐度
subList().clear()O(n)⭐⭐⭐⭐⭐
subList()重新赋值O(1)(视图)❌(视图)⭐⭐⭐
Stream.limit().collect()O(n)⭐⭐⭐
IteratorO(n)⭐⭐
removeIf()O(n)⭐⭐

三、最佳实践推荐

如果你的业务场景是删除从第 500 行开始到末尾的所有数据,推荐使用:

java

if (list.size() > 499) { list.subList(499, list.size()).clear(); }

四、注意事项

场景说明
线程安全以上方法均不是线程安全的,多线程环境下需要使用CopyOnWriteArrayList或加锁
空指针确保list不为null
索引越界确保startIndex < list.size(),否则subList()会抛出IndexOutOfBoundsException
视图修改subList()返回的视图不能跨越原 List 的结构修改(如addremove),但clear()可以

五、示例代码

java

import java.util.ArrayList; import java.util.List; public class Demo { public static void main(String[] args) { // 模拟数据:1000 条 List<String> list = new ArrayList<>(); for (int i = 0; i < 1000; i++) { list.add("data_" + i); } // 删除从第 500 行开始的数据(索引 >= 499) int startIndex = 499; if (list.size() > startIndex) { list.subList(startIndex, list.size()).clear(); } System.out.println("剩余条数: " + list.size()); // 499 System.out.println("最后一条: " + list.get(list.size() - 1)); // data_498 } }

六、总结

  • 最推荐list.subList(499, list.size()).clear(),简洁高效

  • 次推荐list = list.stream().limit(499).collect(Collectors.toList()),如果不想修改原 List

  • 避免:使用for循环倒序删除,容易出错且性能差

如果你的业务场景还有其他特殊需求(如按条件删除、保留前 N 行等),可以告诉我具体需求,我再帮你调整。

http://www.jsqmd.com/news/1248061/

相关文章:

  • 大模型微调成本分析:LoRA、QLoRA与全参数微调的经济性对比与企业落地策略
  • YOLO-AR算法:水下目标检测的创新与实践
  • 4条核心标准看懂:什么是合规GEO,全流程不踩监管红线
  • 实测5款免费AI工具做电商促销海报,这家分层编辑超实用
  • 【毕业设计】基于 Django 框架的文章分类展示博客系统简约式个人博客发布与运维管理系统 (源码+文档+远程调试,全bao定制等)
  • 什么是轮换代理?设置、优点、缺点
  • C++26模块与UE5整合实战:编译优化与工程实践指南
  • PYTHON+AI LLM DAY ONE HUNDRED AND FOURTEEN
  • 深入解析Cortex-M3系统控制与异常处理寄存器:从原理到实战调试
  • 中小B2B贸易型企业适用的ERP系统,金畅逍和其它产品的区别是什么?
  • 深度学习调参新方法:参数体检法原理与实践
  • 武侠游戏开发:次世代技术与文化传承的融合
  • 2026年7月福州萧邦 售后服务网络更新优化 全国60+门店地址及电话汇总 - 萧邦官方售后服务中心
  • 插入排序 Java 实现 + 思路详解
  • Qwen3.7 Function Calling实战教程:从零搭建AI智能体(附可直接运行代码)
  • PCDN技术演进与短视频流畅播放的奥秘
  • 儿童口腔健康教育创新实践与科技应用
  • Windows Hello 模组成像科普:抗逆光与抗伪装底层技术原理
  • 【毕业设计】 基于 Django 的二手商品买卖交易系统校园闲置物品流转交易平台设计(源码+文档+远程调试,全bao定制等)
  • 张宗杰与他的合众昌商会:坚守抱团共赢初心,打造数字化时代的创业大家庭
  • AI写作工具对比:千笔与灵感AI的学术应用指南
  • 答辩PPT美化禁忌❌90%同学都在乱改!学术PPT高分美化技巧
  • 企业级分布式中间件‘龙虾‘本地部署指南
  • AI Agent技术架构解析:从LLM到多智能体协作
  • AI写实人像生成技术:挑战与解决方案
  • 2026年四川食品真空袋批发选择指南:为您的生意匹配供应商 - 装修教育财税推荐2026
  • 大模型全链路开发实战:从训练到部署的工程指南
  • 开会录音怎么快速整理?科会通与主流工具功能解析
  • AI人才争夺战下程序员转型指南
  • Grok CLI更新解析:AI编程助手如何重塑开发者工作流