草庐IT

HashMap详解

全部标签

java - 为什么我的Key中的 '1'位越多,放到HashMap中的时间就越长?

我正在为一个类(class)做一个项目,该类(class)专注于在内存中存储一​​个大部分为0值的巨大矩阵,并对其执行一些矩阵数学运算。我的第一个想法是使用HashMap来存储矩阵元素,并且只存储非零元素,以避免使用大量内存。我想为HashMap创建一个键,它代表元素的行号和列号,当我访问映射中的该条目时,我可以重新提取两个值。我对Java和C#都不了解-在C#中我会制作一个包含Row和Column成员的struct,但在Java中我很快意识到没有用户值类型。随着最后期限的临近,我做了一个安全的赌注,将Key设为长。我使用一些非常简单的位移位将行数据(32位整数)存储在前32位中,将列

java - 创建不可变通用对象的 HashMap

我不认为有一种方法可以有效地(如果有的话)这样做,但我想我会问一下以防其他人知道。我正在寻找创建自己的缓存/查找表。为了让它尽可能有用,我希望它能够存储通用对象。这种方法的问题在于,即使您可以制作Collections.unmodifiableMap,immutableMap,etc,这些实现只会阻止您更改Map本身。它们不会阻止您从map中获取值并修改其基础值。本质上,我需要的是达到HashMap效果的东西,但据我所知,这样的事情不存在。我原本以为我可以在get方法中只返回缓存中值的副本,但由于Java的Cloneable界面被顶起,无法简单调用publicVgetItem(Kkey

java - volatile hashmap 的特征

我正试图牢牢把握一个变量如何声明为privatevolatileHashMap>data;将在多线程环境中运行。我的理解是volatile意味着从主内存而不是从线程缓存中获取。这意味着如果正在更新一个变量,在更新完成之前我不会看到新值并且我不会阻止,而是我看到的是最后更新的值。(顺便说一句,这正是我想要的。)我的问题是何时检索ArrayList并在线程B读取时在线程A中添加或删除字符串,volatile到底影响了什么?关键词?HashMap仅或影响扩展到HashMap的内容(K和V)还有吗?那是线程B获得ArrayList的时候当前正在线程A中修改实际返回的是ArrayList的最后一

java - 如何按类类型创建泛型类型安全的 HashMap?

这个问题在这里已经有了答案:Javamapwithvalueslimitedbykey'stypeparameter(6个答案)关闭8年前。我想创建一个HashMap,将特定的类类型映射到一个特定的新对象。稍后我想传递类类型并获取对该特定对象的引用。简单示例:Map,?>values=newHashMap();publictget(Classtype){returnvalues.get(type);}//petandcardonotshareanyinterfaceorparentclassclassPet;classCar;//error:notapplicableforargume

java - 获取 HashMap 中具有类似 'some value' 的键的键列表

在Mysql中我们可以查询一个有子句“WHEREnameLIKE'%someName%'”的表,我们是否可以在java中拥有与HashMap相同的功能,如果可以,我们如何更有效地实现这一点在更短的时间内不迭代每个元素? 最佳答案 如果您使用的是JavaSE8和新的StreamsAPI:有一个filter我认为这基本上就是您正在寻找的方法。例如类似(未经测试!):myMap.entrySet().stream().filter(entry->entry.getKey().contains("someName")).map(entry-

java - Java中的大量对象(使用HashMap)

你好,我目前正在使用Java进行单词预测。为此,我使用了基于NGram的模型,但我遇到了一些内存问题...我第一次有这样的模型:publicclassNGramimplementsSerializable{privatestaticfinallongserialVersionUID=1L;privatetransientintcount;privateintid;privateNGramnext;publicNGram(intidP){this.id=idP;}}但它占用大量内存,所以我认为我需要优化,我想,如果我有“hellotheworld”和“hellothepeople”,而不

jvm堆外内存排查详解

文章目录前言一、堆外内存排查1.背景2.内存对比3.堆外内存检查4.排查堆外内存5.glibc内存泄露结尾前言内存泄漏想必大家并不陌生,对于jvm的内存泄漏,有很多排查手段和方便的排查工具,例如MAL,但是对于非jvm的内存,如直接内存的使用,排查起来较为麻烦,下面介绍一下相关的排查手段一、堆外内存排查1.背景在一次内存检查的过程中,意外发现在linux的java进程内存占用,远高于jvm的内存设定最大值(堆+非堆),第一时间是考虑java可以采用直接内存,如mmap对内存进行使用,但经过排查,发现并非如此,下面看一下排查过程2.内存对比首先通过top,可以看到java进行使用了4.2g的内存

李宏毅_机器学习_作业4(详解)_HW4 Classify the speakers

本次作业需要学习完transformer后完成!目录标题Task助教样例code解读数据集分析DatasetDataloaderModelLearningratescheduleModelFunctionValidateMainfunctionInferenceMainfunctionofinference样例code得分MediumStrongTransformer->ConformerSelf-attentionpoolingTask做语者辨识任务,一共有600个语者,给了每一个语者的语音feature进行训练,然后通过test_feature进行语者辨识。(本质上还是分类任务Classi

java - HashMap Java 避免冲突的例子

我正在使用HashMap在Java中存储key和Object.我阅读了有关hashmap冲突的信息,并试图通过使用链表来避免它。我在网上做了一些搜索,但找不到如何执行此操作的示例。有人能给我指点一个用链表实现HashMap的在线资源吗? 最佳答案 JavaHashMap已经以这种方式为您处理了冲突。您需要做的就是确保覆盖并实现key的hashCode()和equals()方法。每个哈希码将映射到一个特定的“桶”。每个桶都包含一个用于冲突情况的链表。避免(或者更确切地说,最小化)冲突的唯一方法是创建一个散列函数,在整个HashMap中

java - 调用 Hashmap.remove() 后是否会立即进行垃圾回收?

Java代码如下:Randomr=newRandom(1234697890);HashMap>map=newHashMap>();Listlist=newArrayList();for(inti=0;i当i达到37553时,java.lang.OutOfMemoryError:Javaheapspace发生。循环中似乎没有发生垃圾回收。现在我想知道如何解决这个问题。 最佳答案 尝试按如下方式重写代码,你应该不会出现OOME的...Randomr=newRandom(1234697890);HashMap>map=newHashMap