• Wir präsentieren Dir heute ein Stellenangebot für einen Java Entwickler - m/w/d in Augsburg, München, Stuttgart oder Bamberg. Hier geht es zur Jobanzeige

Methoden ArrayList Werte hinzufügen und löschen

E

E27T

Aktives Mitglied
Hallo zusammen, ich bin noch Anfänger in Java und hätte mal paar Fragen, wie ich folgende Aufgabe angehe. Ich soll ein Interface IntegerList anlegen und folgende abstrakte Methoden implementieren:

- int getLength() → liefert die Lange der gesamten Liste
- void insertLast(int value) → fügt value am Ende der Liste an
- int getFirst() → liefert das erste Element der Liste
- void deleteFirst() →löscht das erste Element der Liste
- boolean search(int value) → pruft, ob value in der Liste vorkommt.

Anschließend soll ich eine Klasse ArrayIntegerList anlegen, und alle Methoden testen und eine Liste mit int Zahlen generieren.
Bis jetzt habe ich das Interface angelegt und die Klasse ArrayIntegerList und auch eine ArrayList. Mit einem ganz normalen Array komme ich ja nicht weit.

Würde mich freuen, wenn mir jemand bisschen helfen könnte. Was mache ich als nächstes.. Die Herangehensweise fällt mir hier schwer.
Interface IntegerList:
public interface IntegerList {

    public abstract int getLength();
    
    public abstract void insertLast(int value);
    
    public abstract int getFirst();
    
    public abstract void deleteFirst();
    
    public abstract boolean search(int value);
    
    
    
}
[/COD
[CODE lang="java" title="class ArrayIntegerList"]import java.util.ArrayList;
public class ArrayIntegerList implements IntegerList{
    
    
    public static void main(String[] args) {
        
        //ArrayList anlegen
        ArrayList<Integer> numbers = new ArrayList<Integer>();
        
        
        ArrayIntegerList x1 = new ArrayIntegerList();
        ArrayIntegerList x2 = new ArrayIntegerList();
        ArrayIntegerList x3 = new ArrayIntegerList();
        
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        
        System.out.println(numbers);
        
        x1.insertLast(1);
        x2.insertLast(2);
        x2.insertLast(3);
        
        
        
    }

    @Override
    public int getLength() {
        return 0;
    }

    @Override
    public void insertLast(int value) {
        
    }

    @Override
    public int getFirst() {
        return 0;
    }

    @Override
    public void deleteFirst() {
        
    }

    @Override
    public boolean search(int value) {
        return false;
    }

}
E]
 
kneitzel

kneitzel

Top Contributor
Also der Name ArrayIntegerList legt schon nahe, dass die Klasse intern mit einem Array arbeitet. Daher wäre hier die Frage: An welcher Stelle kommst Du denn nicht weiter? Wo siehst Du denn Probleme?

Und wozu eine ArrayList? So wie ich die Aufgabenstellung sehe, geht es doch darum, dass ihr eigene Interfaces / Klassen entwickeln wollt und nicht die Collections vom Java Framework nutzen sollt. Daher wird ArrayList vermutlich nicht zu nutzen sein.
 
F

fhoffmann

Top Contributor
Wenn du java.util.ArrayList benutzen darfst, musst du in deinen Methoden nur die passenden Methoden von ArrayList aufrufen.

Ansonsten kannst du alle Methoden auch mit Hilfe eines Arrays implementieren. (Das sollte man in der Praxis nicht benutzen, aber es ist eine schöne Übung.) Dazu legst du zunächst ein Array mit fester Länge (z.B. 10) an. Erst, wenn du weitere Elemente einfügen willst, legst du eine neues Array (mit doppelter Größe) an, kopierst das alte Array in das neue und hast dann wieder Platz, ein weiteres Element einzufügen.
Praktisch ist es wahrscheinlich auch, dir die Indexe des ersten und letzten Elements zu merken. Die Methode deleteFirst() besteht dann schlicht daraus, den Index des ersten (echten) Elements um eins zu erhöhen.
 
E

E27T

Aktives Mitglied
Es ging in erster Linie darum, zu lernen, wie man ein Interface anlegt und die abstrakten Methoden einfügt.
Ich soll auch alle Methoden gebrauchen..
Zeile 1 bis 15 ist ja mein Interface, wo ich die abstrakten Klassen eingefügt habe.
Dann habe ich in Zeile 24 eine ArrayList angelegt, weil diesa ja dynamisch sein soll. Ich will ja Werte löschen und hinzufügen können.
Zeile 27 bis 39 ist einfach bisschen Spielerei.

Das ist doch korrekt, dass ich die Methoden nur von einem Objekt des Types ArrayIntegerList benutzen kann, oder?

Dafür habe ich in Zeile 27 bis 29 mal paar Objekte instanziiert..Doch wie sind die nächsten Schritte? Was schreibe ich z.B. in die Funktion

