在没有评论第3行的情况下,我有什么方法可以使下面的代码工作。
List<Integer> list = new ArrayList<Integer>();
list.add(0,0);
//list.add(1,null);
list.add(2,2);
我想在特定位置添加要列出的项目。但如果我没有将索引更改为第N个位置,我无法按照answer中的说明添加Nth。
我无法使用地图,因为当密钥相同时我不想错过任何值。将空值添加到大型列表的列表中也是一种开销。当发生碰撞时,我希望该项目采取下一个位置(最接近它应该的位置)。
是否有任何列表实现在尝试添加项目之前改变索引?
答案 0 :(得分:5)
如果密钥相同,如果您唯一关注的是“缺少值”,请使用MultiMap之类的内容。
如果我理解你的问题陈述,我不确定如何进行转换/插入 - 如果“key”是索引,插入将丢失相同的信息。
答案 1 :(得分:2)
这仍然闻起来像你应该使用地图。为什么不使用Map<Integer, List<Integer>>
?
之类的,
private Map<Integer, List<Integer>> myMap = new HashMap<Integer, List<Integer>>();
public void addItem(int key, int value) {
List<Integer> list = myMap.get(key);
if (list == null) {
list = new ArrayList<Integer>();
myMap.put(key, list);
}
list.add(value);
}
public List<Integer> getItems(int key) {
return myMap.get(key);
}
答案 2 :(得分:2)
您可以使用Vector
并致电setSize预填充null元素。
但是,您对空值开销的评论会将关联容器说成是正确的解决方案。
答案 3 :(得分:2)
嗯,有几种方法我认为这样做,如果你不是太频繁地添加项目,那么最好先检查一下该位置是否有项目。加上它。
if(list.get(X) == null)
{
list.add(X,Y);
}
否则,如果您要经常这样做...那么我建议您创建自己的自定义List类,并扩展ArrayList或您正在使用的任何内容,并简单地覆盖add方法,以处理冲突。< / p>