【Pytorch 库】自定义数据集相关的类
- torch.utils.data.Dataset 类
- torch.utils.data.DataLoader 类
- 自定义数据集示例
- 1. 自定义 Dataset 类
- 2. 在其他 .py 文件中引用和使用该自定义 Dataset
- torch_geometric.data.Dataset 类
- torch_geometric.data.Dataset VS torch.utils.data.Dataset
详细信息,参阅 torch.utils.data 文档页面
写得很棒的文章:PyTorch加载自己的数据集
在 PyTorch 数据加载工具的核心是 torch.utils.data.DataLoader 类。它表示一个 Python 可迭代对象,用于遍历数据集,并支持以下功能:
- 映射式和可迭代式数据集
- 自定义数据加载顺序
- 自动批量处理
- 单进程和多进程数据加载
- 自动内存固定
这些选项由 DataLoader 构造函数的 参数 配置,如下:
DataLoader(dataset, batch_size=1, shuffle=False, sampler=None,batch_sampler=None, num_workers=0, collate_fn=None,pin_memory=False, drop_last=False, timeout=0,worker_init_fn=None, *, prefetch_factor=2,persistent_workers=False)
DataLoader 构造函数中最重要的参数是 dataset,它表示一个数据集对象,用于加载数据。
PyTorch 支持两种不同类型的数据集:
- 映射式数据集(map-style datasets)
- 可迭代式数据集(iterable-style datasets)
torch.utils.data.Dataset 类
torch.utils.data.Dataset 是 PyTorch 库中的一个标准类,它是 用于自定义数据集的基类。这个类是所有数据集的基础,适用于各种类型的数据加载,包括图像、文本、时间序列等。
-
作用:
Dataset类的作用是提供一个接口,用于 加载和处理原始数据。它是 PyTorch 的数据加载机制的一部分,通常 与DataLoader配合使用。 -
主要方法:
__len__():返回数据集的大小(即样本的数量)。__getitem__():根据索引返回单个数据样本。DataLoader会使用该方法来迭代数据。
torch.utils.data.Dataset 类 Pytorch 官网文档:

