Java 没有唯一键的树映射
我使用TreeMap类在应用程序中存储消息信息及其优先级。 我使用了一个treeMap类来完成它,因为这个类会根据键值自动对元素排序,例如,我遇到这样的情况:Java 没有唯一键的树映射,java,jdk1.6,Java,Jdk1.6,我使用TreeMap类在应用程序中存储消息信息及其优先级。 我使用了一个treeMap类来完成它,因为这个类会根据键值自动对元素排序,例如,我遇到这样的情况: enum Priority { HIGH, MEDIUM, LOW } TreeMap<Priority,String> tMap = new TreeMap<Priority,String>(); enum优先级{高、中、低} TreeMap tMap=新的TreeMap(); 我使用键(消息的优先级)根据优
enum Priority { HIGH, MEDIUM, LOW }
TreeMap<Priority,String> tMap = new TreeMap<Priority,String>();
enum优先级{高、中、低}
TreeMap tMap=新的TreeMap();
我使用键(消息的优先级)根据优先级严重性对消息进行自动排序,但问题是在树映射中,键是唯一的,如果我尝试插入两条具有相同优先级的消息,第一条消息将被覆盖
如何更改此行为并禁用树映射上的唯一约束
有没有像TreeMap这样的类允许为多个元素放置相同的键
如何更改此行为并禁用树映射上的唯一约束
你不能。键的唯一性是Map
接口的基本不变量
有没有像TreeMap这样的类允许为多个元素放置相同的键
您可以将其实现为映射
,并自己管理列表。如果(例如)希望以fifo顺序处理给定优先级的消息,这是一个很好的选择
或者,您可以使用
MultiMap
类;e、 g.从或。您可能需要另一种集合类型。但如果您打算使用TreeMap,那么:
1)考虑使用更复杂的优先级类。也许可以创建一个优先级类型,它既有基本优先级(高),又有一个唯一的数字,该数字在每次获得新的优先级时都会递增。然后使用该额外值实现equals、hash、Comparable等
2) 对于每个优先级,该值可以是一个集合。检索给定优先级的值,并将新值附加到检索到的集合的末尾。不过,在这一点上,使用树映射有点过头了另外,请查看。您可能希望使用另一种结构,而不是树形图
地图是地图,其行为就是地图,因此在地图中,同一个键的定义不能重复两次。请查看Google Guava库中的TreeMultimap类 如果需要FIFO顺序,ArrayDeque比list好得多,可能
Map
如果OP实际上只有三个优先级,他应该跳过Map
,只使用三个独立的队列。