@Override
public void insertLast(int value)
}

um einen Wert hinten anzufügen?
 
B

BlackBookOne

Mitglied
Java:
import java.util.ArrayDeque;

public class ArrayIntegerList implements IntegerList {
    private ArrayDeque<Integer> que = new ArrayDeque<>();

    public static void main(String[] args) {
        ArrayIntegerList queue = new ArrayIntegerList();
        queue.insertLast(0);
        queue.insertLast(3);
        queue.insertLast(1);
        queue.insertLast(2);
        System.out.println(queue.getLength());
        System.out.println(queue.getFirst());
    }

    @Override
    public int getLength() {
        return que.size();
    }

    @Override
    public void insertLast(int value) {
        que.addLast(value);
    }

    @Override
    public int getFirst() {
        return que.getFirst();
    }

    @Override
    public void deleteFirst() {
        que.removeFirst();
    }

    @Override
    public boolean search(int value) {
        return que.contains(value);
    }
}

interface IntegerList {
    public abstract int getLength();

    public abstract void insertLast(int value);

    public abstract int getFirst();

    public abstract void deleteFirst();

    public abstract boolean search(int value);
}

Bei Bedarf siehst du dir einfach die Implementierung der Klasse ArrayDeque an.
 
kneitzel

kneitzel

Top Contributor
Also das Interface ist so aber noch nicht wirklich korrekt. Bei einem Interface hast Du generell keine Methoden-Implementationen. (Ist seid einiger zeit nicht mehr ganz korrekt. Default Implementationen sind im Interface erlaubt worden - da findet dann das Schlüsselwort default Verwendung. Daher sollte das abstract weg. Abstract Methoden gibt es nur in Klassen.

Und das Interface gibt Methoden vor, die in einer Klasse, die das Interface implementiert, als public Methode implementiert werden muss. Daher kann das public weg.

Somit wären wir jetzt bei folgendem Code:

Java:
public interface IntegerList {
    int getLength();
    void insertLast(int value);
    int getFirst();
    void deleteFirst();
    boolean search(int value);
}

Dieses Interface kann nun eine Klasse ArrayIntegerList implementieren:
Java:
public class ArrayIntegerList implementes IntegerList {
    // ...
}
Das hattest Du schon soweit richtig. Die main Methode muss da aber nicht zwingend rein. Das kann sein, aber das ist erst einmal keine Notwendigkeit. Etwas, das Du in so einer main Methode machst hat auch erst einmal keine Auswirkungen direkt auf die Instanzen - es ist ja nur eine static Methode.

Was Du also jetzt machen solltest, ist dir zu überlegen, wie Du Daten halten kannst. Die Idee war, dass dies ein Array sein könnte. Also brauchst Du eine Instanzvariable:

Java:
public class ArrayIntegerList implementes IntegerList {
    private int[] values;
    // ...
}

Du musst Dir nun nur überlegen:
a) wie initialisierst Du values im Konstruktor?
b) Was machst Du in den ganzen zu implementierenden Methoden.

Dabei würde ich es einfach halten und noch keine Optimierungen vornehmen. Wie muss das Array values also aussehen, wenn keine Werte enthalten sind? Wie sieht es aus, wenn Du Werte hinzu fügst? Wie sieht es aus, wenn der erste Wert gelöscht wird? u.s.w.

Edit: Formulierung beim abstract angepasst ... das sollte / kann weg wie das public. (Und die gängigen IDEs werden das hoffentlich auch entsprechend anzeigen...)
 
Zuletzt bearbeitet:
F

fhoffmann

Top Contributor
Also das Interface ist so aber noch nicht wirklich korrekt
Doch, das Interface ist korrekt.
Da jedes Interface nur "public abstact" Methoden enthalten darf (bis auf die von dir erwähnten Neuerungen), kann man beide Schlüsselwörter weglassen - man kann sie aber auch dazuschreiben (auch wenn dies unüblich ist und nur zusätzliche Schreibarbeit bedeutet).
 
kneitzel

kneitzel

Top Contributor
Ja, den Satz hatte ich vergessen zu entschärfen. Das es aus Sicht von Java kein Fehler ist, habe ich ja auch direkt angepasst in den folgenden Sätzen. Ich halte es für nicht gut, auch wenn es von der Syntax ok ist.

Da bin ich halt mit von statischen Code Analyse Tools geprägt die sowas anmeckern (z.B. PMD mit UnnecessaryModifier).
 
kneitzel

kneitzel

