问题内容: 有人可以向我解释静态HashMap#hash(int)方法吗? 产生均匀分布的哈希的背后的理由是什么? 一个例子将使它更容易消化。 澄清 我知道运算符,真值表和按位运算。我只是无法真正解码实现,也无法真正评论。甚至是背后的原因。 问题答案: 是逻辑右移(无符号扩展)(JLS 15.19 Shift Operators ),并且是按位异或(JLS 15.22.1 Integer Bitw
问题内容: 在一次采访中,我被要求计算内存使用量,如果其中有200万个项目,则估计将消耗多少内存。 例如: 映射是这样的。 我如何估计Java中此HashMap对象的内存使用情况? 问题答案: 简短的答案 为了找出对象的大小,我将使用探查器。例如,在YourKit中,您可以搜索对象,然后获取它以计算其深度大小。这将使您很清楚地知道如果对象是独立的,则使用多少内存,并且该对象的大小是保守的。 怪癖
问题内容: 是的实现,并且的构造函数接收类型参数。那么,为什么必须对其进行显式转换? 问题答案: 这是因为extends(又实现了)。您尝试将其输入。因此,它是不兼容的。 您需要将字符串属性一一输入到地图中。 例如:
问题内容: 我正在阅读Head First Java的书中的一句话: 关键是哈希码可以相同,而不必保证对象相等,因为该方法中使用的“哈希算法” 可能会为多个对象返回相同的值。 为什么该方法可能为不同的对象返回相同的值?这不会引起问题吗? 问题答案: *对对象进行 *散列 意味着“ 找到可以由相同实例一次又一次地再现的良好的描述性值(数字) ”。由于Java的哈希码类型为,因此只能具有不同的值。这就
问题内容: 如JDK文档中所指定,Hashtable不允许空键或值。HashMap允许一个null键和任意数量的null值。为什么是这样? 问题答案: Hashtable是较老的类,通常不鼓励使用Hashtable。也许他们看到了对null键的需求,更重要的是对null值的需求,并将其添加到HashMap实现中。 HashMap是较新的,并且具有更高级的功能,这些基本上只是对Hashtable功能
问题内容: 看一下Java 6的源代码,实际上是通过使用Set的每个条目上的伪对象实例来实现的。 我认为这浪费了4字节(在32位计算机上)用于条目本身的大小。 但是,为什么仍然使用它呢?除了使代码维护更容易之外,还有什么理由要使用它? 问题答案: 实际上,不只是。 Java 6中该接口的 所有 实现都基于底层。这不是必需的;这只是实现的方式。您可以通过查阅有关的各种实现的文档来自己查看。 您的主要
问题内容: 如果我在某个对象上调用该方法,它将返回该对象的内部地址(默认实现)。该地址是逻辑地址还是物理地址? 在垃圾回收中,由于内存压缩,对象在内存中发生移位。如果我在GC之前和之后调用哈希码,它将返回相同的哈希码(返回),如果是,则为什么(由于压缩地址可能会更改)? 问题答案: @erickson或多或少是正确的。返回的哈希码在对象的生存期内不变。 (通常)实现此方法的方式非常聪明。当对象由垃
问题内容: 我知道如何从-> “转换”一个简单的Java ,即: 现在,我想对地图进行基本相同的操作,即: 解决方案不应限于-> 。就像上面的示例一样,我想调用任何方法(或构造函数)。 问题答案: 它不如列表代码那么好。您不能在通话中构造new ,因此工作会混入通话中。
问题内容: 即使未对哈希集进行排序,以下代码也会产生输出。 这是为什么? 问题答案: 编辑:从Java 8及更高版本开始,以下内容不再适用。这证明您不应该依赖未记录的Java行为。 此行为是由几个单独的原因引起的: 整数对自己散列 在Java中,s和s由数组备份 它们还使用较高的位修改哈希,以修改较低的位;如果哈希值在0..15范围内,则不会被修改 对象运行的存储桶取决于修改后的哈希的低位 在地图
问题内容: 我正在创建一个新的Map并将字符串推入其中(没什么大不了的)-但是我注意到随着Map的增长,字符串正在重新排序。是否可以停止这种重新排序,以便地图中的项目保持其放入的顺序? 问题答案: 如果您关心订单,可以使用。实现该接口的实际类(至少在大多数情况下是)。或者,在仍然使用基于哈希表的容器的同时,也维持其顺序。
问题内容: 我正在使用a ,但是在发生碰撞时该方法的工作原理还没有得到一个直接的答案。 假设对象放置在相同的 键中 。它们存储在吗?它们是否被覆盖,以便仅存在该键中的最后一个对象存在?他们在使用其他碰撞方法吗? 如果将它们放在中,是否可以检索整个列表?如果不是,是否有其他 Java 内置地图可以在其中执行? 就我的目的而言,单独的链接将是理想的,就好像有冲突一样,我需要能够浏览列表并获取有关列表中
问题内容: 我正在使用HashMap将x,y值映射到笛卡尔平面上。对于非常小的x,非常大的y值,什么是有效的HashCode? 目前我正在使用: 我正在使用.put方法将两个x,y对插入到哈希图的键中,以避免任何重复的x,y对。不确定这是否是最有效的解决方案。 问题答案: 有时,最好的了解方法是对您的靶场进行一些蛮力测试。但最终,您始终可以编写一个哈希函数,如果性能变差,可以稍后再进行修复。过早的
问题内容: 在放入HashMap期间发生冲突时,是否会调整地图大小或将条目添加到该特定存储桶中的列表中? 问题答案: 当您说“冲突”时,您是指相同的哈希码吗?哈希码用于确定要使用HashMap中的哪个存储桶,并且该存储桶由具有相同哈希码的所有条目的链表组成。然后在返回或引导(获取/放入)之前比较条目的相等性(使用.equals())。 请注意,这是专门用于HashMap的(因为这是您所要求的),而
问题内容: 我试图从XSD架构生成一些Java类。我确切地知道我想用Java生成什么,并且我正在尝试编写相应的XSD模式。 我需要代表一个java.util.HashMap(HashMap)。我找不到如何在XSD模式(或xjb绑定文件)中指定想要Java中的HasMap的方法。它总是生成一个列表。 在这里我要生成的代码 我已经试过了: 但是它仍然继续生成mapEntry的java.util.Lis
问题内容: 我试图理解为什么当用作Hashmap密钥时,将String和Stringbuilder / StringBuffer区别对待。让我通过以下插图使我的困惑更加清楚: 示例1,使用String: 上面的代码片段打印为“ 1”。 Example#2,使用StringBuilder(或StringBuffer): 上面的代码片段打印为“ 2”。 任何人都可以解释一下行为差异的原因。 问题答案: