开发者

Adding items to empty List at specific locations in java

开发者 https://www.devze.com 2023-04-12 12:29 出处:网络
Is there any way I can make the below code work without commenting the 3rd line. List<Integer> list = new ArrayList<Integer>();

Is there any way I can make the below code work without commenting the 3rd line.

    List<Integer> list = new ArrayList<Integer>();
    list.add(0,0);
    //list.add(1,nul开发者_运维知识库l);
    list.add(2,2);

I want to add items to list at specific locations. But if I don't change the index to Nth position I am not being able to add at Nth as told in this answer.

I can't use a map because I don't want to miss a value when the keys are same. Also adding null values to a list for large lists will be an overhead. When there is a collision I want the item to take the next position(nearest to where it should have been).

Is there any List implementation that shifts index before it tries to add the item?


Use something like a MultiMap if your only concern is not "missing a value" if the keys are the same.

I'm not sure how doing a shift/insert helps if I understand your problem statement--if the "key" is the index, inserting will lose the same information.


You can use Vector and call setSize to prepopulate with null elements.

However, your comment about the overhead of the nulls speaks to an associative container as the right solution.


This still smells like you should be using a Map. Why not use a Map<Integer, List<Integer>>?

something like,

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


Well, There are a couple of ways I would think to do this, if you are not adding items too frequently, then it might be a good idea to simply do a check to see if there is an item at that location before adding it.

if(list.get(X) == null)
{
 list.add(X,Y);
}

Otherwise if you are going to be doing this too often...then I would recommend creating your own custom List class, and extending ArrayList or whatever you are using, and simply override the add method, to deal with collisions.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号