Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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-MultiMaps和entryset()_Java_Data Structures_Collections_Map_Synchronization - Fatal编程技术网

JAVA-MultiMaps和entryset()

JAVA-MultiMaps和entryset(),java,data-structures,collections,map,synchronization,Java,Data Structures,Collections,Map,Synchronization,一个充满希望的快速问题: 我正计划构建一个多重映射样式的结构,在内部使用Map>结构进行结构化,并重写方法,以适当的方式重定向到内部映射和列表(因此这对用户来说就像多重映射一样)。当然,可能会有一些额外的特性,特别是如果我要创建一个结构为Map>或Map>的版本,我很可能在列表版本正常工作后这样做 我关心的是entrySet()和类似的方法:如何重写它们以使用相同的内部数据并通过remove方法传播 我的怀疑是,这些集合是用它们的remove函数重定向到map的remove函数构建的,因此,如果

一个充满希望的快速问题:

我正计划构建一个多重映射样式的结构,在内部使用Map>结构进行结构化,并重写方法,以适当的方式重定向到内部映射和列表(因此这对用户来说就像多重映射一样)。当然,可能会有一些额外的特性,特别是如果我要创建一个结构为Map>或Map>的版本,我很可能在列表版本正常工作后这样做

我关心的是entrySet()和类似的方法:如何重写它们以使用相同的内部数据并通过remove方法传播

我的怀疑是,这些集合是用它们的remove函数重定向到map的remove函数构建的,因此,如果我实现了MultiMap的remove函数,它就会正常工作。有人能证实这一点吗


我还担心地图集合中的一些静态函数。Collections类如何生成不可修改或同步的表单?是否有方法确保我的MultiMap与此兼容?

我想这取决于您将如何创建MultiMap

我做了类似的事情,基本上创建了一个多重映射,作为一个以集合为值的映射。 通过在内部使用贴图,我的多重贴图是一个普通贴图,所有UTIL基本上都可以继续工作

public class MultiMap<K, V, T extends Collection<V>> implements Map<K, T>
public类MultiMap实现Map

您是否考虑过使用现有的多重映射而不是实现新的多重映射


例如,看看静态实用程序方法…

有趣,但我希望将结构保持在内部,使其真正表现为V的映射,除了List getAll(键k)函数之外,集合没有任何可见性。通常情况下,我甚至不会使用entrySet()函数,这是一个个人库,但我确实希望正确地执行此操作,以便几年后不会忘记。我想我总是可以重写entrySet来抛出一个不受支持的Dexception或类似的异常,但这感觉像是作弊。我也通过扩展multimap和隐藏实现来做到这一点:公共类MultiListMap扩展了multimap,用户可以说MultiListMap differences=new MultiListMap(),这是一种有趣的方法。今晚我要好好玩玩这个想法,看看会发生什么。对于任何应该返回链接到底层数据结构的集合的函数来说,问题仍然存在。我们如何使我们的多重映射返回这样一个集合/集合,而不返回集合集合集合集合或返回不修改映射的集合?我不确定我是否理解您所说的“链接到基础数据结构的集合”是什么意思我包装的映射的所有值都存储为集合,因此我只能返回并写入比如List valuesForKey=differences.get(key);查看getEntrySet()的API。它应该返回一个由基础集合支持的集合,这样就可以从返回的集合中删除元素,并修改映射