Top Contributor
naja ich würde jetzt einen Konstruktor anlegen, indem ich Werte mitgeben kann.
Konstruktor:
import java.util.ArrayList;
public class ArrayIntegerList implements IntegerList{
    int wert;
   
   
    ArrayIntegerList(int x){
        this.wert = x;
    }
Also das ist durchaus denkbar, aber da bitte daran denken, dass Du ja mehrere Werte abspeichern möchtest. Den Fall kann man aber durchaus außen vor lassen und erst einmal bei den festen Vorgaben bleiben.

Wenn das Array leer ist, sieht es so aus..
Java:
        int[] values = {};
Das ist also das leere Array. Sehr gut.

Nun können wir die einzelnen Methoden betrachten, die wir der Reihe nach entwickeln müssen.

Java:
    int getLength();
Wenn die Werte in einem Array gespeichert werden: Wie kommst Du an die Anzahl der Elemente?

Java:
    void insertLast(int value);
Jetzt kommt der wirklich interessante part: Ein Array hat eine feste Größe. Wie kann man da noch etwas hinzu fügen? In das bestehende Array geht es nicht, daher muss man einen Umweg gehen. Hast Du da evtl. eine Idee? Du hast einen kleinen Zettel, der ist vollgeschrieben. Jetzt musst Du da noch etwas dazu schreiben? Aber Du willst auch nur einen Zettel haben? Da muss dann ein neuer Zettel her, oder?

Java:
    int getFirst();
Erstes Element - wie kommst Du an dieses?

Java:
   void deleteFirst();
Jetzt haben wir ein ähnliches Problem wie zuvor schon: Das Array hat eine feste Größe. Also müsste man hier etwas machen, damit man am Ende ein Array hat mit der richtigen Größe.

Java:
    boolean search(int value);
Wie schaust Du, ob ein Wert in dem Array mit den gespeicherten Werten enthalten ist?

Aus der großen Aufgabe hast Du jetzt viele kleine Aufgaben gemacht. Die kannst Du der Reihe nach angehen. Jedes für sich dürfte von der Komplexität her auch gut beherrschbar sein.

Und ich nehme noch eine Sache vorweg: Diese Implementierung solltest Du Dir anschauen und dich fragen, wie effektiv die ist. Und dann kannst Du Dir überlegen, ob Du diese optimieren kannst. Das wäre eine super weiterführende Übung. @fhoffmann hat das schon recht gut zusammen gefasst. Da wäre dann die Frage, in wie weit man dies schrittweise einbauen kann. Das lässt sich sehr schön in zwei Teile aufbrechen. Wenn Du Interesse hast, das anzugehen, dann können wir das hier auch noch (nach einer ersten Implementation der obigen Methoden) machen.
 
E

E27T

Aktives Mitglied
okay habe gerade die Information erhalten, dass ich das nicht mit einer ArrayList umsetzen soll, sondern einem gewöhnlichen Array
Java:
int getLength();
Wenn die Werte in einem Array gespeichert werden: Wie kommst Du an die Anzahl der Elemente?
An die Länge komme ich mit values.length
Java:
void insertLast(int value);
Jetzt kommt der wirklich interessante part: Ein Array hat eine feste Größe. Wie kann man da noch etwas hinzu fügen? In das bestehende Array geht es nicht, daher muss man einen Umweg gehen. Hast Du da evtl. eine Idee? Du hast einen kleinen Zettel, der ist vollgeschrieben. Jetzt musst Du da noch etwas dazu schreiben? Aber Du willst auch nur einen Zettel haben? Da muss dann ein neuer Zettel her, oder
Hier hätte ich gesagt, dass ich alles vom vollen array in ein neues array kopiere.
Java:
int getFirst();
Erstes Element - wie kommst Du an dieses?
An das erste Element des Char komme ich ja mit values[0]
Java:
void deleteFirst();
Jetzt haben wir ein ähnliches Problem wie zuvor schon: Das Array hat eine feste Größe. Also müsste man hier etwas machen, damit man am Ende ein Array hat mit der richtigen Größe.
Hier würde ich auch irgendwie sagen, dass values[0] gelöscht werden soll..aber wie man das löscht ist mir fraglich. Ich würde irgendwie versuchen ein zweites Array zu machen, indem ich das erste Array reinkopiere ohne den ersten Wert
 
kneitzel

kneitzel

Top Contributor
Jawoll! Du hast auch mit Deinen Vermutungen Recht. Damit hast Du jetzt eine Lösungsidee für alle Methoden und Du kannst diese nun umsetzen.

Wenn bei einem Punkt die Idee noch nicht genau genug ist (z.B. bei "dass ich alles vom vollen array in ein neues array kopiere.") dann schreibe Dir erst die einzelnen Schritte im Detail auf. Also neues Array der Größe .... erstellen, u.s.w.)
 
E

E27T

Aktives Mitglied
Danke schonmal für deine Hilfe.

Die ganzen Methoden kann ich aber doch nur mit einer Instanz der Klasse ArraysIntegerList benutzen, oder nicht?

