CodeGym
促销
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题

课时

  • 评论
  • 关于我们
开始
开始学习
立即开始学习
  • 我的进度
  • 课程
  • 任务地图
  • 课程
  • equals 与 hashCode 的契约

    JAVA 25 SELF
    等级 29,课时 0
    在本讲我们将讲解如何在 Java 中正确地确定对象相等:运算符 == 比较的是引用(地址),而方法 equals 比较的是内容;为什么 equals/ hashCode 契约对于 HashSet 和 HashMap 这类集合至关重要,以及它与 Comparable 的 compareTo 有何关联。循序渐进的示例、最佳实践以及常见错误解析将帮助你在使用哈希表和可排序集合时避开陷阱。
    可用
  • Objects 类:equals、hashCode、hash 方法

    JAVA 25 SELF
    等级 29,课时 1
    在本讲中,我们拆解“瑞士军刀” java.util.Objects:如何用 Objects.equals 安全比较,使用 Objects.hash 简洁地计算哈希,通过 Objects.compare 将比较委托给比较器,用 Objects.requireNonNull 保证非 null 的值,并在流中使用 Objects.isNull/ Objects.nonNull。我们将展示 equals/ hashCode/ compareTo 的正确实现,剖析实践案例以及在使用 HashMap/ HashSet 时的典型错误。
    可用
  • Comparable 接口:实现与 compareTo

    JAVA 25 SELF
    等级 29,课时 2
    在本讲中,我们通过 Comparable 接口与 compareTo 方法来解析 Java 中对象的“自然顺序”:它的用途、如何正确实现、集合排序如何工作( Collections.sort 与 List.sort)、按多个字段比较、处理 null 值以及与 equals/ hashCode 的一致性。我们还将讨论最佳实践、常见错误,并用 Person 类给出实用示例。
    可用
  • Comparator 接口:创建与使用

    JAVA 25 SELF
    等级 29,课时 3
    在本讲座中,我们讨论何时使用 Comparator 而不是 Comparable, compare(T o1, T o2) 方法的语法与契约;通过 Collections.sort 和 List.sort 对列表进行排序的实践;如何将比较器作为独立类创建、以及通过匿名类和 Lambda 表达式创建。我们还将讲解多级排序、处理 null 值、使用 Collections.binarySearch 进行查找、用 reversed() 反转顺序,以及最佳实践与常见错误(例如为什么应使用 Integer.compare 而非 a - b)。
    可用
  • 在 Java 集合中查找与排序元素

    JAVA 25 SELF
    等级 29,课时 4
    本讲将讲解集合的实用操作:使用 contains、 indexOf、 lastIndexOf 查找元素;通过 for 循环与 break 按条件查找;使用 Collections 求最小值与最大值。我们还会练习用 Collections.sort 与 List.sort 排序列表,使用 Comparator,对 Map 的键值对排序,以及按对象字段排序。最后讨论常见错误:由 List.of 创建的不可变列表、直接尝试排序 Set/ Map、以及不正确的比较器。
    可用
  • Stream API 入门:为什么需要流

    JAVA 25 SELF
    等级 30,课时 0
    在本讲中,我们将讲解为何以命令式方式处理集合会迅速堆满样板代码,以及 Stream API 如何让代码转向声明式风格:由 filter、 map、 collect 等操作组成的链式调用,简单的组合、更少的错误,以及通过 parallelStream() 实现的轻量并行。我们还会展示适用场景、发展历史以及应当避免的常见错误。
    可用
  • Stream API 基础操作:map、filter、collect

    JAVA 25 SELF
    等级 30,课时 1
    逐步认识 Stream API 的基础操作:如何从集合和数组获取流( stream()、 Arrays.stream、 Stream.of),中间操作( filter、 map、 distinct)与终端操作( collect、 forEach、 count)有何区别,以及如何使用 Collectors( toList、 toSet、 joining)来收集结果。实践示例、迷你练习与常见错误章节将帮助你快速掌握流水线式数据处理。
    可用
  • Stream API 的子集操作: distinct、 limit、 skip

    JAVA 25 SELF
    等级 30,课时 2
    在本讲中,我们将讲解用于处理数据子集的三项 Stream API 核心操作: distinct(删除重复项)、 limit(限制元素数量)和 skip(跳过前若干元素)。你将会看到它们在字符串与对象集合上的效果, equals/ hashCode 的实现如何影响 distinct 的结果,如何组合这些操作来做分页与 Top‑N 选取,以及常见的错误有哪些。
    可用
  • forEach、peek 方法:副作用

    JAVA 25 SELF
    等级 30,课时 3
    在本讲中,我们将解析与副作用相关的流操作:终端操作 forEach 和中间操作 peek。我们会弄清楚何时以及为何使用它们、它们有何不同、为什么在 forEach 之后流会“关闭”,而 peek 不会修改数据,并且只有在存在终端操作时才会执行。我们将展示实践示例,剖析不明显的点和典型错误(包括 ConcurrentModificationException,以及把 collect 错误替换为 forEach 的情况)。
    可用
  • 通过 Stream 转换集合

    JAVA 25 SELF
    等级 30,课时 4
    使用 Stream API 转换集合的实用指南: List ↔ Set 的相互转换,通过 Collectors.toMap() 构建映射(包含重复项处理)、使用 Collectors.joining() 拼接字符串,解析终端操作与中间操作( forEach、 collect、 count、 anyMatch 等)。内含清晰示例、解释与常见错误。
    可用
  • Stream API 中的 sum、count、average、max、min 方法

    JAVA 25 SELF
    等级 31,课时 0
    在本讲中,我们解析 Stream API 的聚合操作:如何通过 count() 统计数量,如何在原始类型流( IntStream、 LongStream、 DoubleStream)中使用 sum()、 average() 计算总和与平均值,以及如何通过 min()/ max() 查找极值。我们还将单独讨论容器 Optional、 OptionalInt、 OptionalLong、 OptionalDouble 的用法,以及正确的取值方式: orElse(...)、 ifPresent(...)、 orElseThrow()。同时学习使用收集器 Collectors.summingInt、 Collectors.averagingInt、 Collectors.maxBy/ minBy,并将它们与 groupingBy 结合。最后——解析常见错误与注意事项。
    可用
  • reduce 和 collect 方法:数据聚合

    JAVA 25 SELF
    等级 31,课时 1
    解析流的终止操作:通用归约 reduce() 与强大的收集器 collect()。理解带有 identity、 accumulator 和 combiner 的签名,学习使用 Collectors 中的现成收集器( toList()、 toMap()、 joining()、 groupingBy())来收集数据,并看看何时应优先使用 collect() 而不是 reduce()。还将单独讨论 Optional 的使用、 toMap() 中的重复键处理,以及并行流的细节。
    可用
  • 1
  • ...
  • 13
  • 14
  • 15
  • 16
  • 17
  • ...
  • 30
Learn
  • 注册
  • Java 课程
  • 任务帮助
  • 定价
  • Java 语法
社区
  • 用户
  • 文章
  • 论坛
  • 聊天
  • 成功故事
  • 动态
  • 联盟计划
Company
  • 关于我们
  • 联系方式
  • 评价
  • 媒体中心
  • CodeGym for EDU
  • 常见问题
  • 支持
CodeGymCodeGym 是一个从零开始学习 Java 编程的在线课程。该课程是初学者掌握 Java 的完美方式。它包含 1200+ 个带即时验证的任务,以及必要的 Java 基础理论。为了帮助你在学习中取得成功,我们实现了一系列激励功能:测验、编码项目、关于高效学习的内容,以及 Java 开发者职业相关内容。
关注我们
界面语言
English Deutsch Español हिन्दी Français Português Polski বাংলা
简体中文
मराठी தமிழ் Italiano Bahasa Indonesia 繁體中文 Nederlands 日本語 한국어 Bulgarian Danish Hungarian Basa Jawa Malay Norwegian Romanian Swedish Telugu Thai Українська Filipino Turkish Azərbaycan Русский Vietnamese
“程序员是培养出来的,不是天生的” © 2026 CodeGym
MastercardVisa
“程序员是培养出来的,不是天生的” © 2026 CodeGym