Tag: 哈希表

基于Value然后Key对HashMap进行排序?

可能重复: 如何在Java中的值上对Map 进行排序? 我有一个类型的HashMap: HashMap h = new HashMap(); HashMap包含一个字符串列表,而Integer是一个计数器,用于查找String的次数。 我希望能够做的是基于整数对HashMap进行排序,然后按字符串的字母顺序排序。 目前,我正在记录一个单词的最大出现(变量名为max)并显示如下值: public void print(){ while(max > 0){ for (String key : h.keySet()){ if(h.get(key) == max){ System.out.println(key + ” ” + h.get(key)); } } max–; } } 它不按字母顺序对值进行排序,也访问HashMap最大* h(大小)次。 什么是更好的解决方案?

Hashtable与Java中的整数键

我正在尝试创建一个Hashtable,如下所示: Hashtable<int, ArrayList> block = new Hashtable<int, ArrayList>(); 但我在int和byte上都收到错误,说“在此令牌之后预期的维度”。 如果我使用类似的东西: Hashtable – 一切都很好。 有人可以解释原因吗? 谢谢。

为什么哈希表通过加倍来resize?

在线检查java和google搜索哈希表代码示例,似乎通过加倍来完成表的大小调整。 但是大多数教科书都说桌子的最佳尺寸是素数。 所以我的问题是: 加倍的方法是因为: 它易于实现,或 找到素数太低效了(但我认为找到下一个素数超过n+=2并使用模数测试素数是O(loglogN)这很便宜) 或者这是我的误解,只有某些散列表变体只需要主表大小? 更新: 某些属性需要使用素数在教科书中呈现的方式(例如,二次探测需要一个素数表来certificate,例如,如果一个表不是完整的项目X将被插入)。 发布为重复的链接一般要求增加任何数字,例如25%或下一个素数,并且接受的答案表明我们加倍以使resize操作“罕见”,因此我们可以保证摊销时间。 这并没有回答这样一个问题:使用一个表格大小是素数并且使用素数来resize甚至大于两倍。 因此,我们的想法是保持主要大小的属性考虑resize开销

Java字典搜索器

我正在尝试实现一个程序,它将接受用户输入,将该字符串拆分为标记,然后在字典中搜索该字符串中的单词。 我解析字符串的目标是让每个标记都是英文单词。 例如: Input: aman Split Method: a man am an aman am an am an ama n Desired Output: a man 我目前有这个代码可以执行所有操作直到所需的输出部分: import java.util.Scanner; import java.io.*; public class Words { public static String[] dic = new String[80368]; public static void split(String head, String in) { // head + ” ” + in is a […]

multithreading环境中的Hashmap和哈希表

我真的很困惑这两个集合在multithreading环境中的表现。 哈希表是同步的,这意味着没有2个线程同时更新它的值吗?

Java中是否存在定向非循环图(DAG)数据类型,我应该使用它吗?

我正在用Java建模一个电源子系统。 一个简单的SQLite数据库包含一组线路可替换单元(LRU)以及它们之间的连接。 我正在编写一个Power Model API来简化数据存储的查询,使用DDD模式和存储库。 我正在寻找一个合适的Java集合来建模查询结果。 LRU连接流中有一些特殊情况需要建模: 最初,有一个带有多个端口(<= 16)的配电单元(PDU),为下游LRU供电。 功率流中的典型连接涉及功率源的单个源LRU和功率耗尽的单个Sink LRU。 然而,下游可能存在连接到多个宿LRU的单个源LRU。 电源流中没有循环。 包含上面的#3使我开始考虑从API返回查询结果作为树。 但是我在java.util中找到的唯一一棵树是一个TreeMap键值配对的红黑树,这似乎不合适(或者我想不出用它来建模电源流的适当抽象。)I我也一直在考虑使用LinkedHashSet ,但我不相信它也适合。 我不清楚这个结构中的节点如何指向下游节点。 在这一点上,我并不关心时间和空间的效率。 我的API必须通过向外部客户端(即基于Java的电源监视和控制应用程序的表示层)提供电源连接信息来工作。对开源数据类型/库的使用也没有限制。 在一般的计算机科学术语中,我真正寻求的是有向无环图(DAG)。 是否有针对Java的实现? 我是否认为DAG适合我的情况?

Hashtable使用了多少内存?

在Java中,如果我创建一个Hashtable并在其中放入N个元素,它会占用多少内存? 如果它依赖于实现,那么什么是好的“猜测”?

在hashmap或hashtable中重新散列进程

当大小超过最大阈值时,如何在散列映射或散列表中完成重新散列过程? 是否所有对都被复制到一个新的桶arrays? 编辑: 在重新散列之后,同一个桶(在链表中)中的元素会发生什么? 我的意思是他们在重拍之后会留在同一个桶里吗?

如果哈希表中的键是一个类对象,那么containsKey是如何工作的?

当我们在哈希表中放置一个类Object(有三个数据成员)时,如何防止将另一个条目放入其密钥具有相同三个数据成员的哈希表中? 我猜这将是一个新的对象。 因此,即使存在与等待插入的数据成员具有相同数据成员的键(此类对象),hashtable.containsKey()也将返回false。 更清楚:我有一个类似的课程 class Triplet { private Curr curr; private Prev prev; private Next next; } 我有一个哈希表结构,如: Hashtable table = new Hashtable(); 当我做: if(!table.containsKey(triplet_to_inserted)) table.put(triplet, new Integer(0)); 即使表中包含已具有相同数据成员的三元组,这是否会插入副本? 即:triplet_to_be_inserted.curr,triplet_to_be_inserted.next和triplet_to_be_inserted.prev如果是,如何防止这种情况? 此外,对于要插入的任何条目,containsKey()是否会返回true? 如何解决这个问题? 谢谢。

为什么Java中的哈希表(Hashtable)中的’t’没有大写

Java中的所有内容似乎都遵循大写规则,除了Hashtable。 Hashtable ht = new Hashtable(); 而不是 ArrayList a = new ArrayList(); 要么 HashMap a = new HashMap(); 为什么是这样 ? 哈希表只读一个字(Hashtable)吗?