gpt4 book ai didi

java - 创建一个以集合为键的 map ?

转载 作者:行者123 更新时间:2023-12-01 06:35:26 27 4
gpt4 key购买 nike

是否可以创建一个以集合(任何类型的集合)为键的映射?

如果我在最常见的集合上尝试它,我会被告知该集合无法进行比较。

我一直在尝试为自定义集合编写一个compareTo函数,但我很挣扎。

要么我需要编写compareTo,要么我需要找到一个接受 map 接受的集合/集合的预制 map 。

如何使用集合作为 map 上的键?我查看了堆栈溢出,并多次用 google 搜索过这个问题,但从未找到可靠的解决方案!

<小时/>

我想这样做的原因是我用 Java 编写了一个模仿洗牌的“洗牌”模拟。我希望能够计算特定手牌(建模为集合)出现的次数。它看起来像这样:

   H4,C3,D2: 8  
H9,D6,S11: 10
......

最佳答案

Is it possible to create a map where the key is a Collection (any sort of collection)?

是的,这是可能的,但绝对不推荐。如果您的集合发生变化,它的哈希码很可能也会发生变化,这可能会导致令人惊讶的行为。

参见Map's javadoc :

Note: great care must be exercised if mutable objects are used as map keys. The behavior of a map is not specified if the value of an object is changed in a manner that affects equals comparisons while the object is a key in the map.

<小时/>

If I try it on most common collections I'm told the collection can't be cast to comparable.

键不需要具有可比性,除非您使用排序映射,即 TreeMap。使用简单的 HashMap 就不会出现这个问题。

<小时/>

根据您的编辑,我将创建一个新的不可变 Hand 类:

class Hand implements Comparable<Hand> {
private final List<Card> cards;
Hand(Card c1, Card c2, Card c3) {
cards = Collections.unmodifiableList(Arrays.asList(c1, c2, c3));
}
//getters, no setters
//implement compareTo
}

并实现compareTo如果你想在 TreeSet<Hand, Integer> 中使用它例如,按手部力量排序。

关于java - 创建一个以集合为键的 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17201838/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com