Java基础快速入门:HashSet深入解析

【Java集合框架】13——HashSet 类 HashSet 阅读详情

本文纲要

  1. HashSet 基本使用
  2. 哈希值概念及计算方式
  3. JDK7 中 HashSet 底层原理(数组 + 链表)
  4. JDK8 底层优化(数组 + 链表 + 红黑树)
  5. HashSet 存储自定义对象练习
  6. 小结:Set 集合使用总结

HashSet 基本使用

HashSet 是 Set 接口的典型实现类,它底层基于哈希表结构存储元素。在使用层面,HashSet 具备 Set 集合的三个核心特点:

  • 无序:存储顺序和取出顺序不一定一致。
  • 无索引:不能使用带索引的方式(如普通 for 循环)操作集合。
  • 元素唯一:集合中不能包含重复元素。

因为 HashSet 没有提供带索引的方法,所以遍历时只能使用 迭代器 或 增强 for 循环。

项目结构

MySet/
└── src/
    └── com/wb/
        ├── myhashset/
        │   ├── Student.java 
        │   ├── HashSetDemo1.java 
        │   └── HashSetDemo2.java 
        └── hashsettest/
            ├── Student.java 
            └── HashSetTest1.java 

基本示例:存储字符串并遍历

package com.wb.myhashset;
 
import java.util.HashSet;
import java.util.Iterator;
 
/*
添加字符串并进行遍历 
 */
public class HashSetDemo1 {
    public static void main(String[] args) {
        HashSet<String> hs = new HashSet<>();
 
        hs.add("hello");
        hs.add("world");
        hs.add("java");
        hs.add("java");
        hs.add("java");
        hs.add("java");
        hs.add("java");
        hs.add("java");
 
        Iterator<String> it = hs.iterator();
        while(it.hasNext()){
            String s = it.next();
            System.out.println(s);
        }
        System.out.println("=============================");
 
        for (String s : hs) {
            System.out.println(s);
        }
    }
}

运行结果分析:

  • 打印结果与添加顺序不同,验证了 无序 特点
  • 通过 ctrl + B 查看 HashSet 源码结构,可以看到没有类似 get(int index) 或 add(int index, E element) 这样的方法,验证了 无索引。
  • java 虽然被多次添加,但实际只存储了一次,验证了 元素唯一。

哈希值概念及计算方式

1 ) 哈希值(哈希码) 是 JDK 根据对象的地址值或内部属性值计算出来的一个 int 类型整数。哈希值是哈希表结构的核心,HashSet 的去重和存取都依赖于它。

在 Object 类中定义了获取哈希值的方法:

public native int hashCode();

默认计算方式:Object 中的 hashCode() 方法根据对象的地址值计算哈希值。
特点:

  • 同一个对象多次调用 hashCode(),返回的哈希值相同。
  • 不同对象(默认情况下)的哈希值不同(根据地址值,通常不同)。

2 ) 验证默认哈希值

package com.wb.myhashset;
 
/*
计算哈希值 
 */
public class HashSetDemo2 {
    public static void main(String[] args) {
        Student s1 = new Student("xiaozhi",23);
        Student s2 = new Student("xiaomei",22);
 
        //因为在Object类中,是根据对象的地址值计算出来的哈希值。
        System.out.println(s1.hashCode());//1060830840 
        System.out.println(s1.hashCode());//1060830840 
 
        System.out.println(s2.hashCode());//2137211482 
    }
}

输出结果:

  • s1 两次调用结果一致(1060830840),因为地址值未变。
  • s2 的哈希值不同(2137211482),因为它是一个不同的对象,地址值不同。

3 ) 重写 hashCode() 方法

实际开发中,我们通常需要根据对象的属性值来判断两个对象是否“相等”,此时就必须重写 hashCode() 和 equals() 方法,让它们基于属性值计算和比较。

在 Student 类中,通过 Alt + Insert → equals() and hashCode() 可以快速生成(选择 IntelliJ Default 模板):

package com.wb.myhashset;
 
public class Student {
    private String name;
    private int age;
 
    public Student() {}
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
 
    // getter / setter 略...
 
    @Override 
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
 
        Student student = (Student) o;
 
