小菜鸟

java菜鸟号正在起航

HashMap 深度解析(基于 JDK 8)

HashMap 是 Java 集合框架中使用最广泛的 Map 实现类,基于哈希表(数组 + 链表 + 红黑树)实现,支持高效的键值对存储与查询。其设计兼顾了时间和空间效率,是单线程环境下键值对存储的首选。本文将从底层结构、核心源码、工作机制及并发问题等方面,全面剖析 HashMap 的实现原理。

HashMap 核心特性与继承关系

核心特性

  • 键唯一性:键(key)不可重复,重复插入会覆盖原值。
  • 允许 null:键和值均可为 null(键最多 1 个 null,值可多个)。
  • 无序性:存储顺序与插入顺序无关(由键的哈希值决定)。
  • 动态扩容:容量不足时自动扩容,默认扩容为原容量的 2 倍。
  • 非线程安全:多线程并发修改可能导致数据不一致(如死循环、数据覆盖)。

继承关系

HashMap

public class HashMap<K,V> extends AbstractMap<K,V>
    implements Map<K,V>, Cloneable, Serializable
  • 继承 AbstractMap:复用 Map 接口的基础实现(如 entrySetkeySet 等)。
  • 实现 Map:遵循键值对集合的规范。
  • 实现 Cloneable:支持浅拷贝(仅复制结构,不复制元素对象)。
  • 实现 Serializable:支持序列化,通过 writeObjectreadObject 自定义序列化逻辑。

底层数据结构:数组 + 链表 + 红黑树

HashMap 的底层结构是哈希表,JDK 8 中采用 “数组 + 链表 + 红黑树” 的组合结构,平衡了哈希冲突处理与查询效率:

阅读全文 »

Java Map 接口及主要实现类详解

Map 是 Java 集合框架中用于存储键值对(key-value)的接口,与 Collection 接口并列,是日常开发中最常用的数据结构之一。Map 中的键(key)具有唯一性,值(value)可重复,键与值一一对应。本文将详细解析 Map 接口的主要实现类,包括 Hashtable、HashMap、TreeMap、LinkedHashMap 和 ConcurrentHashMap,分析它们的底层结构、核心特性及适用场景。

Map 接口概述

Map 接口定义了键值对集合的基本操作,如添加(put)、删除(remove)、查询(get)、遍历等。其核心方法包括:

  • V put(K key, V value):添加键值对,若键已存在则覆盖值并返回旧值。
  • V get(Object key):根据键获取值,若键不存在则返回 null
  • boolean containsKey(Object key):判断是否包含指定键。
  • Set<K> keySet():返回所有键的集合(无序,除非实现类保证有序)。
  • Collection<V> values():返回所有值的集合。
  • Set<Map.Entry<K,V>> entrySet():返回键值对实体的集合,用于遍历。

主要实现类解析

Hashtable(线程安全的早期实现)

Hashtable 是 JDK 1.0 引入的最早的 Map 实现类,基于哈希表(数组 + 链表)实现,是线程安全的,但性能较低。

核心特性
  • 线程安全:所有方法均用 synchronized 修饰,保证多线程安全,但并发效率低。

  • 不允许 null:键(key)和值(value)均不能为 null,否则抛出 NullPointerException

  • 继承关系:继承自Dictionary类(已过时),实现Map接口。

    public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, Serializable
底层结构
  • 用Entry数组存储键值对,Entry是单向链表节点,包含hash、key、value、next(下一个节点)。

阅读全文 »

Spring 事件监听机制:从原理到实战

Spring 事件监听机制是基于观察者模式的一种实现,用于组件间的解耦通信。通过事件发布者(Publisher)、事件(Event)和事件监听器(Listener)三者的配合,实现了 “发布 - 订阅” 模式,让组件无需直接依赖即可完成交互。本文将详细解析 Spring 事件监听的核心原理、内置事件及自定义事件的实现方式。

Spring 事件监听的核心组件

Spring 事件监听机制包含三个核心角色,它们协同工作完成事件的发布与处理:

组件 作用 核心接口 / 类
事件(Event) 传递的消息载体,封装了需要传递的数据 ApplicationEvent(所有事件的父类)
事件发布者(Publisher) 负责发布事件到容器中 ApplicationEventPublisher(发布接口)
事件监听器(Listener) 监听指定类型的事件,当事件发布时执行回调逻辑 ApplicationListener<E>(监听接口)

三者关系如下:

  1. 事件发布者通过 publishEvent() 方法发布事件;
  2. Spring 容器将事件传递给所有订阅该事件的监听器;
  3. 监听器通过 onApplicationEvent() 方法处理事件。

Spring 内置事件

Spring 框架自带了 5 种标准事件,用于监听容器生命周期和 Web 请求等场景,这些事件均继承自 ApplicationEvent

阅读全文 »

HashSet 源码深度解析(基于 JDK 8)

HashSet 是 Java 集合框架中最常用的 Set 实现类,基于 HashMap 实现,具有无序性不可重复性高效性的特点。本文将从继承关系、核心实现、方法原理及使用场景等方面,全面解析 HashSet 的工作机制。

HashSet 核心特性与继承关系

核心特性

  • 无序性:元素存储顺序与插入顺序无关(由哈希值决定存储位置)。
  • 不可重复性:不允许存储重复元素(通过 equals()hashCode() 判断重复)。
  • 高效性:添加、删除、查找元素的平均时间复杂度为 O(1)
  • 支持 null 元素:允许存储一个 null(因不可重复)。
  • 非线程安全:多线程并发修改可能导致数据不一致(需手动同步或使用 ConcurrentHashMap 构建的 Set)。

继承关系

HashSet

public class HashSet<E>
    extends AbstractSet<E>
    implements Set<E>, Cloneable, java.io.Serializable
  • 继承 AbstractSet:复用了 Set 接口的部分默认实现(如 size()isEmpty() 等)。
  • 实现 Set:遵循 Set 接口规范,确保元素不可重复。
  • 实现 Cloneable:支持克隆(浅拷贝,底层 HashMap 被复制,但元素对象本身不复制)。
  • 实现 Serializable:支持序列化,通过自定义序列化方法优化性能。

核心结构:基于 HashMap 的封装

HashSet 本身没有独立的底层结构,而是通过封装 HashMap 实现功能

阅读全文 »

应用层简析:用户与网络的交互接口

应用层是 OSI 七层模型和 TCP/IP 四层模型中最贴近用户的一层,它直接面向用户需求,定义了各类网络应用的通信规则。应用层协议通过调用传输层(TCP 或 UDP)提供的服务,实现不同主机上应用程序之间的信息交换,其核心作用是将用户的操作转化为网络可识别的通信指令

应用层的核心定位

  • 交互对象:仅与下层的传输层(TCP/UDP)通信,无需关心底层的网络层、数据链路层等细节。
  • 核心功能:
    • 定义应用程序之间的数据格式(如 HTTP 的请求 / 响应报文结构)。
    • 规定通信的时序和规则(如 FTP 的连接建立与文件传输流程)。
    • 处理用户交互逻辑(如邮件发送、网页浏览的具体实现)。
  • 用户视角:我们日常使用的浏览器、邮件客户端、文件传输工具等,其底层都是通过应用层协议实现网络通信的。

常见应用层协议及功能

1. HTTP(超文本传输协议)

  • 作用:用于浏览器与 Web 服务器之间的超文本(如 HTML、图片、视频)传输,是万维网(WWW)的基础协议。
  • 特点:
    • 基于 TCP 传输(可靠连接),默认端口 80。
    • 采用 “请求 - 响应” 模式:客户端发送请求(如 GET、POST),服务器返回响应(如 200 成功、404 未找到)。
    • 无状态:服务器不保留客户端的历史信息,每次请求独立处理(通过 Cookie、Session 解决状态保持问题)。
  • 衍生协议:HTTPS(HTTP+SSL/TLS 加密),默认端口 443,用于敏感信息传输(如支付、登录)。

2. FTP(文件传输协议)

  • 作用:实现本地主机与远程服务器之间的文件上传、下载和管理(如上传网站代码、下载资源包)。
  • 特点:
    • 基于 TCP 传输,使用两个连接:控制连接(端口 21,用于发送指令)和数据连接(端口 20,用于传输文件)。
    • 支持匿名登录(无需账号密码)和权限控制(通过用户名 / 密码限制操作)。
    • 数据传输模式:文本模式(传输文本文件)和二进制模式(传输图片、压缩包等非文本文件)。
阅读全文 »
0%