# Wie liest dieses Java-Programm der Compiler?



## Whistleblower (26. Feb 2017)

Hallo allerseits! 

Ich habe seit kurzem mir ein Buch über Datenbanken geborgt und hier diesen Code-Schnippsel gefunden:



```
import java.util.*;
public class SimpleDB {
  public static void main (String[]args) {
    List<String> database = new ArrayList<String> ();
    database.add ("Elvis Presley");
    database.add ("Beatles");
    database.add ("Rolling Stones");
    database.remove (database.indexOf ("Beatles"));
     int index=database.indexOf("Rolling Stones");
    database.set (index, "The Rolling Stones");
       System.out.println (database.contains ("Elvis Presley"));
         System.out.println (database);
 
  }
}
```

So wie ich es verstanden habe, zählt ja das Programm nicht ab der 1 sondern ab der 0 und entsprechend wurde dann das so geschrieben, dass der Eintrag von Beatles gelöscht wird und zusammen mit dem Index von Rolling Stones zusammen gesettet wird. Ich versteh jedoch jetzt nicht genau den Sinn dahinter, bzw. welche Aussage das compilierte Ergebnis:

true
[Elvis Presley, The Rolling Stones ]

zu bedeuten hat. True muss man ja in der Regel auf boolesche Anweisungen zurückführen, hier ist es aber ein generischer String-Wert. Da ich nie mit Java im Zusammenhang mit Datenbanken gearbeitet habe, finde ich sieht es recht verwirrend aus 
Kann mir jemand diesen Java-Code erklären?


----------



## Robat (26. Feb 2017)

Whistleblower hat gesagt.:


> List<String> database = new ArrayList<String> ();
> database.add ("Elvis Presley");
> database.add ("Beatles");
> database.add ("Rolling Stones");



Du legst eine Liste mit Strings an und fügst dieser Liste 3 Elemente hinzu.



Whistleblower hat gesagt.:


> database.remove (database.indexOf ("Beatles"));


Hier suchst du dir den Index des Elementes welches "Beatles" enthält und löschst diesen Eintrag.
Alle anderen Elemente rutschen nach um die Lücke aufzufüllen.



Whistleblower hat gesagt.:


> int index=database.indexOf("Rolling Stones");


Hier holst du dir den Index des Elementes welches "Rolling Stones" enthält und speicherst diesen Wert in einer Variable.



Whistleblower hat gesagt.:


> database.set (index, "The Rolling Stones");


Du überschreibst den Eintrag an der o.g. Stelle mit dem Wert "The Rolling Stones" .. somit wird aus "Rolling Stones" --> "The Rolling Stones".



Whistleblower hat gesagt.:


> System.out.println (database.contains ("Elvis Presley"));
> System.out.println (database);


database.contains("...") gibt dann true wenn der übergebene Wert in der Liste vorkommt. Das ist der Fall.

Sollte das noch nicht reichen dann Stell bitte noch mal eine etwas genauere Frage 

*PS:* Code bitte immer in [code=Java]MY CODE[/code] Tags 

Gruß Robert


----------



## Whistleblower (2. Mrz 2017)

aha..ok danke. Hab zunächst nicht bemerkt, dass bei dem einen Rolling Stones Eintrag das "The" fehlt ^^
also, ist es einfach so, dass es den Eintrag "Beatles" vollkommen löscht, nicht nur den Index und mit dem Befehl _contains _überprüft das Programm, ob Elvis Presley in der Datenbank existiert, das ist klar.
Was ich nicht ganz noch verstehe: wieso wird "The Rolling Stones" auch mit einbezogen. Das wäre ja der Fall wenn beide Einträge die selbe Variable teilen. Aber ich glaube, das wird durch den Befehl System.out.println (database); hervorgerufen. Ok, dann doch alles klar (glaube ich  )
ich habe  nur gedacht der Sinn sollte sein, dass nicht ein ganzer Eintrag gelöscht wird sondern dass der Index verschoben wird, halt statt 
0
1
2
die Indexfolge 
1 
2
3 
entsteht.
Aber  das ist im Buch halt irgendwie verschachtelt erläutert worden.


----------



## Joose (2. Mrz 2017)

Whistleblower hat gesagt.:


> mit dem Befehl _contains _überprüft das Programm, ob Elvis Presley in der Datenbank existiert, das ist klar.


Es handelt sich um eine einfache Liste und keine Datenbank!



Whistleblower hat gesagt.:


> Was ich nicht ganz noch verstehe: wieso wird "The Rolling Stones" auch mit einbezogen. Das wäre ja der Fall wenn beide Einträge die selbe Variable teilen. Aber ich glaube, das wird durch den Befehl System.out.println (database); hervorgerufen. Ok, dann doch alles klar (glaube ich  )


Mit `System.out.println (database);` wird die Liste auf der Konsole ausgegeben. Dabei werden einfach die Einträge der Liste ausgegeben.



Whistleblower hat gesagt.:


> ich habe  nur gedacht der Sinn sollte sein, dass nicht ein ganzer Eintrag gelöscht wird sondern dass der Index verschoben wird, halt statt


Nein man kann nicht einfach den Index verschieben  Listen und Arrays fangen immer bei Index 0 an. Man kann nur den Inhalt löschen


----------

