Bohr-L Bohr-L
首页
技术
常见面试题
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

刘博

I'm a slow walker, But I never walk backwards.
首页
技术
常见面试题
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 数据处理与存储类

  • Spring 生态类

  • 缓存问题类

  • 多线程类

  • JVM 类

  • MySQL 类

  • Java 8 + 特性类

    • 使用 Java 8 的优点是什么?
    • 集合与流有何不同?
      • 什么是 Lambda 表达式?
      • 解释 Predicate 和 Consumer 函数式接口
      • peek () 方法在 Java 8 中的作用?
      • 什么是函数式接口?
      • 接口中的静态方法有什么作用?
      • skip (long) 和 limit (long) 的区别?
      • 抽象类和接口的异同?
      • overload 与 override 的区别?
      • HashMap 在 Java 8 中的变化?
      • HashMap、LinkedHashMap、Hashtable、ConcurrentHashMap 的区别?
      • Lambda 参数列表与箭头运算符的作用?
      • sleep () 和 wait () 的区别?
      • throw 与 throws 的区别?
      • final、finally、finalize 的区别?
      • Collection 与 Collections 的区别
      • ArrayList、LinkedList、Vector 的区别?
    • 其他技术类

    • 常见面试题
    • Java 8 + 特性类
    刘博
    2025-12-29
    目录

    集合与流有何不同?

    集合(Collection)和流(Stream)是 Java 中处理数据的两种核心方式,核心差异在于 “数据存储、处理方式、迭代特性”,具体对比如下:

    对比维度 集合(Collection) 流(Stream)
    核心定位 数据的存储容器(如 List 存储有序数据、Set 存储唯一数据) 数据的处理管道(无存储能力,仅处理集合 / 数组等数据源)
    处理方式 外部迭代(需手动遍历,如for循环、iterator) 内部迭代(Stream 自动遍历,无需手动控制)
    数据状态 可修改(如list.add()、map.put()) 不可修改(仅读取数据源,不改变原始数据)
    操作特性 中间操作与终端操作无区分,单次遍历仅执行单一操作 分为中间操作(如filter、map,惰性执行)和终端操作(如forEach、collect,触发执行)
    迭代次数 可多次遍历(如多次for循环遍历同一 List) 仅可遍历一次(遍历后 Stream 关闭,需重新创建)
    适用场景 需频繁访问、修改数据(如新增 / 删除元素) 需对数据进行多步处理(过滤、排序、聚合)

    # 示例对比

    • 集合处理(外部迭代,多步操作需多次遍历):

      List<Integer> list = Arrays.asList(1,2,3,4,5);
      // 步骤1:过滤偶数(第一次遍历)
      List<Integer> evenList = new ArrayList<>();
      for (int num : list) {
          if (num % 2 == 0) evenList.add(num);
      }
      // 步骤2:平方(第二次遍历)
      List<Integer> squareList = new ArrayList<>();
      for (int num : evenList) {
          squareList.add(num * num);
      }
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
    • 流处理(内部迭代,多步操作单次遍历):

      List<Integer> list = Arrays.asList(1,2,3,4,5);
      List<Integer> squareList = list.stream()
          .filter(num -> num % 2 == 0) // 中间操作(惰性)
          .map(num -> num * num)       // 中间操作(惰性)
          .collect(Collectors.toList()); // 终端操作(触发执行)
      
      1
      2
      3
      4
      5

    上次更新: 12/30/2025
    使用 Java 8 的优点是什么?
    什么是 Lambda 表达式?

    ← 使用 Java 8 的优点是什么? 什么是 Lambda 表达式?→

    最近更新
    01
    CPU 使用率较高排查和解决
    12-29
    02
    JVM OOM 问题如何排查和解决
    12-29
    03
    接口防刷怎么实现?
    12-29
    更多文章>
    Theme by Vdoing | Copyright © 2025-2026 Bohr-L's note
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式