Ich habe jetzt mal bisschen rumgespielt und ein array angelegt und den ersten 4 "Positionen" auch schon Zahlen vergeben. Die beiden restlichen werden dann mit 0 versehen.

Wenn ich jetzt z.B. die Methode getLength() aufrufen will, geht das nicht mit "array". Sobald ich einen Punkt hinter array mache, zeigt mir Eclipse ja alle Methoden an. Diese 5 Methoden zeigt er mir nicht an..

Java:
import java.util.Arrays;

public class ArraysIntegerList1 implements IntegerList{

    public static void main(String[] args) {
        
        ArraysIntegerList1 list = new ArraysIntegerList1();
        
        list.deleteFirst();
        System.out.println(list);
        
        //Array anlegen
        int[] array = new int[6];
        array[0] = 1;
        array[1] = 2;
        array[2] = 3;
        array[3] = 4;
        
        //Kopie vom array
        int[] array2 = Arrays.copyOfRange(array, 1, array.length);
        System.out.println(Arrays.toString(array));
        System.out.println(Arrays.toString(array2));
        System.out.println(array.length);
        
        //list ausgeben
        System.out.println(list.getLength());
        
        
//        for (int i = 0; i < array.length; ++i)
//        {
//            list[i] = array[i];
//        }
        
    }

    @Override
    public int getLength() {
        
        return 0;
    }

    @Override
    public void insertLast(int value) {
        
    }
 
E

E27T

Aktives Mitglied
Bin jetzt maximal verwirrt. Warum soll ich mein array zu einem Typ ArraysIntegerList1 machen?
 
kneitzel

kneitzel

Top Contributor
Also irgendwie ist das alles nicht das, was wir besprochen haben ...

Wie @fhoffmann schon sagte: Vergiss die main Methode. Das war nichts, über das wir gesprochen hatten. Du sollst lediglich die Methoden des Interfaces implementieren.

Und wenn es dann später zu der main Methode kommt: Das Array ist nur intern in der Klasse - die Main Methode interessiert das nicht! Das ist die Kapselung: Die ArrayIntegerList hält intern irgendwie die Daten - wie genau interessiert niemanden außerhalb der Klasse! Und die main Methode ist sozusagen außerhalb - die kannst Du auch in eine Klasse Test oder Main stecken!

Und was die Implementation anging:
a) Hattest Du da doch schon das interne Array values. Das ist das einzige Array welches Du dann von deinen Methoden aus nutzt!
b) getLength hattest Du doch schon gesagt, wie Du die Länge bekommen könntest. Wie kommen wir da jetzt zu einem return 0?
 
E

E27T

Aktives Mitglied
Und was die Implementation anging:
a) Hattest Du da doch schon das interne Array values. Das ist das einzige Array welches Du dann von deinen Methoden aus nutzt!
b) getLength hattest Du doch schon gesagt, wie Du die Länge bekommen könntest. Wie kommen wir da jetzt zu einem return 0?
Ich habe die getLaenge() Methode noch nicht implementiert. Es happert an der Sprache.. Ich weiß nicht wie ich meine Gedanken zu code bringe
 
temi

temi

Top Contributor
Leider ist in der Beschreibung nicht erwähnt, wie damit umgegangen werden soll, wenn das interne Array voll ist, bzw. wie groß das Array sein soll, wenn eine neue leere ArrayIntegerList erzeugt wird.
An die Länge komme ich mit values.length
Das kann stimmen, muss es aber nicht. Length liefert bei Arrays die Länge mit der das Array deklariert und initialisiert wurde. Nehmen wir an, du erzeugst eine neue leere Liste und nimmst als Initiallänge für das Array den Wert 10, dann liefert dir getLength() diesen Wert zurück, unabhängig, ob bereits ein Wert der Liste hinzugefügt wurde oder nicht. Ob das so gewollt ist? Keine Ahnung.

Falls nicht, dann musst du dir was anderes überlegen (was du im Übrigen, meiner Ansicht nach, für die Methode insertLast() sowieso brauchst).
 
kneitzel

kneitzel

Top Contributor
@temi Wir haben das doch im Thread erläutert. @fhoffmann hat eine komplexere, optimierte Logik ja recht früh vorgeschlagen. Aber hier geht es doch noch um absolute Basics und da wird dann das Array immer auf der korrekten Länge gehalten und bei jedem Einfügen oder Löschen werden dann Werte in ein neues Array mit angepasster Größe kopiert.

@E27T Wo hapert es denn derzeit? Wenn Du die main Methode nicht links liegen lassen kannst, dann gebe ich Dir einfach eine vor und diese wird nicht mehr angepasst.

Java:
public static void main(final String[] args) {
    IntegerList list = new ArrayIntegerList();
    list.insertLast(1);
    list.insertLast(2);
    list.deleteFirst();
    System.out.println("Erster Wert: " + list.getFirst());
}

Hilft das, um erst einmal alle Methoden zu schreiben?
 