        if (age != student.age) return false;
        return name != null ? name.equals(student.name) : student.name == null;
    }
 
    // 重写 hashCode,根据属性值计算哈希值,与地址值无关 
    @Override 
    public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + age;
        return result;
    }
 
    @Override 
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

重写后的特点:

  • 哈希值由 name 和 age 两个属性共同计算得出
  • 如果两个对象的属性值完全相同,则它们的 hashCode() 返回相同的值

JDK7 中 HashSet 底层原理(数组 + 链表)

在 JDK7(以及更早版本,不包括 JDK8)中,HashSet 底层使用 哈希表结构,具体实现为 数组 + 链表

1 ) 底层数据结构

当创建一个 HashSet 对象时,底层会初始化一个默认长度为 16、默认加载因子为 0.75 的数组,数组名称为 table。
数组中每个索引位置(position)初始值为 null。

table 数组(长度 16)

索引0: null

索引1: null

索引2: null

索引3: null

索引4: null

索引5: null

索引6: null

索引7: null

索引8: null

索引9: null

索引10: null

索引11: null

索引12: null

索引13: null

索引14: null

索引15: null

2 ) 元素添加流程

元素添加的核心步骤:计算哈希值 → 计算应存入的索引 → 判断该位置是否有元素 → 决定是否添加。

是

否

有

没有

计算元素的 hashCode

hashCode 与数组长度计算应存入索引

该索引处元素是否为 null?

直接存入数组该位置

依次比较链表中每个元素 equals

是否有属性值相同?

不存入集合

新元素存入数组, 旧元素挂在新元素下, 形成链表

详细过程图解:

假设四次添加元素的哈希值经过计算后索引位置均为 4

  • 第一次添加:索引 4 为 null,直接存入。

数组 table

索引4

元素1

  • 第二次添加(索引仍为4):索引 4 不为空,调用 equals 比较,属性值不同,新元素存入数组,老元素挂在其下形成链表。

数组 table

索引4

新元素2

老元素1

  • 第三次添加(索引仍为4):新元素与链表上的元素逐个比较,属性值均不同,再次形成链表。

数组 table

索引4

新元素3

元素2

元素1

  • 第四次添加(索引仍为4):比较时发现与链表中某个元素属性值相同,则不存入,链表保持不变。

3 ) 加载因子与扩容

当数组中的元素数量达到 容量 × 加载因子(16 × 0.75 = 12) 时,数组会扩容为原来的 两倍(即 32)。加载因子决定了哈希表扩容的时机,平衡了空间与时间的矛盾。

4 ) JDK7 原理总结

数据结构:数组 + 链表。
默认数组长度:16,加载因子:0.75。
存入流程:先根据哈希值计算索引位置;若为 null 直接存;否则遍历链表通过 equals 比较,全不相同才会添加;有一个相同则不存。
扩容:元素数达到 16 × 0.75 = 12 时,数组扩容至 32。

JDK8 底层优化(数组 + 链表 + 红黑树)

JDK7 中,随着元素增多,挂载在某个索引下的链表可能变得很长。如果链表长度达到几百甚至上千,添加和查询时都需要逐一比较,性能严重下降。

1 ) 优化方案:引入红黑树

从 JDK8 开始,当一个索引位置上的链表长度 ≥ 8 时,链表会自动转换为红黑树。这样数组的每个索引上挂载的不再只是链表,还可能是红黑树。

数组 table

索引4

红黑树根节点

较小值

较大值

...

...

...

...

2 ) 存储流程变化

基本流程没有变化:仍然是 计算哈希值 → 计算索引 → 判断 null → 比较。
但比较时根据结构不同采用不同策略:

是

否

链表

红黑树

有

无

有

无

计算 hashCode

计算索引

索引处元素是否为 null?

直接存入

索引下结构类型

依次 equals 比较链表元素

按红黑树规则比较: 小向左比, 大向右比, 相等不存

有相同?

不存

存入数组, 形成链表

有相同?

存入, 加入红黑树

优势:在红黑树中比较时,无需遍历全部节点,通过大小比较即可快速定位,极大提高查询和插入性能。

3 ) JDK8 原理总结

