Jak dodwać po jednym elemcie do pełnej juz tablicy zwiekszając ją ?

0

Jak dodwać po jednym elemcie do pełnej juz tablicy zwiekszając ją ?

0

Użyć java.util.List.

1

Nie da się zwiększyć ani zmniejszyć raz zadeklarowanej tablicy. Zamiast tablic użyj np. klasy ArrayList.

0

https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#copyOf(T[],%20int)

Uwaga: może być za wolne jeśli zmieniasz rozmiar wielokrotnie, po jednym elemencie. W takim wypadku lepiej użyć ArrayList.

1

Albo Listy/Array z Vavra :P

0

Możesz w metodzie która dodaje element do tablicy stworzyć nową tablicę o n+1 rozmiarze ze zbiorem danych poprzedniej tablicy, dodać element i zwrócić taką tablicę, wówczas przypisujesz do zmiennej nową referencje z nową tablicą o zwiększonym rozmiarze
To by mogło wyglądać np. w ten sposób:

public class Test {
    public static void main(String[] args) {
        int[] myArray = new int[2];
        myArray[0] = 6;
        myArray[1] = 9;
        Helper helper = new Helper(myArray);
        myArray = helper.add(3);
        myArray = helper.add(2);
        Arrays.stream(myArray).forEach(System.out::println);
    }
}

class Helper{
    private  int[] myArray;

    public Helper(int[] myArray) {
        this.myArray = myArray;
    }

    public int[] add(int e){
        int[] myArray = new int[this.myArray.length+1];
        int index = 0;
        for(int ar: this.myArray){
            myArray[index++] = ar;
        }
        myArray[myArray.length - 1] = e;
        this.myArray = myArray;
        return myArray;
    }
}

Pytanie tylko czy sensowne :)

0

@Orenz12:
Podobnie działa CopyOnWriteArrayList :P


 public boolean add(E e) {
        final ReentrantLock lock = this.lock;
        lock.lock();
        try {
            Object[] elements = getArray();
            int len = elements.length;
            Object[] newElements = Arrays.copyOf(elements, len + 1);
            newElements[len] = e;
            setArray(newElements);
            return true;
        } finally {
            lock.unlock();
       }
 }

No i oczywiście niemutowalne kolekcje funkcyjne (te oparte o tablice), przy czym one nie pozwalają na modyfikację elementów starej tablicy :)


   @Override
    public Array<T> append(T element) {
        final Object[] copy = copyOf(delegate, delegate.length + 1);
        copy[delegate.length] = element;
        return wrap(copy);
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1