kneitzel

kneitzel

Top Contributor
Ansonsten auch noch einmal den aktuellen Stand, den wir bis jetzt haben und an dem Du nur weiter machen musst:

Java:
public class ArrayIntegerList implements IntegerList {
    private int[] values = new int[0];
    
    public int getLength() {
        // An die Länge komme ich mit values.length
    }
    
    public void insertLast(int value) {
        // Hier hätte ich gesagt, dass ich alles vom vollen array in ein neues array kopiere.
    }
    
    public int getFirst() {
        // An das erste Element des Char komme ich ja mit values[0]
    }
    
    public void deleteFirst() {
        // Ich würde irgendwie versuchen ein zweites Array zu machen, indem ich das erste Array reinkopiere ohne den ersten Wert
    }
}

Die Beschreibungen sind teilweise zu ungenau, aber der Weg dürfte deutlich sein ...
 
E

E27T

Aktives Mitglied
Sooo...Jetzt habe ich endlich raus..Musste paar Nächte drüber schlafen und mir das einmal durch den Kopf gehen lassen.
Die Main Methode hat in der class ArraysIntegerList selbstverständlich nichts zu suchen.

Jetzt sieht mein Programm so aus...
public class ArraysIntegerList implements IntegerList:
import java.util.Arrays;

public class ArraysIntegerList implements IntegerList{
    
        //Attribut array
        int[] array;
        
        
    //Konstruktor
    ArraysIntegerList(int... value){    //Array an Kontruktor übergeben    //warum geht das nicht mit []?
        array = new int[value.length];    //array ist genau so lang wie value
        for (int i = 0; i < value.length; ++i)
        {
            array[i] = value[i];
        }
    }
    
    @Override
    public int getLength() {
        return array.length;
    }

    @Override
    public void insertLast(int value) {
        int[] arraynew = Arrays.copyOfRange(array, 0, array.length + 1);    //Neues Array +1
        arraynew[arraynew.length - 1] = value;    //
        array = arraynew;
        System.out.println(Arrays.toString(array));
    }

    @Override
    public int getFirst() {
        return array[0];
    }

    @Override
    public void deleteFirst() {
        int[] array2 = Arrays.copyOfRange(array, 1, array.length);    //original,von,bis
        array = array2;
        System.out.println(Arrays.toString(array));
    }

    @Override
    public boolean search(int value) {
        for (int i = 0; i < array.length; ++i)
        {
            if (array[i] == value)
            {
                System.out.print("Die Zahl " + value + " ist enthalten: "); return true;
            }
        }
        System.out.print("Die Zahl " + value + " ist nicht enthalten: "); return false;
    }
}


public class main:
import java.util.Arrays;

public class main {

    public static void main(String[] args) {
        
        //Instanz erzeugen
        ArraysIntegerList list = new ArraysIntegerList(1,2,3);//Werte werden an Konstruktor übergeben
        
        
        //Länge ausgeben
        System.out.println("Das Array hat " + list.getLength() + " Elemente");
        
        //Nach Wert suchen
        System.out.println(list.search(25));
        //Ausgeben, ob gefunden
        System.out.println("Die erste Zahl der Liste ist die " + list.getFirst());
        
        //Array ausgeben
        System.out.println("Das Array hat folgende Elemente: " + Arrays.toString(list.array));
        
        //Löscht erste Stelle
        list.deleteFirst();
        
        //Neue Zahl hinzufügen
        list.insertLast(999);
        
        list.insertLast(1000);
        
        list.insertLast(2000);
        
        list.deleteFirst();
    }

}


Lediglich bei dem Konstruktor musste ich bisschen googlen und abgucken wie man ein array an den Konstruktor übergibt..

Doch zu Konstruktor noch eine Frage.. Warum funktioniert lediglich diese Variante: ArraysIntegerList(int... value) und nicht: ArraysIntegerList(int[] value)?
 
kneitzel

kneitzel

Top Contributor
Du kannst auch ein Array als Parameter angeben, aber dann muss der Aufruf auch ein Array enthalten und nicht einfach nur mehrere Parameter.
 
E

E27T

Aktives Mitglied
quasi irgendwie sowas ArraysIntegerList list = new ArraysIntegerList([1,2,3]); oder sowas in der Art ArraysIntegerList list = new ArraysIntegerList({1,2,3}); ?
 
kneitzel

kneitzel

Top Contributor
Sowas in der Art:
ArraysIntegerList list = new ArraysIntegerList(new int[]{1,2,3});

Ansonsten wundert mich noch etwas in Deinem Code, dass Du mal Arrays nutzt und mal nicht. Im Konstruktor kopiert Du selbst, aber bei allen weiteren Methoden kommt Arrays.copyOfRange zum Einsatz... (Aber das ist natürlich auch kein Fehler ..)
 
E