数据结构:数组 + 链表 + 红黑树。
当链表长度 ≥ 8 时,自动转换为红黑树。
存储流程与 JDK7 核心一致,但在非空索引处会区分链表比较与红黑树比较。

HashSet 存储自定义对象练习

需求:创建一个存储多个学生对象的 HashSet 集合并进行遍历。要求:学生对象的成员变量值相同,就认为是同一个对象(即集合中不得出现同名同年龄的重复学生)。

1 ) 未重写 hashCode / equals 的情况

如果不重写 hashCode() 和 equals(),默认采用 Object 中的实现(基于地址值)。此时两个属性值完全相同的对象,哈希值不同,计算出的索引也不同,都能存入集合,无法去重。

数组 table

索引 x

索引 y

s1: 小黑,23

s2: 小黑,23

2 ) 正确做法:重写 hashCode() 和 equals()

重写后,属性值相同的对象哈希值相同,索引相同,再通过 equals 比较发现属性值也一样,于是第二个对象不会被添加。

数组 table

索引 z

s1: 小黑,23

s2: 小黑,23
(不存入)

3 ) 完整代码示例

// Student.java (与前面重写方法一致)
package com.wb.hashsettest;
 
public class Student {
    private String name;
    private int age;
 
    public Student() {}
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
 
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
 
    @Override 
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        if (age != student.age) return false;
        return name != null ? name.equals(student.name) : student.name == null;
    }
 
    @Override 
    public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + age;
        return result;
    }
 
    @Override 
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
package com.wb.hashsettest;
 
import java.util.HashSet;
 
/*
创建一个存储学生对象的集合,存储多个学生对象,使用程序实现在控制台遍历该集合 
要求:学生对象的成员变量值相同,我们就认为是同一个对象 

结论:
如果HashSet集合要存储自定义对象,那么必须重写hashCode和equals方法。
 */
public class HashSetTest1 {
    public static void main(String[] args) {
        HashSet<Student> hs = new HashSet<>();
 
        Student s1 = new Student("xiaohei",23);
        Student s2 = new Student("xiaohei",23);
        Student s3 = new Student("xiaomei",22);
 
        hs.add(s1);
        hs.add(s2);
        hs.add(s3);
 
        for (Student student : hs) {
            System.out.println(student);
        }
    }
}

运行结果:只有两个学生对象被打印出来(xiaohei 和 xiaomei),重复的 xiaohei 没有被添加。

结论:
如果 HashSet 要存储自定义对象,必须重写 hashCode() 和 equals() 方法,才能实现基于属性值的去重。对于 String、Integer 等 JDK 内置类型,这些方法已经被重写好了,直接使用即可

小结:Set 集合使用总结

Set 集合的整体特点是无序、无索引、不可重复
两个核心实现类 HashSet 和 TreeSet 的对比如下:

实现类底层结构去重机制排序能力使用注意
HashSet哈希表(JDK7: 数组+链表;JDK8: 数组+链表+红黑树)依赖 hashCode() 和 equals()不保证顺序存储自定义对象必须重写 hashCode() 和 equals()
TreeSet红黑树根据比较规则(比较器或自然排序)去重可以对元素进行排序必须指定排序规则:自然排序(Comparable) 或 比较器排序(Comparator)

核心要点:

  • HashSet 基于哈希表,通过 hashCode() 定位索引,equals() 比较内容;JDK8 引入红黑树解决长链表性能问题
  • TreeSet 基于红黑树,不仅能去重,还能自动排序
  • 两套集合各自有适合的场景:需要快速存取去重时用 HashSet;需要排序输出时用 TreeSet

掌握这些基本特性和底层原理,可以让我们在使用 Set 集合时更加得心应手。

HashSet 的底层原理(简单易懂) HashSet 的底层原理基于哈希表和 HashMap,通过哈希值来快速定位元素的存储位置,并使用链地址法解决哈希冲突。了解 HashSet 的底层原理,有助于我们在实际编程中更好地使用它,提高程序的性能。 阅读详情

相关推荐

深入解析HashSet的实现原理与核心机制

