2015-02-07 62 views
0

你好,我需要手動實現arraylist.add()方法使用什麼,但陣列和數組複製方法但我很難做到這一點。該方法的規範是該方法在指定位置插入一個元素,並將當前位置中的任何元素向右移動,並將索引中的一個添加到索引,以將數組的大小擴大一個,以便適合所有元素。有人請幫忙。實現ArrayList添加方法手動使用對象陣列

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]; 
     } 
    } 
+0

提示1:使用[System.arraycopy](http://docs.oracle.com/javase /7/docs/api/java/lang/System.html#arraycopy(java.lang.Object,%20int,%20java.lang.Object,%20int,%20int))。提示2:正確縮進您的代碼! – alfasin 2015-02-07 18:57:21

回答

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]; 
    } 
+0

你知道我可以如何實現system.arraycopy到這個,所以我可以擴大規模? – nitin94 2015-02-07 19:08:30

+0

'system.arraycopy'用於將數組從源複製到目的地。你將不得不爲索引單獨做這件事:'i = 0到i = index-1',然後從index:'i = index + 1到i = newData.length-1' – 2015-02-07 19:14:42

+0

之後? – nitin94 2015-02-07 19:34:09

0

添加元素爲一個對象數組的索引,

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()]); 
} 
0

System.arrayCopy的JavaDoc明確講到src和dest是同一陣列的情況下:

如果src和dest參數指代相同的陣列對象,則 複製如同部件在位置srcPos通過執行首先將srcPos + length-1複製到長度爲 組件的臨時數組,然後將臨時數組的內容複製到目標 數組的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); 
+0

我可以實現這個到我目前的代碼? – nitin94 2015-02-07 19:27:41

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