栗筝i 的 Java 技术栈
文章平均质量分 95
大家好,我是栗筝i,在 “栗筝i 的 Java 技术栈“ 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。本专栏计划将从 24年6月9日开始更新,直到 2026 年大致更新完毕,预计每周更新 3~6 篇文章。
欢迎大家 点赞、评论、收藏、订阅,你的支持将是我更新的最大动力。
栗筝i
海到无边天作岸,山登绝顶我为峰。期待更好的自己
展开
-
Java 并发编程:一文了解 Java 内存模型(处理器优化、指令重排序与内存屏障的深层解析)
在当今多核处理器和高并发应用日益普及的时代,理解并掌握 Java 并发编程变得尤为重要。Java 内存模型(Java Memory Model, JMM)作为并发编程的基石,扮演着至关重要的角色。JMM 定义了多线程环境下变量的访问规则,确保程序在不同平台和处理器上能够一致且正确地运行。本文将深入探讨 Java 内存模型中的核心概念,包括处理器优化、指令重排序与内存屏障。我们将揭示这些技术如何影响 Java 程序的执行顺序和数据可见性,以及开发者如何利用 JMM 的规则来编写高效、安全的并发程序。通过对原创 2024-07-26 15:12:16 · 480 阅读 · 80 评论 -
Java 集合框架:TreeMap 的介绍、使用、原理与源码解析
Map 在 Java 里面分为两种:HashMap 和 TreeMap,区别就是 TreeMap 有序,HashMap 无序。如果只需要存映射,那么 HashMap 就够了,但是如果需要存有顺序的 key 那么就用 TreeMap。TreeMap 存储 K-V 键值对,通过红黑树(R-B tree)实现。原创 2024-07-23 18:20:24 · 454 阅读 · 78 评论 -
Java 集合框架:HashMap 的介绍、使用、原理与源码解析
HashMap 根据是一个键值对集合,采用 hashCode 值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。HashMap 最多只允许一条记录的键为 null。HashMap 非线程安全,即任一时刻可以有多个线程同时写 HashMap,可能会导致数据的不一致。如果需要满足线程安全,可以用 Collections 的 synchronizedMap 方法使 HashMap 具有线程安全的能力,或者使用 ConcurrentHashMap。原创 2024-07-23 18:16:41 · 612 阅读 · 107 评论 -
Java 集合框架:Java 中的双端队列 ArrayDeque 的实现
Deque 接口表示一个双端队列(Double Ended Queue),允许在队列的首尾两端操作,所以既能实现队列行为,也能实现栈行为。Deque 常用的两种实现 ArrayDeque 和 LinkedList。ArrayDeque 是 Java 集合中双端队列的数组实现,可以从两端进行插入或删除操作,当需要使用栈时,Java 已不推荐使用 Stack,而是推荐使用更高效的ArrayDeque,当需要使用队列时也可以使用 ArrayDeque。原创 2024-07-22 13:53:09 · 548 阅读 · 119 评论 -
Java 集合框架:Java 中的优先级队列 PriorityQueue 的实现
在 Java 中是一种基于堆(Heap)数据结构实现的优先级队列。堆是一种特殊的完全二叉树,分为最小堆和最大堆。在最小堆中,每个节点的值都小于或等于其子节点的值;在最大堆中,每个节点的值都大于或等于其子节点的值。Java 的使用最小堆实现,因此队列头部总是优先级最高(值最小)的元素。原创 2024-07-21 17:10:00 · 477 阅读 · 139 评论 -
Java 集合框架:Java 中的 Set 集合(HashSet & LinkedHashSet & TreeSet)特点与实现解析
Set是java.util包下集合框架中一个接口,它是Collection接口的一个子接口,表示不允许包含重复元素的集合。Set 集合的特点是集合内的元素无序,且每个元素都是唯一的。这意味着即使试图添加两个相等的对象(依据.equals()方法判断相等),Set 集合只会保存一个对象。无序性:Set 集合中的元素不按任何特定顺序排列,无法通过索引访问元素,即集合内部的元素顺序可能随时间和操作发生变化;唯一性:Set 集合不允许包含重复的元素。判断元素是否重复的标准是基于元素的.equals()方法。原创 2024-07-09 06:00:00 · 2072 阅读 · 184 评论 -
Java 并发集合:CopyOnWrite 写时复制集合介绍
写时复制(Copy-on-Write,简称COW)是一种计算机程序设计领域的优化策略。其核心思想是:如果有多个调用者同时请求相同资源(如内存或磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者试图修改资源的内容时,系统才会真正复制一份专用副本给该调用者,而其他调用者所见到的最初的资源仍然保持不变。这一过程对其他的调用者都是透明的。当对容器进行写操作(这里的写可以理解为 “增、删、改”)时,为了避免读写操作同时进行而导致的线程安全问题。原创 2024-07-02 14:03:23 · 2850 阅读 · 188 评论 -
Java 集合框架:Vector、Stack 的介绍、使用、原理与源码解析
Java 集合框架(Java Collections Framework)是 Java 标准库中的一个核心组件,它提供了一套用于处理数据集合的接口和类。作为其中的重要成员,Vector 和 Stack 在特定场景中扮演着关键角色。Vector 是一种同步的动态数组,实现了 List 接口,适用于需要线程安全的场景;而 Stack 是 Vector 的子类,提供了后进先出(LIFO)的数据结构操作。本文将对 Vector 和 Stack 进行全面的介绍,探讨它们的使用方法、工作原理以及源码实现,以帮助开发者深原创 2024-06-20 06:15:00 · 1883 阅读 · 61 评论 -
Java 集合框架:LinkedList 的介绍、使用、原理与源码解析
Java 集合框架中包含了多种用于数据存储和操作的类,其中 LinkedList 是一个重要且常用的实现。LinkedList 作为一个双向链表,提供了高效的插入和删除操作,特别适用于频繁进行元素增删的场景。对于很多开发者而言,深入理解 LinkedList 的特性和工作原理是提高代码性能和优化数据处理逻辑的关键。本文将对 LinkedList 进行全面的介绍和解析,帮助读者掌握其使用方法、内部原理以及源码实现。原创 2024-06-17 08:28:55 · 1746 阅读 · 90 评论 -
Java 集合框架:ArrayList 的介绍、使用、原理与源码解析
本文将从介绍 ArrayList 开始,详细探讨其使用方法、工作原理以及背后的源码实现,帮助读者深入理解并灵活运用 ArrayList,以提升编程效率和代码质量。在接下来的部分中,我们将首先概述 ArrayList 的基本特性及其在 Java 集合框架中的地位。随后,通过实际代码示例展示如何创建、操作和管理 ArrayList。接着,我们会揭示 ArrayList 的内部工作机制,包括其底层数据结构、扩容策略和性能优化等方面的内容。最后,我们将深入分析 ArrayList 的源码,探讨其设计思想和实现细原创 2024-06-17 08:27:52 · 3596 阅读 · 103 评论 -
Java 注解设计 -- Java 语言注解的介绍、高阶应用与自定义注解
Java 注解(Annotations)是自 JDK 1.5 引入的一种特性,它们提供了一种在代码中嵌入额外信息的机制,这些信息不会直接影响代码的执行,但可用于编译检查、代码分析、或在运行时的处理。注解可以被用来注释包、类、接口、字段、方法参数、局部变量等。一类是 Java 自带的标准注解,包括@Override(标明重写某个方法)、(标明某个类或方法过时)和(标明要忽略的警告),使用这些注解后编译器就会进行检查;一类为元注解,元注解是用于定义注解的注解,包括@Retention。原创 2024-06-15 18:39:32 · 623 阅读 · 12 评论 -
Java 泛型设计 -- Java 语言泛型的概述、类型擦出、协变与逆变
泛型(Generics)是在 JDK 5.0 版本中引入的一个新特性,泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。在 JDK 5.0 引入泛型之前,Java 的集合框架并没有使用泛型,所有的集合类(如ListSetMap等)都是处理Object类型的对象。这意味着它们可以存储任何类型的对象,但这种通用性也带来了几个问题:缺乏类型安全:集合可以存储任何类型的对象,这可能导致运行时的。原创 2024-06-15 18:38:36 · 475 阅读 · 0 评论 -
Java 反射机制 -- Java 语言反射的概述、核心类与高级应用
Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于 ReflectionAPI 取得任何类的内部信息,并能直接操作任意对象的内 部属性及方法。原创 2024-06-13 07:15:00 · 3092 阅读 · 97 评论 -
Java 异常处理 -- Java 语言的异常、异常链与断言
世界上存在永远不会出错的程序吗?也许这只会出现在程序员的梦中。随着编程语言和软件的诞生,异常情况就如影随形地纠缠着我们,只有正确处理好意外情况,才能保证程序的可靠性。原创 2024-06-13 07:00:00 · 1707 阅读 · 137 评论 -
Java 关于抽象 -- Java 语言的抽象类、接口和函数式接口
在理解了 Java 的基础语法和面向对象编程概念之后,本篇文章将进一步探讨 Java 中的抽象机制。我们将讨论抽象类与接口的区别和使用场景,了解函数式接口在 Java 8 中的引入及其重要性。通过掌握这些高级概念,读者将能够编写出更灵活和可维护的代码。原创 2024-06-12 07:15:00 · 1126 阅读 · 76 评论 -
Java 面向对象 -- Java 语言的封装、继承、多态、内部类和 Object 类
在我们对 Java 语言进行基本介绍之后,本篇文章将带领大家深入了解 Java 的面向对象编程(OOP)概念。我们将探讨封装、继承和多态这三大核心概念,以及内部类的使用和 Object 类的重要性。通过对这些内容的学习,读者将能够更好地设计和实现复杂的 Java 应用程序。原创 2024-06-12 07:00:00 · 1256 阅读 · 129 评论 -
Java 类与对象 -- Java 语言的类与对象、构造器、static、final、包和 JAR
本篇文章我们将深入了解 Java 语言中的类与对象,探讨构造器、`static`、`final`、包和 JAR 文件。这些概念是面向对象编程的核心,对于理解和掌握 Java 至关重要。原创 2024-06-11 07:15:00 · 2176 阅读 · 113 评论 -
Java 流程控制 -- Java 语言的代码块、作用域、循环与依赖
本篇文章我们将深入探讨 Java 的流程控制,包括代码块、作用域、循环与依赖。这些概念是编写高效、清晰代码的关键,对于掌握 Java 编程至关重要。原创 2024-06-11 07:00:00 · 977 阅读 · 130 评论 -
Java 数据类型 -- Java 语言的 8 种基本数据类型、字符串与数组
篇文章我们将深入了解 Java 的数据类型,包括 Java 语言的 8 种基本数据类型、字符串与数组。这些数据类型是 Java 程序设计的基础,也是编写高效、可靠代码的关键。原创 2024-06-10 12:24:26 · 3549 阅读 · 77 评论 -
Java 程序结构 -- Java 语言的变量、方法、运算符与注释
在这篇文章中,我们将深入探讨 Java 程序的基本结构,了解 Java 语言中的变量、方法、运算符与注释。这些知识是学习和掌握 Java 编程的基石,对于编写高效、可维护的代码至关重要。原创 2024-06-10 12:22:16 · 1331 阅读 · 91 评论 -
Java 环境配置 -- Java 语言的安装、配置、编译与运行
在这篇文章中,首先,我们将会先聊一聊 Java 的体系、环境、和版本,因为如果是刚入门的小伙伴,没有去特意了解的话,确实会存在相关的困惑(现在网上大多数文章对相关内容的介绍已经过时了);然后,我们会进行真正的开始,即 Java 语言的安装、配置、编译与运行;在最后,我们再了解一下,当下最为流行的 Java 开发 IDE 工具 – IntelliJ IDEA!原创 2024-06-09 13:14:06 · 1561 阅读 · 87 评论 -
Java 语言概述 -- Java 语言的介绍、现在、过去与将来
Java 语言是于 1991 年由 Sun(Sun Microsystems,美国)公司的 詹姆斯·高斯林(James Gosling)团队研发的一门面向对象的编程语言。最初命名为 Oak,并于 1995 年更名为 Java 后开始推广。如今,随着互联网的崛起,Java 已经成为目前世界上最流行、最重要的计算机编程语言之一。Java 作为一门面向对象的高级编程语言,在设计之初,借鉴了多种编程语言的特性和理念。原创 2024-06-09 12:28:14 · 2295 阅读 · 115 评论