0

独自の arraylist クラスを作成する必要があります。挿入メソッドを記述しようとしていますが、このインデックスに既存のオブジェクトがある場合、インデックス 0 にオブジェクトを追加するという問題に直面しています。他のインデックスでは機能しますが、0 では機能しません。

public void insert(int index, Object object) throws IndexOutOfBoundsException {

    if(index < 0) {
        System.out.println("Niepoprawny index!");
        throw new IndexOutOfBoundsException();
    }

    if(index > array.length - 1 || array[index] != null) {
        // zwiększenie rozmiaru tablicy
        // jeśli jest zbyta mała lub na danym miejscu istnieje jakiś obiekt
        Object[] temp = new Object[array.length + index];
        System.arraycopy(array, 0, temp, 0, array.length);
        array = temp;
    }

    // przesunięcie o 1 w prawo wszystkich elementów
    System.arraycopy(array, index - 1, array, index, array.length - index);
    array[index] = object;
    size++;
}
4

3 に答える 3

5
  1. のサイズtempが間違っています。単一の要素を追加しているので、それはarray.length + 1.

  2. 2 番目のインデックスarraycopyが間違っています。

  3. array[index] != null小切手がよくわかりません。

最後に、 の本体全体をifへの 1 回の呼び出しで置き換えることができますArrays.copyOfRange()

于 2013-03-15T16:52:02.760 に答える
0

次の行で、インデックス -1 にデータを挿入しようとします。

System.arraycopy(array, index - 1, array, index, array.length - index);
于 2013-03-15T16:53:27.537 に答える
0
import java.util.Arrays;

public class MyArrayList<E> {
    private int listSize = 0; // arraySize
    private int initialArraySize = 1;//initial size
    @SuppressWarnings("unchecked")
    private E[] data = (E[]) new Object[initialArraySize];//initialize array


    /**
     * auto increase array upon every added element
     * @return 
     */
    private  void IncreaseArraySize() {
        //increase the size of the array by one element when element is added
        data = Arrays.copyOf(data, data.length+1);
        }

    /**
     * add elements to myArrayList
     */

    public void add(E toBeAdded) {
        //add to array then change the array size by one element
        int i= data.length;
        if(listSize == data.length){
            IncreaseArraySize();
        }
        data[listSize] = toBeAdded;
        listSize++;
    }   

    /**
     * 
     * @param remove item from MyarrayList
     * 
     */
    public void remove(E ItemToRemove) {
        //remove the element you and then shrinks the array to new size after removal
        for (int i = 0; i < data.length; ++i) {
            if (data[i]==ItemToRemove) {
                for (int j = i; j < data.length-1; j++) {
                    data[j] = data[j + 1];
                }
            }
        }
        listSize--;
    }

    /**
     * to check if list contains the item
     */
    public boolean contains(E toCheck) {
        //iterate all elements of array while comparing element you want to the one in the index
        boolean b = false;
        for (int i = 0; i < data.length; i++) {
            if (data[i]==toCheck) {
                b = true;
            }
        }
        return b;
    }
/**
 * checks if list is empty
 */
    public boolean isEmpty() {
        //return false if list is not empty else true if if it is
        boolean b = false;
        if ((data.length == 1) && (data[0] == null)) {
            b = true;
        }
        return b;
    }

    /**
     * pass index you want to check contents
     */
    public E get(int index) {
        //make sure the index is not empty and not out of the array
        if (index < data.length && null != data[index]) {
            E ElementPos = data[index];
            return  ElementPos;
        } else if (index < 0 || index > data.length) {
            throw new IndexOutOfBoundsException();
        }
        return null;
    }

    /**
     * get the size of array
     */
    public int size() {
        return listSize;    

    }
}
于 2015-10-01T00:53:39.530 に答える