问题内容: 这很奇怪。一位同事询问了java中myArray.hashCode()的实现。我以为我知道,但是后来我进行了一些测试。检查下面的代码。我注意到的奇怪想法是,当我编写第一个系统时,结果是不同的。请注意,这几乎就像报告内存地址并修改类一样,将地址或其他内容移动了。只是想我会分享。 问题答案: 该方法继承自,这意味着哈希码取决于引用。要基于数组的内容获取哈希码,请使用。 请注意,尽管它是一个
问题内容: 由于以下原因,我想使用不区分大小写的字符串作为HashMap键。 在初始化期间,我的程序使用用户定义的String创建HashMap。 在处理事件(在我的情况下为网络流量)时,我可能会在其他情况下收到String,但是我应该能够忽略HashMap中的来自我的情况而从HashMap 定位。 我遵循了这种方法 LookupCode.java 因此,我为每个事件创建一个CaseInsensi
问题内容: 我有用户将在命令行/终端Java程序上输入的命令列表(i,h,t等)。我想存储命令/方法对的哈希: 这样我就可以得到类似以下的代码: 这可能吗?如果没有,那么简单的方法是什么? 问题答案: 使用Java 8+和Lambda表达式 使用lambda(可在Java 8+中使用)进行以下操作: 在这种情况下,我很懒惰并重用了该接口,但是也可以使用我在答案的Java 7版本中发明的-。 此外,
问题内容: 因此,我正在尝试使用a 将自己的值映射到一个值。我的对象在下面(为简洁起见删除了一些代码) 我通过从文本文件加载数据将一堆这些对象映射为字符串。稍后,基于(独立)用户输入,我尝试使用Object 查询。containsKey()返回false,而get()返回null,就好像我从未将密钥添加到映射中一样。但是,奇怪的是,如果我使用迭代在地图上下面的代码(其中是从用户输入制造) 我为代码
问题内容: 我当时想将Double用作HashMap的键,但是我知道浮点比较并不安全,这让我开始思考。Double类上的equals方法是否还不安全?如果是,那将意味着hashCode方法也可能不正确。这意味着使用Double作为HashMap的键将导致不可预测的行为。 有人可以在这里确认我的任何猜测吗? 问题答案: 简短答案: 请勿这样做 长答案: 这是密钥的计算方式: 实际的键将是一个对象,因
问题内容: 今天打开了LinkedHashSet源代码,发现了一些有趣的东西: 问题是:为什么当HashSet已经是Set时,为什么它们既需要“ extends HashSet”又需要“ implements Set”? 问题答案: 我问过乔什·布洛赫(Josh Bloch),他告诉我这是一个错误。很久以前,他曾经认为其中有一些价值,但是他自从“看到了光”。显然,JDK维护人员认为以后不应该撤消此
问题内容: Java中的ConcurrentHashMap和Hashtable有什么区别? 对于线程化应用程序,哪个更有效? 问题答案: 使用多个存储桶来存储数据。这样可以避免读取锁定,并大大提高了性能。两者都是线程安全的,但是使用显然可以赢得性能。 从using 读取时,没有锁,与之相反,所有操作都只是简单地同步了。 在Java的旧版本中发布,而Java 5+ 则是。 在单线程应用程序中使用是最
问题内容: 我正在更深入地学习哈希码,并发现: 1.如果覆盖equals(),则也必须覆盖hashcode()。 2.要查找2个对象是否为同一对象,请使用==运算符 考虑到这两个因素,在Java中,我假设使用什么来比较 两个实例是否相同, 实际上在做 但是通过运行下面的测试,似乎我错了。 根据使用并查看是否调用的测试。 所以我的问题是,如果可以用来比较对象是否相同,覆盖e 和比较方法的目的是什么?
问题内容: 我开始学习Java。什么时候可以在TreeMap上使用HashMap? 问题答案: 是一个的示例,这意味着可以对键的顺序进行排序,并且在对键进行迭代时,可以期望它们会按顺序排列。 另一方面,不作任何保证。因此,当遍历a的键时,您无法确定它们将以什么顺序排列。 一般而言,它会更有效,因此只要您不关心键的顺序,都可以使用它。
问题内容: 假设您有一个类,并创建了一个HashSet来存储此类的实例。如果尝试添加相等的实例,则集合中仅保留一个实例,这很好。 但是,如果HashSet中有两个不同的实例,并采用一个实例并使其与另一个实例完全相同(通过复制字段),则HashSet将包含两个重复的实例。 这是演示此代码的代码: 上面代码的输出: 有没有一种方法可以强制HashSet验证其内容,以便删除在上述情况下创建的可能重复条目
问题内容: 这是一个简单的问题,我有一个简单的HashMap,我想将其反转键和值。 我想创建一个新的HashMap,在其中放置相反的内容。 问题答案: 它们都是独一无二的,是的 如果您确定自己的值是唯一的,则可以遍历旧地图的条目。 另外,您可以使用Guava提供的双向地图,并使用方法: 随着java-8的发布,您也可以通过以下方式进行操作: 最后,我将我的贡献添加到了质子包装库中,该库包含Stre
问题内容: 我想知道Java在添加项目时如何在(或)中对项目进行排序。密钥是按哈希码,内存引用还是分配优先级排序的? 这是因为我注意到中的相同对并不总是以相同的顺序排列 问题答案: 无序的 您不能也不应承担任何其他责任。 此类无法保证地图的顺序。特别是,它不能保证顺序会随着时间的推移保持恒定。 使用插入顺序。 此实现的不同之处在于,它维护一个遍历其所有条目的双向链接列表。此链表定义了迭代顺序,通常
问题内容: 是否有可能为集合中未找到的所有键返回默认值? 问题答案: [更新] 正如其他答案和评论者所指出的那样,从Java 8开始,您可以简单地调用。 [原版的] 没有Map实现可以完全做到这一点,但是通过扩展HashMap来实现自己的实现很简单:
问题内容: 是用什么包装类之间的差异上,和? 它只是能够在迭代()的同时进行修改吗? 问题答案: 同步: 每种方法都使用对象级锁进行同步。因此,synchMap上的get和put方法获取一个锁。 锁定整个集合是性能开销。当一个线程保持该锁时,其他任何线程都不能使用该集合。 是在JDK 5中引入的。 在对象级别没有锁定,锁定的粒度要好得多。对于,锁定可以处于哈希图存储桶级别。 较低级别的锁定的结果是
问题内容: 是否总是需要在HashMap中检查密钥是否存在? 我有一个说有1000个条目的HashMap,我正在考虑提高效率。如果HashMap的访问非常频繁,则每次访问时检查密钥是否存在将导致大量开销。相反,如果键不存在,因此发生异常,我可以捕获该异常。(当我知道这种情况很少发生时)。这将减少对HashMap的访问。 这可能不是一个好的编程习惯,但是它将帮助我减少访问次数。还是我在这里想念什么?