java HashMap和ArrayList合二为一

时间:2013-11-04 19:38:02

标签: java arraylist hashmap

我需要一个同时使用HashMap和ArrayList的类。

为什么我需要HashMap?根据密钥快速访问对象。

为什么我需要ArrayList?随机选择一个元素。

你知道如何解决这个问题吗?架子上有现成的课吗?

至于现在,我想到的唯一解决方案是使用ArrayList。然后随机访问是小菜一碟。而仅使用简单迭代器选择基于键的对象是某种解决方案,但远非完美....

5 个答案:

答案 0 :(得分:6)

您可以使用合成:

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);
    }
}

答案 1 :(得分:0)

为什么你需要两者?用例是什么?

如果您的密钥是数字(整数),那么只需使用ArrayList

即可

如果您的密钥不是数字,并且您的随机访问是通过非数字密钥,请使用HashMap

否则,如果需要通过(非数字)键和插入索引访问,则可能需要通过实现Map和List接口来创建自己的同时具有ArrayList和HashMap的数据结构。 (它将同时包含ArrayListHashMap成员,并且您必须在添加/删除等时更新两者,尽管某些情况会有不确定的定义,例如,当按键删除项目时,你是否转移其他项目的指数等...)

如果您想要的只是维护广告订单,那么LinkedHashMap可能是一个很好的内置解决方案。

关键问题是为什么需要这种数据结构?这样我们就可以更好地提出解决方案。

答案 2 :(得分:0)

我会说简单的使用数组。我错过了什么吗?

答案 3 :(得分:0)

如果您的密钥可以作为数组的索引,则可以使用数组。否则,HashMap似乎是解决方案。

答案 4 :(得分:-1)

  

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

合乎逻辑的原因。

  

为什么我需要ArrayList?随机选择一个元素。

不太强大:你在ArrayList中随机选择一个元素的逻辑也可以用在HashMap的entrySet上......