E27T

Aktives Mitglied
Sowas in der Art:
ArraysIntegerList list = new ArraysIntegerList(new int[]{1,2,3});
Danke.

Ansonsten wundert mich noch etwas in Deinem Code, dass Du mal Arrays nutzt und mal nicht. Im Konstruktor kopiert Du selbst, aber bei allen weiteren Methoden kommt Arrays.copyOfRange zum Einsatz..
Was genau meinst du? Die Arrays.copyOfRange Methode habe ich im Buch gefunden und fand die Methode gut anwendbar.

Meinst du damit, dass ich Arrays.copyOfRange auch im Konstruktor verwenden könnte?
 
kneitzel

kneitzel

Top Contributor
Meinst du damit, dass ich Arrays.copyOfRange auch im Konstruktor verwenden könnte?
Ja, wenn Du so Klassen aus dem Framework nutzt, dann würde ich das konsequent erwarten. Da stellt sich nur die Frage, in wie weit dies aus Sicht der Aufgabe erlaubt / erwünscht ist. Wobei man anstatt eine solche Klasse zu nutzen natürlich auch so eine copyOfRange Methode selbst schreiben kann. Dann bleibt Dein Code so schön lesbar und Du nutzt nichts, das ggf. unerwünscht ist. (Ziel der Aufgabe ist ja aus meiner Sicht eher, den Umgang mit Arrays zu üben, also eigenen Code zu schreiben, der entsprechend mit dem Array arbeitet.)

Dann solltest Du Dir ggf. auch die Klasse Arrays im Detail ansehen. Arrays.copyOfRange funktioniert, aber wenn das ganze Array kopiert werden soll, dann ist ggf. Arrays.copyOf besser geeignet / die bevorzugte Wahl.

Das sind aber nur noch absolute Kleinigkeiten. Den Umgang mit Arrays hast Du im Konstruktor ja bereits gezeigt.

Daher wäre jetzt die Frage: Hast Du Interesse, als Übung die Lösung zu optimieren?
- Du kannst z.B. beim Löschen kein neues Array erzeugen. Statt dessen hast Du eine Variable, den den Anfang der Werte kennzeichnet. Dementsprechend musst Du dann halt alle Methoden anpassen.
- Du kannst generell größere Arrays belegen. Dann hast Du eine zusätzliche Variable, die das Ende kennzeichnet. Dann musst Du wiederum alle Methoden prüfen, was geändert werden muss.
Der Vorteil ist, dass Du deutlich weniger Daten umher kopieren musst.

Also als Beispiel: Du legst beim Konstruktor ein Array mit einer festen Größe an, z.B. 10, start ist 0 und end ist -1

Wenn Du dann einfügen willst, dann schaust Du, ob hinter end noch was frei ist. Wenn das der Fall ist, dann erhöhst Du end und füllst das Feld:
end ist dann 0.
Wenn Du etwas entnehmen willst, dann schaust Du, ob start <=end ist, ist dies der Fall, dann entnimmst Du das Element bei start und erhöhst start um 1.

Wenn kein Platz mehr im Array ist, dann erzeugst Du ein neues Array mit angepasster Größe und kopierst die Werte von start - end an den Anfang. start ist dann wieder 0, end zeigt auf das letzte Element ...
 
E

E27T

Aktives Mitglied
Das hört sich auf jeden Fall interessant an, doch ich muss schon die nächsten Aufgaben machen. Dazu hätte ich auch schon eine Frage. Es geht um Schnittstellen und und Comparable<Figur>. Jetzt weiß ich nicht, ob ich das in diesem Thread schreiben soll oder einem anderen.
 
Programmer20

Programmer20

Mitglied
@BlackBookOne
Es hilft doch niemandem beim Lernen von Java, wenn du hier fertige Lösungen präsentierst!
Ich muss sagen mir hilft es schon, wenn ich die Lösung sehe. So kann ich den Weg nachvollziehen und Schritt für Schritt noch einmal alles durchgehen. Wenn man so gar keine Ahnung hat, wie es richtig ist, ist das für mich manchmal sehr deprimierend..
 
kneitzel

kneitzel

