Java rezise时HashMap索引冲突

Java rezise时HashMap索引冲突,java,indexing,hashmap,collision,Java,Indexing,Hashmap,Collision,我在尝试创建哈希集时遇到了一个问题。在我的代码中,我创建了43个不同的哈希集,其中包含1-138个条目,没有任何问题。当我试图创建包含13个条目的第44个HashSet“JAVA”时,我会做一些奇怪的事情 添加最后一个“新”条目时。transfer(条目[]newTable)为我的“新”条目和“旧”条目提供相同的索引号。之后,我的新条目将被旧条目覆盖。这里有人已经面临同样的问题了吗 我使用的是哈希集: Set<BaseConfigSet> baseConfigSets = n

我在尝试创建哈希集时遇到了一个问题。在我的代码中,我创建了43个不同的哈希集,其中包含1-138个条目,没有任何问题。当我试图创建包含13个条目的第44个HashSet“JAVA”时,我会做一些奇怪的事情

添加最后一个“新”条目时。transfer(条目[]newTable)为我的“新”条目和“旧”条目提供相同的索引号。之后,我的新条目将被旧条目覆盖。这里有人已经面临同样的问题了吗

我使用的是哈希集:

    Set<BaseConfigSet> baseConfigSets = new HashSet<BaseConfigSet>();
        BaseConfigSet baseConfigSet = null;
...
    baseConfigSet = new BaseConfigSet(next.getBaseConfigId(), interval, next.getValue(), next.getAccountId(),
                                Section.forString(baseConfig.getSection()), baseConfig.getName(),
                                baseConfig.getDescription(), DataType.forString(baseConfig.getDataType()));

                        baseConfigSets.add(baseConfigSet);

如果对映射的键或集合的元素进行了变异,则这种问题很常见。调整大小后,看起来像是两个键/元素的东西变成了一个,因为只有在那时集合才“意识到”您修改了它


解决方案是要么只使用不可变的键/元素,要么必须非常小心确保在添加键/元素后不会修改它。注意:添加到集合的所有内容都是对所添加对象的引用。这意味着,如果在添加对象后对其进行修改,则该对象在集合中也会显示为已更改。如果使用的集合假定键/元素不变,但进行了修改,则会损坏该集合。这发生在映射、集合和优先级队列中。

代码和错误日志PLZ如果您不添加任何代码,我们真的无法帮助您。到底是什么问题?当为现有键添加新值时,HashMaps只保留最后一个值。除非我们看到代码,否则我们无法真正理解什么(如果有什么)出错了,您是指HashSet还是HashMap?映射有条目,集合有元素实际上键不需要完全不可变,哈希集合的唯一要求是
hashCode()
equals()
的幂等性(如果键没有实现
Comparable
)。
    @Getter
        @EqualsAndHashCode(of = { "baseConfigId", "interval" })
        @ToString(of={"baseConfigId", "value"})
        public static class BaseConfigSet {

            private Integer     baseConfigId;

            private Interval    interval;

            @Setter
            private String      value;

            private Integer     accountId;

            private Section     section;

            private String      sectionName;

            private String      description;

            private DataType    dataType;
...