在Java集合框架中,HashSet作为一种高效的Set实现,广泛应用于需要快速查找、去重等场景。本文将全面剖析HashSet的设计思想、底层实现、核心机制以及性能特点,帮助开发者深入理解其工作原理并正确使用。

vvilkin的学习备忘 1570

HashSet详解

HashSet也是一个使用频率非常高的一个集合容器,最大的特点是存储的元素是没有重复的,而且是无序的,那么对于HashSet是如何判断原始是否重复、底层又是怎么实现的,你了解吗?HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。集合中的元素不重复允许有null值是无序的,即不会记录插入的顺序不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的实现了Set接口,表名是一个去重集合容器。...

ch98000的博客 1万+

Java HashSet 深入解析

HashSet 是 Java 集合框架中的一个重要类,具有高效的查找和删除操作。本文深入解析了 HashSet 的原理、用法以及注意事项。在实际应用中,了解 HashSet 的内部机制和性能特点,有助于我们更好地使用它。

lsx202406的博客 302

Java集合(四)Set的常用实现类

Set、HashSet(无序Set)、LinkedHashSet(有序Set)、TreeSet(排序Set)

HK的博客 5897

离散系统傅里叶变换的常用结论证明

本文介绍了离散系统傅里叶变换的三个重要结论:1)时域卷积对应频域相乘(公式1-3);2)时域相乘对应频域卷积(公式4-6);3)帕塞瓦尔定理(公式7)及其广义形式,证明信号能量在变换域保持不变。文末提供了MATLAB卷积运算演示程序,通过动画展示离散信号卷积过程(翻转、平移、相乘、累加),并以方波信号为例给出运行结果图。该程序直观呈现了卷积运算的步骤与结果。

newtton的博客 1306

Zabbix7.0实践:专线线路监控场景1

本文介绍了专线互联线路远程Ping监控的实现方案。针对运营商中间设备导致端口状态无法真实反映线路通断的问题,提出通过脚本执行端到端Ping检测的方案。具体实现包括:1)使用Expect脚本登录设备执行Ping测试并格式化结果;2)通过Shell脚本处理线路信息并生成JSON格式数据;3)配置Zabbix监控系统,创建自动发现规则和监控项原型,实现线路状态的自动监控。该方案适用于专线数量不多但重要的场景,能够有效检测中间有运营商设备的专线线路通断状态,最终在Zabbix中实现可视化的告警展示。

2301_80016499的博客 781

【重生之Java零基础快速入门】

Java是一种面向对象的编程语言,由Sun Microsystems于1995年发布。希望这份详细的教程能帮助你快速入门Java编程!如果有任何问题,欢迎随时提问!

z17826856787的博客 1769

WPS文档编辑时空行问题解决方案

本文详细介绍了如何解决WPS文档编辑时空行的问题,从问题描述与分析、解决方案详解到操作示例与注意事项等多个方面进行了全面阐述。通过本文的介绍和指导,用户可以快速定位问题根源并采取有效措施进行解决,从而提升文档编辑效率和美观性。未来,随着WPS软件的不断升级和优化,相信会有更多便捷高效的功能被添加到软件中。同时,用户也需要不断学习和探索新的操作技巧和方法,以适应不断变化的办公需求。希望本文能够为广大WPS用户提供有益的参考和帮助,共同推动办公效率的提升和发展。

mmoo_python的博客 1245

深入解析Java:HashSet是如何保证元素不重复的

在Java的集合框架中,HashSet是我们日常开发中最常用的去重集合工具,它能高效存储唯一元素,杜绝重复数据插入。但很多开发者只知其然,不知其所以然:HashSet底层究竟是如何实现去重的?为什么自定义对象存入HashSet必须重写hashCode()和equals()方法?本文将从源码剖析、底层原理、执行流程、流程图四个维度,深度拆解HashSet保证元素不重复的核心逻辑,彻底吃透这个经典面试高频考点。HashSet 是 Java 集合框架的成员,实现了Set接口,核心特性不允许存储重复元素;

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1724

Dify与钉钉轻量级集成:打造企业内部AI助手

企业级聊天机器人开发已成为提升内部协同效率的关键技术。其核心原理在于通过API集成,将AI模型能力与即时通讯平台无缝连接,实现智能问答与自动化流程。从技术价值看,这种集成方案能够显著降低AI应用落地门槛,将前沿的AI能力快速转化为实际生产力。在应用场景上,它尤其适用于HR答疑、IT技术支持、产品知识库等高频内部服务场景。本文聚焦于Dify与钉钉的轻量级集成方案,通过Stream模式实现高效消息处理,并利用AI卡片支持流式输出,为企业构建体验自然的智能机器人提供了完整实践路径。该方案特别强调配置简化与部署便捷

weixin_27155667的博客 698

EAST算法(Efficient and Accuracy Scene Text))

1.EAST模型简介 本文介绍的文本检测模型EAST,便简化了中间的过程步骤,直接实现端到端文本检测,优雅简洁,检测的准确性和速度都有了进一步的提升。如下图: 其中,(a)、(b)、(c)、(d)是几种常见的文本检测过程,典型的检测过程包括候选框提取、候选框过滤、bouding box回归、候选框合并等阶段,中间过程比较冗长。而(e)即是本文介绍的EAST模型检测过程,从上图可看出,其过程简化为只有FCN阶段(全卷积网络)、NMS阶段(非极大抑制),中间过程大大缩减,而且输出结果支持文本行、单词的多个角度

博客 9579

SpringBoot基础(一):快速入门

SpringBoot可以简单快速地创建一个独立的、生产级别的Spring应用(说明:SpringBoot底层是Spring)大多数SpringBoot应用只需要编写少量配置即可快速整合Spring平台以及第三方技术SpringBoot特性快速创建独立Spring应用以前的SSM框架,需要导包、写配置、启动运行直接嵌入Tomcat、Jetty or Undertow,不再需要部署war包提供可选的场景启动器(starter),简化应用整合。

从基础到源码解析的学习记录 4026

【electron】- 从零到一:在electron-vite项目中集成better-sqlite3的工程化实践

本文详细介绍了在electron-vite项目中集成better-sqlite3数据库的完整工程化实践。针对原生模块的编译挑战,提供了从环境配置、路径规划、服务封装到IPC通信的解决方案,并重点解决了开发与生产环境的数据库路径分离及打包部署等核心问题,帮助开发者构建稳定高效的Electron桌面应用数据层。

weixin_29306571的博客 205

从入门到精通:Java 基础语法全解析,快速掌握核心编程技能

Java 是一门极具影响力的编程语言,它以强大的跨平台性、丰富的生态系统和广泛的应用领域在软件开发中占据重要地位。不论是企业级应用、移动端开发,还是大数据处理,Java 都扮演着不可替代的角色。学习 Java 的第一步便是掌握其基础语法,这不仅是深入学习高级特性(如面向对象、多线程等)的前提,也是理解代码背后逻辑的关键。本篇文章将带领读者逐步解析 Java 的核心基础语法,从基本规则到代码规范,结合实际案例帮助读者快速入门,打下扎实的编程基础。变量是用于存储数据的容器。

吴师兄大模型的博客 1708

从零到一:基于Rocky Linux 9的Kubernetes高可用集群部署实战

本文提供了一份基于Rocky Linux 9操作系统,从零开始部署Kubernetes高可用集群的完整实战指南。详细讲解了包括系统初始化、容器运行时配置、使用kubeadm工具进行集群初始化、节点加入以及Calico网络插件安装在内的核心步骤,并针对国内网络环境提供了镜像加速等优化方案,旨在帮助读者构建一个稳定可靠的生产级K8s环境。

weixin_29197835的博客 140

把 ABAP Smart Form 输出变成可直接下载的 PDF 二进制:OTF 到 XSTRING 的一条龙实践

SAP Smart Forms 生成 PDF 的实用方案:通过 OTF 格式转换实现高效输出。Smart Forms 本身不直接生成 PDF,而是输出 OTF 格式数据,需通过 CONVERT_OTF 函数转换。本文提供两种实现路径:传统的 Spool 方式和更优的直接获取 OTF 方式,后者避免了 Spool 的维护负担。核心代码演示了如何通过设置 GETOTF 参数获取 OTF 数据,并转换为 PDF 二进制流,适用于前端下载、接口传输等场景。同时介绍了 SSF_OPEN/SSF_CLOSE 方法用于批

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 676

