Java 具有独立密钥等式的有序映射

Java 具有独立密钥等式的有序映射,java,data-structures,Java,Data Structures,是否存在诸如TreeMap或ConcurrentSkipListMap之类的有序键值收集数据结构的任何实现,其中键相等性不依赖于有序比较器/比较器实现 我同意,大多数情况下,这两个概念是相互关联的,并允许更高性能的数据结构,但当您希望平等的概念只是为了强制实现键的唯一性时,将两者分开就很方便了 想象一下,有一个C类,其字段id和秩用作映射中的键。是否有一种数据结构允许您在id hashCode+equals上强制唯一性,但让映射按秩compareTo/comparator排序 编辑: 正如Sot

是否存在诸如TreeMap或ConcurrentSkipListMap之类的有序键值收集数据结构的任何实现,其中键相等性不依赖于有序比较器/比较器实现

我同意,大多数情况下,这两个概念是相互关联的,并允许更高性能的数据结构,但当您希望平等的概念只是为了强制实现键的唯一性时,将两者分开就很方便了

想象一下,有一个C类,其字段id和秩用作映射中的键。是否有一种数据结构允许您在id hashCode+equals上强制唯一性,但让映射按秩compareTo/comparator排序

编辑:
正如Sotirios Delimanolis在评论中指出的那样,从概念上讲,这些机制hashcode/equals/compareTo/comparator是不可能做到的,因为这将违反他们的合同。我想在这些限制之外仍有可能执行此操作,因此我将保留此选项。

compareTo为相等的操作数返回0。您是对的,它也是comparator协定的一部分。与equals一致当且仅当c.comparee1时,e2==0对于S中的每个e1和e2具有与e1.equals2相同的布尔值。似乎我所问的在概念上是不可能的,至少对于这些构造。谢谢。刚刚编辑了这个问题以包含您指出的限制。如果您只在排名计算中包含id,它不会解决问题。当comparator第一次考虑秩时,如果且仅当秩相等,则按id排序。不要这样认为,因为使用compareTo==0来确定相等,所以如果我想确保只有一条id为X的记录,改变顺序考虑秩+ ID仍然不能识别具有相同ID的对象,因为它们必须具有相同的秩和ID,所以CuffReto将返回0,这不是我们想要的。