Elemente aus ArrayList entfernen

Bambino_Uno

Mitglied
Thread Starter
Dabei seit
03.04.2007
Beiträge
65
Reaktionspunkte
0
Hallo Leute!
Ich beschäftige mich gerade mit dynamischen Arrays (ArrayList) und habe diesbezüglich eine Frage: kann man Arrayelemente wirklich löschen oder muss ich sie überschreiben. Um konkreter zu werden, hier der Code:
Code:
package komplexe_datenstrukturen;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class ArrayList3
{ 
	   public static void main(String[] args) 
	   { 
		   int i;
		   int j;
		   String delete;
		   Scanner sc = new Scanner(System.in);
		   String [] namen = new String[5];
		   String [] arraynamen;

		  List<String> list = new ArrayList<String>(Arrays.asList( new String[] {}));
		  System.out.println("Wieviele Namen sollen erfasst werden? ");
		  j= sc.nextInt();
		   for (i=0;i<j;i++){
			   System.out.println((i+1)+". Namen: ");
			   namen[i] = sc.next();
		   
		   Collections.addAll( list, namen[i]); 
	      Collections.sort( list ); 
		   }
	      System.out.println( list ); 
	    
	      // Passenden Array generieren
	      arraynamen = new String[list.size()];
	      
	      // Array füllen
	      for (i =0; i<arraynamen.length;i++){
	    	  arraynamen[i]=list.get(i);
	      }
	      
	      // Ausgabe
	      for (i=0; i<arraynamen.length;i++){
	    	  System.out.println(arraynamen[i]);
	      }
	     
	      
	      // Elemente löschen
	      System.out.print("Welcher Name soll gelöscht werden?" );
	      delete=sc.next();
	      for(i=0; i<arraynamen.length;i++){
	    	  if(arraynamen[i].equals(delete)){
	    	  arraynamen[i]=null;  
	      }
	      }
	      // neue Ausgabe
	      for (i=0; i<arraynamen.length;i++){
	    	  System.out.println(arraynamen[i]);
	      }
	}
}

Nachdem die Namen der Liste hinzugefügt werden und diese in einen passenden Array umgewandelt wird, sollen Namen entfernt werden können. Ich hab´s mit:
// Elemente löschen
System.out.print("Welcher Name soll gelöscht werden?" );
delete=sc.next();
for(i=0; i<arraynamen.length;i++){
if(arraynamen.equals(delete)){
arraynamen=null;
}
}
versucht. Aber der zu löschende Name wurde lediglich mit 'null' überschrieben. Wie kann man ihn wirklich aus der Liste entfernen?

Vielen Dank schon mal im Voraus!:kopfkratz:
 
So funktionierts.
Code:
import java.util.*;

public class Main {

	public static void main(String[] args) {
		
		ArrayList<String> al = new ArrayList<String>();
		
		al.add("Du");
		al.add("hast");
		al.add("ArrayList");
		al.add("nicht");
		al.add("verstanden");
		
		System.out.println(al.toString());
		
		al.remove("nicht");
		
		System.out.println(al.toString());
		
	}

}

Du musst dir erstmal in der API Dokumentation ansehen, was man wie mit einer ArrayList machen kann. Das steht hier.


Du legst da oben zwar eine ArrayList an (Variable list), führst die Aktionen dann aber doch auf einem normalen Array durch (arraynamen). Dazu gehst du sogar das ganze Ding mit einer For-Schleife durch. Das ist bei einer ArrayList gar nicht nötig.

Code:
arrayList.remove(delete);

Gesucht wird dann das erste Auftreten von delete in der ArrayList und von dort entfernt.

Mit
Code:
arrayList.remove(0);
wird z.B. das erste Element entfernt. Das zuvor zweite Element ist dann das neue erste.
 
Danke! - damit hast Du auch gleich eine andere Frage mit beantwortet: ich hab mich selbst schon gewundert, was 'ArrayList' eigentlich bringt, wenn ich die Werte mit einem 'normalen Array' zuweise.
 
OK - für das Löschen eines Elementes brauche ich keine Schleife.
Allerdings ist mir schleierhaft, wie ich per Konsole neue Elemente in die Liste hinzufüge, ohne auf einen 'normalen' Array und eine Schleife zurückzugreifen.
Na, ja - wahrscheinlich wird es Zeit mich endlich an die Lektüre der API-Dokumentation zu machen!
 
