问题内容: 我正在阅读Java 1.6 API提供的HashMap类的代码,无法完全理解以下操作的需要(位于put和get方法的主体中): 该方法具有以下主体: 通过对提供的哈希码执行位操作,可以有效地重新计算哈希。即使API声明如下,我也无法理解这样做的必要性: 这很关键,因为HashMap使用2的幂的哈希表,否则哈希表在低位无差异时会遇到冲突。 我确实知道键值参数存储在数据结构数组中,并且该数
问题内容: 考虑以下测试案例,在equals内使用hashCode()方法作为便捷的快捷方式是一种不好的做法吗? 主要方法的输出: 问题答案: 通常,比较hashCode()而不是使用equals()根本不安全。当equals()返回false时,根据hashCode()的约定,hashCode() 可能 返回相同的值。
问题内容: 当我尝试使用哈希表类时,Netbeans给我一个错误,说: 尽管仍受支持,但这些类已被JDK1.2集合类淘汰,并且可能不应在新开发中使用。 但是,我似乎无法在网上找到更好地替代的示例。有什么建议? 问题答案: 最直接的替代是a 。 可能 很重要的区别是,所有相关的方法都在 不 同步的情况下同步。
问题内容: 我正在创建一个简单的android应用程序…启动Android Studio时更新gradle时遇到了麻烦,它也提示了我。 更新完成后,我收到以下错误: 错误:任务’:app:compileDebugJavaWithJavac’的执行失败。 无法为文件“ /Users/damenTomassi/AndroidStudioProjects/AstraeaDemo/app/src/main
问题内容: 我试图创建一个地图列表。在下面的代码中,我期望得到 但是,我只有 如何避免覆盖第一张地图?这是我的代码: 谢谢! ========================= 作为来自过程语言背景(SAS)的Java学习者,我花了很多时间学习和试验ArrayList,LinkedList,Map,LinkedMap等- 我无法使它正常工作。而且我不了解我的有限知识。现在,以下所有答案都很出色!他
问题内容: 从HashSet的JavaDocs中: 该类为基本操作(添加,删除,包含和大小)提供恒定的时间性能,假设哈希函数将元素正确地分散在存储桶中。对此集合进行迭代需要的时间与HashSet实例的大小(元素的数量)加上后备HashMap实例的“容量”(存储桶的数量)之和成比例。因此,如果迭代性能很重要,则不要将初始容量设置得过高(或负载因子过低),这一点非常重要 为什么迭代需要的时间与总和(集
问题内容: 我需要一个Java实现,它忽略类中字段的顺序。首先,节点可以是第二个节点,第二个可以是节点优先。 这是我的方法取决于顺序: 有没有一种方法可以计算出以下边缘相同但唯一的哈希值? 应该是。 问题答案: 您可以使用某种交换运算来代替现在的运算,例如加法: 我建议您仍然使用乘数,因为它为哈希码提供了一些熵。在这里查看我的回答: 遵循一些良好的哈希规则是: 混淆您的运营商。通过混合您的运算符,
问题内容: 许多线程可能会填充,在某些情况下,我需要等待(阻止)直到HashMap中存在某个对象,例如: 想知道这样的事情是否已经存在,我讨厌重新发明轮子。 问题答案: 据我所知,没有可用的“转移地图”。尽管从理论上讲创建一个并不太困难。 此类中有明显的排除项。更不用说锁粗化了;不用说它的性能不好,但是您应该了解发生了什么
问题内容: 有没有办法找出一个类是否已重写和? 问题答案: 您可以使用反射 如果将注释掉,如果没有注释,将打印。 将返回实现该对象的类的对象。 请注意 ,仅适用于方法。但是,在这种情况下,和必须。取决于其他算法,该算法将需要更改。
问题内容: 我正在使用Java 7,下面有下面的类。我实现和正确的,但问题是,收益的主要方法,下面又返回两个对象相同的散列码。我可以让更多的眼睛看着这个班级,看看我在这里做错了什么吗? 更新: 我更换了我称之为行方法用我自己的哈希函数:。它返回一个不同的哈希码,这是当两个对象不同时应该执行的操作。是方法打破? 对你的帮助表示感谢! 问题答案: 实际上,您碰巧触发了纯粹的巧合。:) 碰巧是通过相继添
问题内容: 鉴于这种: 输出为: 这是为每个对象提供false,但每个String对象的哈希码都相同。为什么会这样呢? 问题答案: 确实比较 对象的 真实相等性(我的意思是-两个引用都指向同一个对象),而不是它们的内容,而比较内容(至少对于String)。 并指向不同的对象。 还要注意,如果对象相等,则它们的哈希必须相同,但是如果哈希码相同,则并不意味着对象相等。
问题内容: 和遍历函数之间是否有性能差异? 问题答案: 我认为,由于其高级实现,遍历必须更快 这就是为什么: 让我们逐步执行。 该实施是这样的: 在 从扩展和继承相同的实现。 两者的实现方式不同。 因为它从 但是从 因此, 差异 本质上可以归结为实施。 因为它只是调用e.after,其中e是,但是对于遍历数组以查找下一个下一个要涉及一些工作。 UPDATE :用于在 Entry []不是连续的存储
问题内容: 我们知道“ final”关键字在Java中的用途。在将变量声明为final时,我们必须初始化变量。例如“ final int a = 10;” 我们无法更改“ a”的值。但是,如果我们选择HashTable,甚至可以将HashTable声明为final,也可以添加一些值。 例:: 现在,我将MYHASH HashTable声明为final。如果我尝试向此添加更多元素,则它会被接受。 现
问题内容: 我想做一个Java游戏。首先,程序要求玩家的数量。之后,它询问他们的名字。我将他们的名字放在ID和分数中。在游戏结束时,我会计算分数,然后将其放在(特定名称的特定分数)中。有谁知道如何做到这一点?这是我的代码: 玩家: 主要: 有谁知道我最后如何打印,例如: 更新: 我主要是这样做的(正如Jigar Joshi建议的那样) 当我将球员的两个名字“ a”和“ b”放进去时,它会显示“分数
问题内容: 我正在使用Runnable每秒自动从玩家的冷却时间中减去20,但是我不知道如何在迭代过程中替换值。如何更新每个键的值? 问题答案: 使用Java 8: 使用Java 7或更旧版本: 您可以迭代条目并更新值,如下所示: