当前位置: 首页 > 面试题库 >

在Java中同时实现Map和List接口?

蔡默
2023-03-14
问题内容

我想拥有一个在Java中同时实现Map和List接口的对象。这个想法与以下问题类似:Java OrderedMap

我想将名称/值对添加到列表中,并让列表保留序列,但还可以按名称进行查找:

foo.put("name0", "value0");
foo.put("name1", "value1");
foo.get(1); --> Map.Entry("name1", "value1")
foo.get("name0"); --> "value0"

这是问题所在:创建此类时:

class Foo implements Map, List {
    // add all methods here
}

我收到一个编译错误:

"The return type is incompatible with Map.remove(Object)"
public boolean remove(Object o) {
    return false;
}

如果我没有实现Map和List接口,那么有很多Java集合方法无法在此数据结构上使用。

(此外,上面的Java Ordered Map中提出的解决方案不起作用的原因是LinkedHashMap没有get(int)方法。无法通过索引选择条目。)


问题答案:

当你发现你不能同时实现List,并Map在同一类。但是对于您所需要的也没有必要。您需要的是data可以同时通过MapList接口访问。有点像Map作为entrySet()中的集合或使用Map.values()的Collection
访问数据。

简而言之,您需要在数据上有2个视图,一个视图实现List,另一个视图实现Map

如果有一个视图占主导地位(例如Map),则可以为地图实现提供一种方法List getAsList(),该方法将数据显示为List,并以Map的数据为后盾。

编辑

Paulo
Guedes给出的答案应该为您服务。已经有符合您要求的Map实现。关于使用多个不兼容的接口(一个简单的适配器还不够)呈现相同的数据的问题,我的回答更为笼统。



 类似资料:
  • 本文向大家介绍判断List和Map是否相等并合并List中相同的Map,包括了判断List和Map是否相等并合并List中相同的Map的使用技巧和注意事项,需要的朋友参考一下 List、Set、Map判断两个对象相等的标准 List:通过equals()方法比较返回true即可。 HashSet:先比较两个对象hashCode()方法返回的值是否相等,如果不相等就认为两个对象是不相等的,如果两个对

  • 在Java,你可以做这样的事情: 在Kotlin有可能做同样的事情吗?假设是抽象的,并且不实现

  • 问题内容: 我试图了解Java 和接口 我正在写这堂课 它似乎正在工作。 我应该有: 或者我应该把外面的 哪一个更好? 问题答案: 你应该几乎 从来没有 同时实现,并在同一个班。他们做不同的事情。迭代器自然是 有状态的 -当您迭代使用它时,它必须更新其世界观。但是,迭代器仅需要能够创建新的迭代器。特别是,您可能有多个迭代器同时处理同一个原始可迭代对象。 您当前的方法几乎可以-我会更改实现的某些方面

  • 问题内容: 将a转换为a 的最佳方法是什么?只是迭代所有值并将它们插入列表中,还是我忽略了某些内容? 问题答案: 假设:

  • mocked类定义如下: 在Kotlin/Groovy/Spock中有没有一种方法可以避免对这两种方法进行存根处理?我想出的最好办法是用另一个来存根,这很有效,但很不幸:

  • 的实现实现了以及扩展了。但是在Java文档中,您可以看到AbstractList已经实现了List。那么在扩展AbstractList的同时实现List会不会是多余的呢? 我的第二个问题 请看一下下面的代码: Arrays类的方法包含自己的ArrayList实现。但是这个只扩展了AbstractList,而没有实现List。但是上面的代码编译。 但将代码修改为以下内容时 我得到一个错误: 这背后的