du solltest dich glaube ich nicht nur mit der API beschäftigen, sondern auch ein wenig mehr mit java programmierung ;)
sehr sehr umständlich was du da machst...

warum füllst du denn die arraylist nicht direkt, statt eine collection dazu zu benutzen?
die anderen arrays kannst du dir ja auch sparen, weil die arraylist eine liste ist, auf die man auch wie auf ein array zugreifen kann...

was genau sollst du eigentlich da als aufgabe programmieren?
 
:D Ja, die API ist gerade bei solchen Fragen sehr hilfreich.
Du kannst etwas hinzufuegen durch arrayList.add(element); oder an eine bestimmte Stelle, falls noetig durch arrayList.add(index, element).
 
du solltest dich glaube ich nicht nur mit der API beschäftigen, sondern auch ein wenig mehr mit java programmierung ;)
sehr sehr umständlich was du da machst...

warum füllst du denn die arraylist nicht direkt, statt eine collection dazu zu benutzen?
die anderen arrays kannst du dir ja auch sparen, weil die arraylist eine liste ist, auf die man auch wie auf ein array zugreifen kann...

was genau sollst du eigentlich da als aufgabe programmieren?

Es geht (noch) nicht um eine konkrete Aufgabe. Bin im Anfängerbuch auf das Thema Listen gestoßen und habe mit dem Beispielcode etwas herumexperimentiert: da hab ich mich zum Einen gefragt, wie ich Elemente per Konsole hinzufüge und wie ich Elemente entfernen kann. Da die Ausführungen im Buch sehr rudimentär sind und darauf keinen Bezug nehmen hab ich mich im Internet auf die Suche begeben und bin auch einen Sourcecode gestoßen, in dem das Hinzufügen der Listenelemente mit einem Array erfolgt. Mittlerweile ist mir klar geworden, dass dies den Vorteil von dynamischen Arrays - sich nicht auf eine feste Anzahl von Elementen festlegen zu müssen - konterkariert. Nähert man sich einem Thema exemplarisch zu Beispiele, so läuft man immter Gefahr den systematischen Gesammtzusammenhang aus den Augen zu verlieren.
 
Wenn du gerade am lernen bist empfehle ich dir dich mal mit Collections im Allgemeinen auseinander zu setzen. Es gibt da weitaus mehr als nur die ArrayList oder den Vector und es ist wichtig zu wissen, an welchen Stellen man am besten auf welche Collections zurueckgreifen kann.

Dazu gibts einen guten Artikel bei Sun, zu finden hier:
http://java.sun.com/docs/books/tutorial/collections/index.html
 
Danke nochmal an alle die mir geholfen haben 'ArrayList' besser zu verstehen.
Um den Thread zu vervollständigen poste ich hier den überarbeiteten Quellcode des Anfangsbeispiels. Ist wahrscheinlich an der ein oder anderen Stelle (insbesondere beim Löschen) noch immer etwas umständlich. Vielleicht hilft es anderen Java-Anfängern, den Einstieg in 'ArrayList' schneller zu finden.
Code:
package komplexe_datenstrukturen;
import java.util.*;

public class ArrayList5 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		// Deklaration der Variablen 
		Scanner sc = new Scanner(System.in);
		String name;
		List<String> namensliste = new ArrayList<String>();
		
		// Einlesen der Namen
		System.out.println("Geben Sie die Namen ein! ('E' für Abbruch) ");
		while (true){
			System.out.println("Name: ");
			name = sc.next();
			if (!name.equals("E"))
				namensliste.add(name);
			else
				break;
		}
		
		// Sortiern und Ausgeben der Namen
		for (int i=0;i<namensliste.size();i++){
			Collections.sort(namensliste); 
			name=namensliste.get(i);
			System.out.println(i+ ". Name: " + name);
		}
		
		// Löschen von Namen
		System.out.println("Geben Sie den zu löschenden Namen ein! ('E' für Abbruch)");
		while (true){
			System.out.println("Name: ");
			name = sc.next();
			if (!name.equals("E")){
				for (int i=0;i<namensliste.size();i++){
					if (name.equals(namensliste.get(i))){
						name = namensliste.remove(i);
						System.out.println(name + " wurde gelöscht!");
					}
		
			}
			}
			else
				break;
				
			}
		
		// Neue Ausgabe der Namen
		for (int i=0;i<namensliste.size();i++){
			Collections.sort(namensliste); 
			name=namensliste.get(i);
			System.out.println(i+ ". Name: " + name);
		}
		
		}
		
	}
 
Zurück
Oben Unten