没有唯一键的TreeMap

| 我使用TreeMap类将消息信息及其优先级存储在应用程序中。 我使用treeMap类来执行此操作,因为此类基于键值自动对元素进行排序,例如,我遇到这种情况:
enum Priority { HIGH, MEDIUM, LOW }
TreeMap<Priority,String> tMap = new TreeMap<Priority,String>();
我使用密钥(消息的优先级)根据优先级的严重性自动排序消息,但是问题是,在TreeMap中,密钥是唯一的,如果我尝试插入两个具有相同优先级的消息,则第一个消息将被覆盖... 。 如何更改此行为并禁用TreeMap的唯一约束? 是否有类似TreeMap的类允许将相同的Key放入多个元素?     
已邀请:
           如何更改此行为并禁用TreeMap的唯一约束? 你不能。键的唯一性是
Map
接口的基本不变性。   是否有类似TreeMap的类允许将相同的Key放入多个元素? 您可以将其实现为
Map<Priority,List<String>>
并自己管理列表。如果(例如)您要按fifo顺序处理给定优先级的消息,则这是一个不错的选择。 另外,您可以使用3类。例如从Apache Commons Collections或Guava中获得。     
        在Google Guava库中检出TreeMultimap类。     
        您可能希望完全使用其他集合类型。但是,如果您打算使用TreeMap,则: 1)考虑使用更复杂的Priority类。也许创建一个优先级类型,它既具有基本优先级(HIGH),又具有唯一的数字,每次获得新的数字时都会递增。然后使用该额外值实现equals,hash,Comparable等。 2)对于每个优先级,该值可以是一个Collection。检索给定优先级的值,并将新值附加到检索到的集合的末尾。但是,在那时,使用TreeMap有点过分。 另外,看看Apache Commons Collections。     
        您可能要使用其他结构而不是树形图。 地图就是地图,行为就是它的本质,因此在地图中,根据定义,您不能拥有相同的键两次。     

要回复问题请先登录注册