Java笔记——如何快速入门 Java?

这是一个基于 Spring Boot、MyBatis-Plus、MySQL、Redis、ElasticSearch、MongoDB、Docker、RabbitMQ 等技术栈实现的社区系统,采用主流的互联网技术架构、全新的UI设计、支持一键源码部署,拥有完整的文章&教程发布/搜索/评论/统计流程等,代码完全开源,没有任何二次封装,是一个非常适合二次开发/实战的现代化社区项目?对于新人来说,最重要的是掌握 Java 后端开发四大件,Java 基础、Spring Boot、MySQL、Redis。

a25847a的博客 1771

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java基础28-Java 集合基础:HashSet 去重原理(依赖 HashMap 详解)

摘要: 本文深入解析Java中HashSet的去重机制,揭示其完全依赖HashMap的实现原理。HashSet通过将元素作为HashMap的Key存储,利用哈希表实现高效去重。关键点包括:hashCode()快速定位存储位置,equals()精确比较元素唯一性;自定义对象必须正确重写这两个方法;JDK8+优化哈希冲突处理,链表过长时转为红黑树。文章通过源码分析、架构图解和代码示例,帮助开发者深入理解这一核心集合类的工作机制。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Java零基础-集合:HashSet

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛   今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。   我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余...

weixin_28772667的博客 118

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

java基础:HashSet

/ 必须重写equals和hashCode方法@Override@Override@Override// 使用自定义对象// 重复,不会被添加// 2使用HashSet的最佳时机:✅ 需要快速检查元素是否存在✅ 需要自动去重✅ 不关心元素顺序✅ 元素数量较大,需要O(1)的查找性能✅ 经常进行集合运算(交集、并集、差集)不适合使用HashSet的场景:❌ 需要保持插入顺序(用LinkedHashSet)❌ 需要元素排序(用TreeSet)

weixin_44397974的博客 329

【JAVA基础】由C++快速上手Java(超详细)

JavaSE基础课程涉及到的很多内容在学习C++的过程都有涉及,在这里做一个由C++基础开始学习java的快速入门经验总结。

2301_76391858的博客 2662

java快速入门

一、入门代码提神醒脑 public class Hello{ public static void main(String[] args){ System.out.println("Hello,World!"); } } <分析> public(访问修饰符)修饰class和main()方法,表示它们均是公开的。 class是java中的关键字,表...

ckk727的博客 598

零基础入门 Java:核心特性、代码规范与基础语法全解析

本文为Java初学者提供了全面的入门指南。首先解析了Java的11项核心特性,包括面向对象、跨平台等关键优势;其次详细解释了JDK、JRE等常见术语,帮助理解Java技术体系;然后通过"Hello World"示例剖析了Java程序结构;最后重点讲解了代码规范,包括命名规则、关键字使用和注释规范。文章强调掌握这些基础知识是Java学习的基石,建议初学者通过理解概念和动手实践相结合的方式打好基础,培养良好的编程习惯。本文旨在帮助新手快速入门,顺利开启Java编程学习之旅。

rookie168的博客 1428

深度解析《AI+Java编程入门》:一本为零基础重构的Java学习路径

入门,不是背完所有关键字;入门,是能独立搭建环境、写出可运行的程序;入门,是学会借助AI工具,解决真实问题。对于零基础学习者而言,这本书提供了一条低门槛、高效率、有反馈的学习路径。它不追求速成,而是通过扎实的内容设计,帮助你在AI时代,稳健地迈出编程的第一步。📘 书籍信息书名:《AI+Java编程入门:让代码跑起来》作者:王辰飞出版社:清华大学出版社新书双11特惠5折,叠加政府补贴。点击下方链接即可抢购。

kevin_blog 1155

Java HashSet 的实现源码解析

HashSet 是一个没有重复元素的集合。基于HashMap实现。简介HashSet定义:public class HashSet<E> extends Abstr...

AI天才研究院 8738
上一篇: Java基础快速入门: 红黑树与TreeSet
下一篇: Java基础快速入门: Map 集合详解
Wang's Blog
博客等级 码龄12年 7434粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值