torch.utils.data.Dataset 类是一个抽象类,用于表示一个数据集。
- 所有表示 从键到数据样本映射的数据集 都应当继承此类。
- 所有子类都应当 重写
__getitem__()方法,用于 根据给定的键获取数据样本。 - 子类还可以选择性地重写
__len__()方法,许多Sampler实现和DataLoader的默认选项都期望返回数据集的大小。 - 子类还可以 选择性地实现
__getitems__()方法,以加速 批量样本的加载。该方法接受一个包含批次样本索引的列表,并返回一个包含样本的列表。
注意:默认情况下,DataLoader 会构造一个索引采样器,该采样器返回整数索引。为了使其与使用非整数索引/键的映射风格数据集兼容,必须提供自定义的采样器。
# Pytorch torch.utils.data.Dataset 类的源码class Dataset(Generic[_T_co]):r"""An abstract class representing a :class:`Dataset`.All datasets that represent a map from keys to data samples should subclassit. All subclasses should overwrite :meth:`__getitem__`, supporting fetching adata sample for a given key. Subclasses could also optionally overwrite:meth:`__len__`, which is expected to return the size of the dataset by many:class:`~torch.utils.data.Sampler` implementations and the default optionsof :class:`~torch.utils.data.DataLoader`. Subclasses could alsooptionally implement :meth:`__getitems__`, for speedup batched samplesloading. This method accepts list of indices of samples of batch and returnslist of samples... note:::class:`~torch.utils.data.DataLoader` by default constructs an indexsampler that yields integral indices. To make it work with a map-styledataset with non-integral indices/keys, a custom sampler must be provided."""def __getitem__(self, index) -> _T_co:raise NotImplementedError("Subclasses of Dataset should implement __getitem__.")# def __getitems__(self, indices: List) -> List[_T_co]:# Not implemented to prevent false-positives in fetcher check in# torch.utils.data._utils.fetch._MapDatasetFetcherdef __add__(self, other: "Dataset[_T_co]") -> "ConcatDataset[_T_co]":return ConcatDataset([self, other])# No `def __len__(self)` default?# See NOTE [ Lack of Default `__len__` in Python Abstract Base Classes ]# in pytorch/torch/utils/data/sampler.py
torch.utils.data.DataLoader 类
数据加载器(DataLoader)将数据集(dataset)和采样器(sampler)结合起来,并提供对给定数据集的可迭代访问。
DataLoader 支持单进程或多进程加载的 映射式 和 可迭代式 数据集,支持自定义加载顺序、可选的自动批量处理(拼接)以及内存固定(memory pinning)。
这些参数使得 DataLoader 能够在处理数据时非常灵活,支持不同的 数据加载策略、并行处理方式、内存管理 等。通过合理设置这些参数,可以在训练神经网络时实现高效的数据加载和处理。
-
dataset (Dataset) – 从中加载数据的数据集。
-
batch_size (int, 可选) – 每个批次加载多少个样本(默认值:1)。
-
shuffle (bool, 可选) – 设置为
True时,每个周期(epoch)都会重新打乱数据(默认值:False)。 -
sampler (Sampler 或 Iterable, 可选) – 定义从数据集中抽取样本的策略。可以是任何实现了
__len__的 Iterable。如果指定了sampler,则不能同时指定shuffle。 -
batch_sampler (Sampler 或 Iterable, 可选) – 类似于
sampler,但一次返回一个批次的索引。与batch_size、shuffle、sampler和drop_last互斥。 -
num_workers (int, 可选) – 用于数据加载的子进程数量。设置为 0 时,数据将在主进程中加载。(默认值:0)
-
collate_fn (Callable, 可选) – 将一个样本列表合并为一个 mini-batch 的 Tensor(s)。在使用映射式数据集进行批量加载时使用。
-
pin_memory (bool, 可选) – 如果为
True,数据加载器将在返回数据之前将 Tensors 复制到设备/CUDA 固定内存中。如果你的数据元素是自定义类型,或者collate_fn返回的是自定义类型的批次,请参见下面的示例。 -
drop_last (bool, 可选) – 设置为
True时,如果数据集大小不能被批次大小整除,则丢弃最后一个不完整的批次。如果设置为False且数据集大小不能被批次大小整除,那么最后一个批次将会更小。(默认值:False) -
timeout (数值型, 可选) – 如果为正,则表示从工作进程收集批次的超时值。应该始终是非负值。(默认值:0)
-
worker_init_fn (Callable, 可选) – 如果不为
None,则会在每个工作进程中调用该函数,输入为工作进程的 ID(一个整数,在[0, num_workers - 1]范围内),在种子设置后、数据加载之前调用。(默认值:None) -
multiprocessing_context (str 或 multiprocessing.context.BaseContext, 可选) – 如果为
None,则使用操作系统的默认多进程上下文。(默认值:None) -
generator (torch.Generator, 可选) – 如果不为
None,则该随机数生成器将由RandomSampler用于生成随机索引,并且在多进程中用于生成工作进程的基准种子。(默认值:None) -
prefetch_factor (int, 可选,仅限关键字参数) – 每个工作进程提前加载的批次数。设置为 2 时,所有工作进程将提前加载总计
2 * num_workers个批次。(默认值取决于num_workers设置的值。如果num_workers=0,默认值为None;如果num_workers > 0,默认值为 2) -
persistent_workers (bool, 可选) – 如果为
True,数据加载器将在数据集被消费一次后不会关闭工作进程。这样可以保持工作进程中的数据集实例处于活动状态。(默认值:False) -
pin_memory_device (str, 可选) – 如果
pin_memory为True,则为内存固定的设备指定设备名称。 -
in_order (bool, 可选) – 如果为
False,数据加载器将不强制按照先进先出(FIFO)的顺序返回批次。仅在num_workers > 0时生效。(默认值:True)
注意:
- 如果使用了
spawn启动方法,则worker_init_fn不能是不可序列化的对象,例如 Lambda 函数。有关 PyTorch 中多进程的更多细节,请参阅“多进程最佳实践”。 len(dataloader)的启发式方法基于所使用的采样器的长度。当数据集是一个IterableDataset时,它会根据len(dataset) / batch_size来返回一个估计值,并根据drop_last设置进行适当的四舍五入,而不管多进程加载配置如何。这是 PyTorch 能做出的 最佳估算,因为 PyTorch 相信用户的数据集代码能够正确处理多进程加载,避免重复数据。
然而,如果数据分片导致多个工作进程的最后一个批次不完整,那么这个估计仍然可能不准确,因为 (1) 一个原本完整的批次可能会被分成多个批次,(2) 当drop_last设置为True时,可能会丢失多个批次的样本。不幸的是,PyTorch 通常无法检测到这种情况。
有关这两种数据集类型以及IterableDataset如何与多进程数据加载交互的更多细节,请参阅“数据集类型”。- 有关随机种子相关的问题,请参阅“可重现性”,“我的数据加载器工作进程返回相同的随机数”以及“多进程数据加载中的随机性”相关说明。
- 将
in_order设置为False可能会影响可重现性,并且在数据不平衡的情况下,可能会导致传递给训练器的数据分布偏斜。
自定义数据集示例
1. 自定义 Dataset 类
首先,需要定义一个自定义的 Dataset 类,继承自 torch.utils.data.Dataset。
# dataset.pyimport torch
from torch.utils.data import Dataset
import os
from PIL import Image
from torchvision import transformsclass CustomDataset(Dataset):def __init__(self, data_dir, mode='train', transform=None):""":param data_dir: 数据集根目录:param mode: 'train' 或 'test',指定加载训练集或测试集:param transform: 数据转换(如图像缩放,裁剪,归一化等)"""self.data_dir = data_dirself.mode = modeself.transform = transform# 假设数据集结构是这样的:# data_dir/# train/# class1/# class2/# test/# class1/# class2/self.image_paths = []self.labels = []# 加载数据self._load_data()def _load_data(self):"""根据模式加载训练集或测试集数据"""# 设置数据目录data_folder = os.path.join(self.data_dir, self.mode)for label, class_name in enumerate(os.listdir(data_folder)):class_folder = os.path.join(data_folder, class_name)if os.path.isdir(class_folder):for img_name in os.listdir(class_folder):img_path = os.path.join(class_folder, img_name)self.image_paths.append(img_path)self.labels.append(label)def __len__(self):"""返回数据集的大小"""return len(self.image_paths)def __getitem__(self, idx):"""根据索引返回数据和标签"""img_path = self.image_paths[idx]label = self.labels[idx]# 读取图像image = Image.open(img_path).convert('RGB')# 应用转换if self.transform:image = self.transform(image)return image, label
在自定义数据集 CustomDataset 中,通过 mode='train' 或 mode='test' 来决定加载训练集或测试集的数据。这个 mode 参数可以在创建数据集时传入:
mode='train'时,加载训练集的数据。mode='test'时,加载测试集的数据。
该示例 假设数据集存储在 data_dir/train 和 data_dir/test 文件夹下,并按类存放在子文件夹中。可以根据自己的数据存储结构修改 _load_data() 方法。
2. 在其他 .py 文件中引用和使用该自定义 Dataset
在其他 .py 文件中,可以引用该数据集类,并根据需要加载训练集或测试集。还可以传递数据增强或转换操作,例如使用 torchvision.transforms 来进行图像处理。
# main.pyimport torch
from torch.utils.data import DataLoader
from dataset import CustomDataset
from torchvision import transforms# 定义数据增强和预处理操作
transform = transforms.Compose([transforms.Resize((128, 128)),transforms.ToTensor(),transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])# 创建训练集和测试集
train_dataset = CustomDataset(data_dir='./data', mode='train', transform=transform)
test_dataset = CustomDataset(data_dir='./data', mode='test', transform=transform)# 使用 DataLoader 加载数据集
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False)# 使用训练集
for images, labels in train_loader:print(images.shape, labels.shape) # 输出每个批次的图像和标签的大小# 在此进行训练
torch_geometric.data.Dataset 类
torch_geometric.data.Dataset 类官方文档
在 PyTorch 中,torch.utils.data.Dataset 和 torch_geometric.data.Dataset 都是用来表示数据集的基类,但它们的作用、设计和用途有一些显著的区别,特别是在图神经网络(GNN)方面,
torch.utils.data.Dataset更 通用,适用于 各种类型的数据集。torch_geometric.data.Dataset是 专门为处理图数据(如图结构数据、边、节点特征等)而设计的,
torch_geometric.data.Dataset 是 PyTorch Geometric(一个专门为图神经网络设计的扩展库)中的数据集类,继承自 torch.utils.data.Dataset,专门用于处理图数据,如图结构数据、节点特征 node_features、边特征 edge_index 等。
-
主要方法:
__len__():返回数据集中的图的数量。get():返回单个图的数据。get()通常是实现单个数据项的加载过程,返回一个Data对象,其中包含图的结构信息(如edge_index)、节点特征(如x)等。
-
用途:专门用于图神经网络(GNN)任务,适合处理图结构数据,例如社交网络、分子结构、物理网络等。
torch_geometric.data.Dataset VS torch.utils.data.Dataset
主要区别:
| 特性 | torch.utils.data.Dataset | torch_geometric.data.Dataset |
|---|---|---|
| 设计目的 | 用于处理一般的数据集(如图像、文本、时间序列等)。 | 专门为图神经网络设计,处理图结构数据(如图、边、节点特征)。 |
| 继承关系 | 基本类,PyTorch 数据加载的基类。 | 继承自 torch.utils.data.Dataset,扩展为图数据处理。 |
| 数据存储 | 存储一般的数据(如图像、文本数据等)。 | 存储图数据结构,包括 edge_index、x(节点特征)等。 |
| 核心方法 | __getitem__() 返回单个数据项,通常是一个样本。 | get() 返回一个图数据对象,通常是 Data。 |
| 数据类型 | 适用于任何类型的数据集。 | 适用于图结构数据集。 |
| 多进程支持 | 支持多进程数据加载(通过 num_workers)。 | 同样支持多进程数据加载,但主要针对图数据。 |
| 批处理支持 | 支持自动批处理(batching),使用 DataLoader。 | 也支持批处理,并且能够自动处理图结构的数据。 |
| 图数据处理 | 没有内建的图数据处理支持。 | 内建支持图数据结构,如 edge_index、x(节点特征)、y(标签)。 |
关系:
torch_geometric.data.Dataset是torch.utils.data.Dataset的一个扩展,专门为图数据设计。torch_geometric.data.Dataset在其基础上提供了对图数据的支持,包括图的边结构、节点特征等,使得 PyTorch Geometric 更适用于 图神经网络(GNN) 等图学习任务。
相关文章:
【Pytorch 库】自定义数据集相关的类
torch.utils.data.Dataset 类torch.utils.data.DataLoader 类自定义数据集示例1. 自定义 Dataset 类2. 在其他 .py 文件中引用和使用该自定义 Dataset torch_geometric.data.Dataset 类torch_geometric.data.Dataset VS torch.utils.data.Dataset 详细信息,参阅 tor…...
electron打包基本教程
从0开始搭建 概要步骤基础软件运行项目打包项目 注意事项 概要 将html打包成桌面的主流有electron和nwjs,nwjs更加简单,但是使用效果不如electron,electron打包比较麻烦,但是效果比较好,反正各有优势和缺点 步骤 基…...
实现pytorch注意力机制-one demo
主要组成部分: 1. 定义注意力层: 定义一个Attention_Layer类,接受两个参数:hidden_dim(隐藏层维度)和is_bi_rnn(是否是双向RNN)。 2. 定义前向传播: 定义了注意力层的…...
深入Flask:如何优雅地处理HTTP请求与响应
哈喽,大家好,我是木头左! 本文将带你深入了解如何在Flask中优雅地处理HTTP请求和响应,让你的应用更加高效、安全和用户友好。 创建一个简单的Flask应用 让从创建一个最简单的Flask应用开始: from flask import Flaskapp = Flask(__name__)@app.route(/) def...
JVM ②-双亲委派模型 || 垃圾回收GC
这里是Themberfue 在上节课对内存区域划分以及类加载的过程有了简单的了解后,我们再了解其他两个较为重要的机制,这些都是面试中常考的知识点,有必要的话建议背出来,当然不是死记硬背,而是要有理解的背~~~如果对 JVM …...
jQuery介绍(快速、简洁JavaScript库,诞生于2006年,主要目标是简化HTML文档操作、事件处理、动画和Ajax交互)
文章目录 **核心功能 & 亮点**1. **简化 DOM 操作**2. **链式调用**3. **跨浏览器兼容**4. **便捷的事件绑定**5. **Ajax 封装**6. **动画效果** **现状与适用场景**- **传统项目维护**:许多旧系统(如 WordPress 插件、老企业网站)仍依赖…...
python旅游推荐系统+爬虫+可视化(协同过滤算法)
✅️基于用户的协同过滤算法 ✅️有后台管理 ✅️2w多数据集 这个旅游数据分析推荐系统采用了Python语言、Django框架、MySQL数据库、requests库进行网络爬虫开发、机器学习中的协同过滤算法、ECharts数据可视化技术,以实现从网站抓取旅游数据、个性化推荐和直观展…...
Ubuntu 22.04.5 LTS 安装企业微信,(2025-02-17安装可行)
一、依赖包(Ubuntu 20.04/Debian 11) 点击下载https://www.spark-app.store/download_dependencies_latest 1、 下载最新的依赖包。 请访问星火应用商店依赖包下载页面, 下载最新的依赖包。2、解压依赖包 </...
【Excel笔记_6】条件格式和自定义格式设置表中数值超过100保留1位,超过1000保留0位,低于100为默认
方法一:自定义格式 选中需要设置格式的单元格区域。右键选择设置单元格格式,或者在工具栏中选择开始 -> 数字 -> 自定义格式。在类型框中输入以下自定义格式: [>1000]0;[>100]0.0;G/通用格式解释: [>1000]0&…...
UDP与TCP
用UDP一定比用TCP快吗? 假设我们需要在a电脑的进程发一段数据到b电脑的进程我们可以选择使用TCP或UDP协议进行通信。 对于TCP这样的可靠性协议每次消息发出后都能明确知道对方有没有收到,就像打电话一样,只要“喂喂"两下对方就能回你个…...
Web开发技术概述
Web开发技术涵盖了前端和后端开发,以及数据库技术。前端开发包括使用HTML、CSS、JavaScript等原生技术,以及jQuery、Bootstrap、AngularJS、React、Vue等框架。后端开发则涉及ASP.NET、PHP、Python Web(Flask、Django)、Java Web&…...
解压rar格式的软件有哪些?8种方法(Win/Mac/手机/网页端)
RAR 文件是一种常见的压缩文件格式,由尤金・罗谢尔(Eugene Roshal)开发,因其扩展名 “rar” 而得名。它通过特定算法将一个或多个文件、文件夹进行压缩,大幅减小存储空间,方便数据传输与备份。然而…...
uniapp开发:首次进入 App 弹出隐私协议窗口
前言:在移动应用开发中,隐私协议弹窗是一个非常重要的功能。它不仅符合法律法规的要求(如 GDPR、CCPA 等),还能增强用户对 App 的信任感。本文将介绍如何在 Uniapp 开发的 App 中实现“首次进入弹出隐私协议窗口&#…...
执行pnpm run dev报错:node:events:491 throw er; // Unhandled ‘error‘ event的解决方案
vite搭建的vue项目,使用pnpm包管理工具,执行pnpm run dev,报如下错误: 报错原因: pnpm依赖安装不完整,缺少esbuild.exe文件,导致无法执行启动命令。 解决方案: 根据错误提示中提到…...
OpenCV机器学习(4)k-近邻算法(k-Nearest Neighbors, KNN)cv::ml::KNearest类
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::ml::KNearest 是 OpenCV 机器学习模块中的一部分,它提供了实现 k-近邻算法(k-Nearest Neighbors, KNN)的…...
JVM中的线程池详解:原理→实践
一、为什么需要线程池? 在多线程编程中,频繁地创建和销毁线程会带来显著的性能开销。 想象一下,如果你经营一家西餐厅,每次有顾客到来你都雇佣新的服务员,顾客吃完结账后就解雇——这种模式是不是非常效率低下且成本高…...
SNARKs 和 UTXO链的未来
1. 引言 SNARKs 经常被视为“解决”扩容问题的灵丹妙药。虽然 SNARKs 可以提供令人难以置信的好处,但也需要承认其局限性——SNARKs 无法解决区块链目前面临的现有带宽限制。 本文旨在通过对 SNARKs 对比特币能做什么和不能做什么进行(相对)…...
JavaScript设计模式 -- 外观模式
在实际开发中,往往会遇到多个子系统协同工作时,直接操作各个子系统不仅接口繁琐,还容易导致客户端与内部实现紧密耦合。**外观模式(Facade Pattern)**通过为多个子系统提供一个统一的高层接口,将复杂性隐藏…...
百达翡丽(Patek Philippe):瑞士制表的巅峰之作(中英双语)
百达翡丽(Patek Philippe):瑞士制表的巅峰之作 在钟表界,百达翡丽(Patek Philippe) 一直被誉为“世界三大名表”之一,并且常被认为是其中的至高存在。一句“没人能真正拥有一枚百达翡丽&#x…...
阿里云一键部署DeepSeek-V3、DeepSeek-R1模型
目录 支持的模型列表 模型部署 模型调用 WebUI使用 在线调试 API调用 关于成本 FAQ 点击部署后服务长时间等待 服务部署成功后,调用API返回404 请求太长导致EAS网关超时 部署完成后,如何在EAS的在线调试页面调试 模型部署之后没有“联网搜索…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
