对于Java中Map的put方法进行分析

Java学习

Map的put方法:

1.要是之前没有关于该键的映射,在存储该键值对,然后然会null

2.要是之前已经有关于该键的映射,则使用新的值替换旧值,并返回旧值。

注意:返回null,也有可能是原来存在该键到null的映射,所以当更新值得时候
      返回了以前的旧值Null


HashMap存储键值对的示意图:

调用put()存储键值对的示意图

HashMap存储键值对时,发现找到的位置上已经存储了元素

    情况一:调用该元素键的equals方法与该位置上元素的键进行比较,如果返回ture
           则视新键与已经存在的键相同,用新值去更新旧值,然后put方法返回旧值

HashMap更新旧值

    情况一:调用该元素键的equals方法与该位置上元素的键进行比较,如果返回false
           则新键与已经存在的键不相同,任然可以将新的元素存储在该位置。

Map调用put存储元素,找到的位置一样,但是键不一同

HashMap的put()方法返回null的特殊情况:
        要是已经存在键的映射,但是值是null,那么调用put()方法再更新键的值时,
    put()方法会把旧值null返回,这是返回null的特殊情况。存在元素时,要是找到
    的位置上没有键的映射,put()方法也是返回null。

Map存储数据返回null的特殊情况

    Java学习  19:28 2016/8/3
PyTorch 中,自定义数据集可以通过继承 `torch.utils.data.Dataset` 类来实现。这个类需要实现两个方法:`__len__` 和 `__getitem__`。 `__len__` 方法返回数据集的长度,即样本数量。`__getitem__` 方法返回数据集中一个索引对应的样本。 下面是一个简单的例子,假设我们有一个文件夹 `data`,里面包含若干张图片和对应的标签,我们要把这个数据集PyTorch 加载起来: ```python import os from PIL import Image import torch.utils.data as data class CustomDataset(data.Dataset): def __init__(self, root_dir): self.root_dir = root_dir self.img_list = os.listdir(root_dir) def __len__(self): return len(self.img_list) def __getitem__(self, index): img_path = os.path.join(self.root_dir, self.img_list[index]) img = Image.open(img_path).convert('RGB') label = int(self.img_list[index].split('_')[0]) return img, label ``` 在上面的例子中,我们定义了一个 `CustomDataset` 类,它有一个构造函数 `__init__`,接收一个参数 `root_dir` 表示数据集所在的文件夹路径。`__init__` 方法初始化了 `img_list` 属性,里面保存了所有图片文件名。 `__len__` 方法返回了 `img_list` 的长度,即数据集中样本的数量。 `__getitem__` 方法接收一个索引 `index`,返回了数据集中第 `index` 个样本的图片和标签。具体地,它首先获取了图片文件的路径,然后用 `PIL` 库打开图片并转换成 RGB 模式。最后,它从文件名中解析出标签信息,并把图片和标签一起返回。 有了这个自定义数据集类,我们就可以用 PyTorch 的 `DataLoader` 类来加载数据集了。例如: ```python import torch.utils.data as data dataset = CustomDataset('data') dataloader = data.DataLoader(dataset, batch_size=32, shuffle=True) ``` 在上面的例子中,我们创建了一个 `CustomDataset` 对象 `dataset`,然后用 `DataLoader` 类来初始化 `dataloader` 对象。`DataLoader` 的第一个参数是数据集对象,第二个参数是批量大小,第三个参数是是否打乱数据集顺序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值