使用对象数组手动实现ArrayList add方法

时间:2015-02-07 18:53:39

标签: java arrays object for-loop arraylist

您好我需要手动实现arraylist.add()方法,只使用数组和数组复制方法,但我很难做到这一点。该方法的规范是该方法在指定位置插入一个元素,并将当前位置中的任何元素向右移动,并将一个元素添加到索引,将数组的大小扩展一个,以便所有元素都适合。有人请帮忙。

    private Object [] list;
    final int maxObjects = 100;

    public ListOfObjects()
    {
        list= new Object[maxObjects];
    }
    public ListOfObjects(Object[]o)
    {
        list= o;

    }
    public void add(Object element,int index)
    {
        Object[] newData = new Object[list.length+1];
        for(int i =0; i < index; i++)
        {
            newData[i] = list[i];
            newData[list] = element;
        }

        for(int i = index; i < list.length; i++)
        {
            newData[i+1] = list[i];
        }
    }

4 个答案:

答案 0 :(得分:0)

你的逻辑看起来对我不对。你应该做类似的事情 -

    Object[] newData = new Object[list.length+1];
    for(int i =0; i < index; i++)
    {
        newData[i] = list[i];
    }
    newData[index] = element;
    for(int i = index; i < list.length; i++)
    {
        newData[i+1] = list[i];
    }

答案 1 :(得分:0)

将元素添加到Object数组的索引

Object[] myObjects;

public static void addObject(Object obj, int index) {

// Assuming you want something in your empty array
     if(myObjects == null) {
        myObjects = new Object[] { obj };
        return;
    } 
    ArrayList<Object> temp = new ArrayList<Object>();
    for(int i = 0; i < myObjects.length; i++) { 
        if(i == index)
           temp.add(obj);
        temp.add(myObjects[i]);
    }
    myObjects = temp.toArray(new Object[temp.size()]);
}

答案 2 :(得分:0)

System.arrayCopy的javadoc专门讲述了src和dest是同一个数组的情况:

  

如果src和dest参数引用相同的数组对象,那么   执行复制就好像位于srcPos的位置处的组件一样   首先将srcPos + length-1复制到具有length的临时数组   组件然后复制临时数组的内容   到目的地的destPos + length-1的destPos位置   阵列。

如果您的支持list足够大,那么您只需使用arrayCopy将受影响的索引移到1上。

//shift everything after the index over
System.arrayCopy(list, index, list, index + 1, list.length - index);
//place new value in index
list[index] = element;

否则,您需要创建一个新数组,然后使用arrayCopy在插入索引之前复制所有内容。

Object[] newList = new Object[calcSize()];
//first copy everything before index if index is not 0
if (index > 0)
{
    System.arrayCopy(list, 0, newList, 0, index);
}
newList[index] = element;
System.arrayCopy(list, index, newList, index+1, list.length - index);

答案 3 :(得分:0)

此解决方案利用了ArrayList迭代器,它以正确的顺序返回对象:

    ArrayList<Object> elementInserter(ArrayList<Object> inArray, Object element, int index){
       ArrayList<Object> outArray = new ArrayList<Object>(inArray.size() + 1);
       outArray.addAll(inArray.subList(0, index));
       outArray.add(element);
       outArray.addAll(inArray.subList(index, inArray.size()));
       return outArray;
   }