【发布时间】:2016-02-22 06:52:32
【问题描述】:
我正在尝试优化一些代码,当我这样做时,我通常最终会从哈希结构中获得帮助。
我想要做的是基于某些属性以非常快速的方式将对象分成多个集合。基本上类似于 SQL GROUP BY 语句,但用于 Java。
问题是我想使用HashMap<Object, ArrayList<Object>> 来执行此操作。我想使用多种分组方式,但Object 只能有一个hashCode()。
有没有办法拥有多个hashCodes() 以便能够通过多种方法进行分组?是否有其他结构可以解决此类问题?我可以使用 Java 8 lambda 表达式在 HashMap 参数中发送 hashCode() 吗?我是不是傻了,有没有这么复杂的超快速方法?
注意:我想要的 hashCodes 使用多个不恒定的属性。例如,创建一个唯一代表这些属性的字符串是行不通的,因为我必须每次都刷新字符串。
【问题讨论】:
-
我不明白。假设对象 A 根据其当前属性分配给组 12。您将其存储在 HashMap 中。然后属性改变:这将改变对象的组。因此,您存储在 HashMap 中的内容现在已无用。 Map 键应该是不可变的。
-
你不应该关心哈希码的值。每个分组键集都有一个
MultiMap,MultiMap键是描述分组键的对象,值是该组中的对象列表。
标签: java group-by hashmap hashcode