当前位置: 首页 > 知识库问答 >
问题:

java HashMap和ArrayList合二为一

楚昊明
2023-03-14

我需要一个类同时是HashMap和ArrayList。

为什么我需要HashMap?以快速访问基于密钥的对象。

你知道怎么解决这个吗?书架上有现成的课吗?

就目前而言,我想到的唯一解决方案是使用ArrayList。那么随机访问就是小菜一碟。对于基于键的对象选择,仅仅使用一个简单的迭代器是一种解决方法,但并不完美....

共有1个答案

张翰海
2023-03-14

您可以使用composition:

public class HashedList<K, V> {
    private final List<V> list = new ArrayList<>();
    private final Map<K, V> map = new HashMap<>(); 

    protected K getKey(V val);

    public void add(V value) {
        list.add(value);
        map.put(getKey(value), value);
    }

    public V get(int index) {
        return list.get(index);
    }

    public V get(K key) {
        return map.get(key);
    }
}
 类似资料:
  • 问题内容: 我需要创建一个插入和删除触发器,两者都会做同样的事情。 我可以在一个触发器中创建它吗? 还是我需要两个单独的? 我环顾四周,似乎所有人都有一个要删除,另一个要插入。 问题答案: MySql不允许在同一触发器上发生多个事件。 一种选择是将您的代码放入一个过程中,并使每个触发器调用相同的过程-根据需要将尽可能多的旧行/新行信息传递给proc。

  • 一、概述 以数组实现。节约空间,但数组有容量限制。超出限制时会增加50%容量,用System.arraycopy()复制到新的数组,因此最好能给出数组大小的预估值。默认第一次插入元素时创建大小为10的数组。 按数组下标访问元素—get(i)/set(i,e) 的性能很高,这是数组的基本优势。 直接在数组末尾加入元素—add(e)的性能也高,但如果按下标插入、删除元素—add(i,e), remov

  • 问题内容: 我尝试结合检查两种情况: 如果启动检查失败,我们将提供一个重试按钮: 否则,startupcheck成功后,我们将在自定义对象中得到一个pin输入请求: 如何将其合并为一项检查而不必同时检查两项:我尝试了以下操作: 但是仅检查第一条语句。 问题答案: 您可以通过lambda表达式组合对using 子句的两个元素的组合检查,如下所示: 替代解决方案是: 作为替代方案,您可以使用等效的cs

  • 问题内容: 我们是否可以用一个键和两个值实现HashMap。就像HashMap一样? 还请告诉我(如果没有办法)通过其他任何方法来实现三个值的存储(以一个为键)的方法,对我有帮助吗? 问题答案: 你可以: 使用具有列表作为值的地图。 创建一个新的包装器类,并将该包装器的实例放置在地图中。。 使用类似类的元组(节省创建许多包装器)。。 并排使用多个地图。 例子 1.使用列表作为值进行映射 这种方法的

  • 问题内容: 来自http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeArguments.html#FAQ103: 具有下限的通配符看起来像“?super Type”,代表所有类型的族,它们是Type的超类型,包括Type类型。类型称为下限。 所以为什么 编译? Double不是Number的超类型,而是Number的子类… 编辑1: