Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 没有唯一键的树映射_Java_Jdk1.6 - Fatal编程技术网

Java 没有唯一键的树映射

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(); 我使用键(消息的优先级)根据优

我使用TreeMap类在应用程序中存储消息信息及其优先级。 我使用了一个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
,只使用三个独立的
队列。