Top Contributor
Ich muss sagen mir hilft es schon, wenn ich die Lösung sehe. So kann ich den Weg nachvollziehen und Schritt für Schritt noch einmal alles durchgehen. Wenn man so gar keine Ahnung hat, wie es richtig ist, ist das für mich manchmal sehr deprimierend..
Ja, aber der Lerneffekt ist stark begrenzt. Und das Ziel von uns ist nun einmal, dass jemand in die Lage versetzt wird, so Dinge in Zukunft selbst zu lösen. Und das ist deutlich aufwändiger für uns als in 5 Minuten eben irgend eine Lösung hin zu klatschen. Ja, das ist deutlich einfacher als sich hinzu setzen und darüber nach zu denken, wo denn der TE ggf. ein Problem haben könnte um dieses dann zu erläutern.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S ArrayList Gruppieren, "Doppelte Werte" Addieren Java Basics - Anfänger-Themen 5
D Methoden ArrayList Rückgabe bringt komische Werte Java Basics - Anfänger-Themen 12
D Bestimmte Werte von Objekten aus einer ArrayList in eine andere ArrayList kopieren Java Basics - Anfänger-Themen 14
P ArrayList aus eigener Klasse "überschreibt" Werte nicht Java Basics - Anfänger-Themen 4
F Wie Werte einer ArrayList an einen 'Custom'-Iterator übergeben? Java Basics - Anfänger-Themen 2
Z ArrayList übergibt die Werte nicht Java Basics - Anfänger-Themen 4
N Zugriff auf Werte in Arrays innerhalb ArrayList Java Basics - Anfänger-Themen 2
O Werte aus ArrayList multiplizieren und dann Ergebnis addieren Java Basics - Anfänger-Themen 3
D X Werte in ArrayList von Point Objekte alle gleich ? Java Basics - Anfänger-Themen 11
T integer Werte einer ArrayList miteinander addieren Java Basics - Anfänger-Themen 5
O Werte aus HashMap in einer ArrayList Java Basics - Anfänger-Themen 3
S Arraylist durchsuchen und werte speichern Java Basics - Anfänger-Themen 14
B ArrayList füllen und Werte summieren Java Basics - Anfänger-Themen 2
M ArrayList: Werte aussortieren Java Basics - Anfänger-Themen 14
H Java- ArrayList überschreibt Werte eigenständig! Java Basics - Anfänger-Themen 4
E ArrayList auf 4 Elemente begrenzen Java Basics - Anfänger-Themen 56
C ArrayList sortieren nach bestimmten Buchstaben in den Wörtern Java Basics - Anfänger-Themen 13
S Arraylist<Object> mit verschiedenen Objects ausgeben Java Basics - Anfänger-Themen 3
J ArrayList auf bereits vorhanden eintrag prüfen Java Basics - Anfänger-Themen 5
M For Schleife/ArrayList Java Basics - Anfänger-Themen 12
E ArrayList<String> --> double[] array Java Basics - Anfänger-Themen 18
E Längstes Element einer ArrayList ausgeben Java Basics - Anfänger-Themen 9
S Aus verschachtelter ArrayList auf einen Wert zugreifen Java Basics - Anfänger-Themen 4
M ArrayList in GUI ausgeben Java Basics - Anfänger-Themen 1
J Nur bestimmter Typ aus der ArrayList ausgeben. Java Basics - Anfänger-Themen 9
Bademeister007 Hallo Leute ich hab eine Frage zur ArrayList Java Basics - Anfänger-Themen 8
Bademeister007 Operatoren Alle Zahlen einer ArrayList die durch 5 teilbar ist Java Basics - Anfänger-Themen 2
S Objekt aus Arraylist in andere Arraylist kopieren? Java Basics - Anfänger-Themen 2
C Sortieren einer ArrayList Java Basics - Anfänger-Themen 2
krgewb ArrayList von ArrayList Java Basics - Anfänger-Themen 2
R ArrayList Problem Java Basics - Anfänger-Themen 6
jonny_2k12 Wie kann ich eine ArrayList aus einer Klasse in eine andere übergeben? Java Basics - Anfänger-Themen 21
O Namen (mit Umlauten und ß) in einer ArrayList suchen Java Basics - Anfänger-Themen 5
N Typebound Objekte einer Arraylist hinzufügen Java Basics - Anfänger-Themen 7
R Methoden ArrayList clonen wirft exception Java Basics - Anfänger-Themen 3
S ArrayList in andere Klasse übernhemen Java Basics - Anfänger-Themen 5
M Letztes Element einer ArrayList Java Basics - Anfänger-Themen 12
B Objektverwaltung mit ArrayList in einer seperaten Klasse Java Basics - Anfänger-Themen 24
I Sortiert eine HashMap nicht gleich wie eine ArrayList? Java Basics - Anfänger-Themen 1
I ArrayList erstellen innerhalb einer Zeile? Java Basics - Anfänger-Themen 3
L Iterieren durch eine ArrayList. Integer Array wird übergeben Java Basics - Anfänger-Themen 17
V Collections ArrayList mit Comparator sortieren Java Basics - Anfänger-Themen 16
D Collections Arrays in ArrayList abspeichern Java Basics - Anfänger-Themen 6
F java.util.ArrayList Java Basics - Anfänger-Themen 3
M ArrayList - Objekt kopieren und ändern Java Basics - Anfänger-Themen 11
M Zugriff auf eine ArrayList in einer anderen Klasse Java Basics - Anfänger-Themen 4
P Arraylist zu einem Array bringen mit Verschachtelung Java Basics - Anfänger-Themen 11
N Methode mit einer Arraylist Java Basics - Anfänger-Themen 106
I ArrayList - Methode zum Speichern eines Eintrags in einer Datei Java Basics - Anfänger-Themen 17
H ArrayList Java Basics - Anfänger-Themen 7
D public ArrayList(Collection<? extends E> c); Java Basics - Anfänger-Themen 2
M JTextField in ArrayList speichern Java Basics - Anfänger-Themen 4
C ArrayList mit return zurückgeben Java Basics - Anfänger-Themen 13
K Zahlenfolge ArrayList Java Basics - Anfänger-Themen 3
C Erste Schritte Frage zur ArrayList Java Basics - Anfänger-Themen 15
I Klassen Eine ArrayList<Long>, die sich automatisch sortiert Java Basics - Anfänger-Themen 20
F Array in ArrayList ablegen Java Basics - Anfänger-Themen 3
V ArrayList Java Basics - Anfänger-Themen 1
Z Runden Arraylist Java Basics - Anfänger-Themen 9
X Frage zur einer ArrayList in einer ArrayList Java Basics - Anfänger-Themen 5
F Arraylist als Pfadausgabe Java Basics - Anfänger-Themen 10
L Daten aus ArrayList in Datenbank durchsuchen Java Basics - Anfänger-Themen 5
L Objekt aus Textdatei in ArrayList speichern Java Basics - Anfänger-Themen 4
M Problem mit ArrayList Java Basics - Anfänger-Themen 32
X Objekte einer ArrayList richtig ausgeben? Java Basics - Anfänger-Themen 8
O Hashmap, ArrayList, LinkedList Java Basics - Anfänger-Themen 7
X Problem mit Arraylist in Arraylist Java Basics - Anfänger-Themen 2
O HashMap - ArrayList Java Basics - Anfänger-Themen 29
M UML-Klassendiagramm ArrayList Java Basics - Anfänger-Themen 1
O ArrayList oberflächig durchsuchen Java Basics - Anfänger-Themen 3
I "\n" aus ArrayList enfernen, aber wie?! Java Basics - Anfänger-Themen 4
V Collections Objekte einer ArrayList in der main() ausgeben Java Basics - Anfänger-Themen 9
Jackii ArrayList ausgabe ohne Dopplung Java Basics - Anfänger-Themen 11
N ArrayList in eigener Klasse erzeugen mit Zugriff Java Basics - Anfänger-Themen 7
B ArrayList besitzt einen Wert zu wenig Java Basics - Anfänger-Themen 16
UnknownInnocent Variablen ArrayList aufteilen Java Basics - Anfänger-Themen 2
UnknownInnocent Datentypen Objekt lässt sich nicht zu arraylist hinzufügen Java Basics - Anfänger-Themen 2
UnknownInnocent Datentypen Integer ArrayList sortieren Java Basics - Anfänger-Themen 2
D new arraylist (List) dynamisch erstellen Java Basics - Anfänger-Themen 1
S ArrayList.add Falsches Argument? Java Basics - Anfänger-Themen 1
D remove arraylist by id not work Java Basics - Anfänger-Themen 6
E ArrayList sortieren Java Basics - Anfänger-Themen 16
K In einem Case gefüllte Arraylist in einer anderen Case ausgeben Java Basics - Anfänger-Themen 2
D Object in ArrayList ausgeben Java Basics - Anfänger-Themen 24
J ArrayList Name mit String erstellen Java Basics - Anfänger-Themen 8
W Von ArrayList zu CSV zu ArrayList Java Basics - Anfänger-Themen 5
W ArrayList löscht alle Elemente bis auf eines Java Basics - Anfänger-Themen 2
W ArrayList NullPointerException Java Basics - Anfänger-Themen 4
L Collections Ist eine Arraylist hier das richtige? Java Basics - Anfänger-Themen 12
D Input/Output ArrayList ausgabe Java Basics - Anfänger-Themen 4
D Auf ArrayList mit get zugreifen Java Basics - Anfänger-Themen 8
S Mit FileReader lesen, in ArrayList speichern Java Basics - Anfänger-Themen 4
A ArrayList - size() nur nach bestimmtem index anzeigen lassen Java Basics - Anfänger-Themen 13
S Binärbaum in PreOrder in ArrayList speichern Java Basics - Anfänger-Themen 0
C ArrayList vs LinkedList vs ? Java Basics - Anfänger-Themen 15
B Vom scanner in ein Arraylist Java Basics - Anfänger-Themen 7
C LinkedList vs. ArrayList Java Basics - Anfänger-Themen 15
X Objekte in ArrayList einfügen Java Basics - Anfänger-Themen 10
M ArrayList Java Basics - Anfänger-Themen 13
C ArrayList ausgeben Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Anzeige

Neue Themen


Oben