如何在java中编辑Set的特定行

问题描述 投票:0回答:1

我在 Java 中使用了一些使用数组列表的 ArrayList 的代码,但调用者需要返回 Set,因此我已将大部分代码转换为使用 Set。 mDetails 现在的定义如下:

Set<List<String>> mDetails = new HashSet<List<String>>();

我有这个函数需要转换为使用Set类型。

public void addField( int row, String value ) {
    this.mDetails.get(row).add( value );
}

另一个函数找到要修改的正确行,并且该函数将给定值添加为新列。如果有更直接的方法我愿意删除这个功能。我也尝试过:

this.mDetails[row].add( value );

很抱歉问这个问题,但互联网假设您在问这个问题时询问的是 JDBC 结果集。

java set
1个回答
0
投票

没有办法

A

HashSet
通过其 哈希码 跟踪集合中的每个元素。这意味着放置在该集合中的元素永远不会产生不同的哈希码,这一点至关重要。

HashSet
对象中的每个元素都是一个
List
对象。
List
实现如何生成其哈希码?通过覆盖
Object#hashCode
,如记录的 其 Javadoc 所示。该文档解释说,列表的哈希码是根据其每个元素的哈希码计算得出的。这意味着 List
 中的 👉🏽 
a
HashSet
绝不能被突变
(更改、添加、删除、替换或更改其元素)。

您在

List
中改变
HashSet
元素的目标违反了此规则,即稳定不变的哈希码的要求。

所以你的问题在技术上是毫无意义的。不得更改

List
中的
HashSet

解决方法是从

List
中撤回
HashSet
,更改
List
,然后将更改后的
List
对象添加回
HashSet
,并在其中通过新的哈希代码值对其进行跟踪。

© www.soinside.com 2019 - 2024. All rights reserved.