我需要一个同时使用HashMap和ArrayList的类。
为什么我需要HashMap?根据密钥快速访问对象。
为什么我需要ArrayList?随机选择一个元素。
你知道如何解决这个问题吗?架子上有现成的课吗?
至于现在,我想到的唯一解决方案是使用ArrayList。然后随机访问是小菜一碟。而仅使用简单迭代器选择基于键的对象是某种解决方案,但远非完美....
答案 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的数据结构。 (它将同时包含ArrayList
和HashMap
成员,并且您必须在添加/删除等时更新两者,尽管某些情况会有不确定的定义,例如,当按键删除项目时,你是否转移其他项目的指数等...)
如果您想要的只是维护广告订单,那么LinkedHashMap可能是一个很好的内置解决方案。
关键问题是为什么需要这种数据结构?这样我们就可以更好地提出解决方案。
答案 2 :(得分:0)
我会说简单的使用数组。我错过了什么吗?
答案 3 :(得分:0)
如果您的密钥可以作为数组的索引,则可以使用数组。否则,HashMap似乎是解决方案。
答案 4 :(得分:-1)
为什么我需要HashMap?基于的快速访问对象 键。
合乎逻辑的原因。
为什么我需要ArrayList?随机选择一个元素。
不太强大:你在ArrayList中随机选择一个元素的逻辑也可以用在HashMap的entrySet上......