在java中的特定位置添加项目以清空列表

时间:2011-10-11 16:44:58

标签: java

在没有评论第3行的情况下,我有什么方法可以使下面的代码工作。

    List<Integer> list = new ArrayList<Integer>();
    list.add(0,0);
    //list.add(1,null);
    list.add(2,2);

我想在特定位置添加要列出的项目。但如果我没有将索引更改为第N个位置,我无法按照answer中的说明添加Nth。

我无法使用地图,因为当密钥相同时我不想错过任何值。将空值添加到大型列表的列表中也是一种开销。当发生碰撞时,我希望该项目采取下一个位置(最接近它应该的位置)。

是否有任何列表实现在尝试添加项目之前改变索引

4 个答案:

答案 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>