# LIFO von FIFO unterscheiden



## bob651 (17. Jul 2016)

Hi, habe hier einen Code

```
public class FolderHolder {
List<Folder> list = new ArrayList<Folder>();
public void add(Folder foo)
{ list.add(0, foo); }
public Folder remove() throws EmptyException
{ return list.remove(0); }
}
```
Soweit ich es sehe ist es doch ein FIFO Container, oder?
Weil das wird eine "0" geaddet, und am Ende wird diese removed.
Habt ihr Tricks wie man es vielleicht leichter herausfinden könne?
Ty


----------



## Kababär (17. Jul 2016)

Es wird keine 0 geaddet, sondern der Folder foo an der Stelle 0 hinzugefügt, also ganz vorne.
Und bei remove() wird das allererste Element wird gelöscht.
Also ein FIFO.

Edit: Manche Implementierungen wie LinkedList sind eindeutig, so ist diese ein Stack, also ein LIFO. 
Prinzipiell hilft es auch öfter, einfach mal aufzuzeichnen wie die Datenelemente angeordnet werden wenn sie hinzugefügt werden und wenn sie gelöscht werden.
Wenn man die zwei Prinzipien verstanden hat, sollte das dann auch nicht so schwer sein.
Oder wie darf ich die Frage verstehen?


----------



## bob651 (17. Jul 2016)

Kababär hat gesagt.:


> Es wird keine 0 geaddet, sondern der Folder foo an der Stelle 0 hinzugefügt, also ganz vorne.


ach so, auf Platz 0 wird foo geaddet und bei remove wird der Eintrag auf Platz 0 sozusagen gelöscht. Ok verstehe. Naja, ich bin noch recht neu dabei und habe Schwierigkeiten LIFO und FIFO Container auf dem BLATT zu unterscheiden. Am PC ist es ja easy durch Probieren. Deshalb die Tipps ^^


----------



## Kababär (17. Jul 2016)

Stell dir einfach eine Warteschlange vor. Normalerweise stellt man sich irgendwo an, der erste der ankam, wird auch als erstes aufgerufen. Er war der Erste und geht als Erster (First in, First out).
Unfair wäre es, wenn der Letzte der Erste wäre, der aufgerufen werden würde (Last in, First out).
Mach dir notfalls eine Skizze ähnlich wie du sie hier siehst:
https://de.wikipedia.org/wiki/First_In_–_First_Out#/media/File:FIFO_PEPS.png

Der IMG-Tag funktioniert nicht  etwas buggy.


----------



## mrBrown (17. Jul 2016)

Kababär hat gesagt.:


> Es wird keine 0 geaddet, sondern der Folder foo an der Stelle 0 hinzugefügt, also ganz vorne.
> Und bei remove() wird das allererste Element wird gelöscht.
> Also ein FIFO.


Also ein LIFO^^

es wird immer eine vorne hinzugefügt, und dann das vorderste entfernt. Was als letztes hinzugefügt wurde, wird also als erstes entfernt => LIFO



Kababär hat gesagt.:


> Edit: Manche Implementierungen wie LinkedList sind eindeutig, so ist diese ein Stack, also ein LIFO.


LinkedList implementiert Queue, also FIFO (zuinnerst add(...)/remove())
(aber sie implementiert auch Decke mit pop/push, also im Prinzip kann man sie für beides beides).


----------



## Kababär (17. Jul 2016)

Hast Recht  
Wird ja vorne eingefügt, nicht hinten.


----------



## mrBrown (17. Jul 2016)

Kababär hat gesagt.:


> Füge ich ein Element zu meiner Liste hinzu, ist das das letzte Element. Das Element ganz vorne ist das erste Element, also das zuerst hinzugefügte Element.
> .



Es wird nicht hinten, sondern vorn angehängt ^^



Kababär hat gesagt.:


> Hast Recht
> Wird ja vorne eingefügt, nicht hinten.


Genau


----------



## bob651 (17. Jul 2016)

wie jetzt, ist es also ein LIFO ?


----------



## Meniskusschaden (17. Jul 2016)

bob651 hat gesagt.:


> wie jetzt, ist es also ein LIFO ?


Ja


----------



## Kababär (17. Jul 2016)

bob651 hat gesagt.:


> wie jetzt, ist es also ein LIFO ?


Ja, sorry


----------



## bob651 (17. Jul 2016)

verstehe ich jetzt nicht mehr. auf 0 wird doch "foo" geaddet, also ist "foo" das erste was reinkam. dann wird der String auf 0 entfernt, also immer das erste. also das erste wird immer zuerst entfernt--> FIFO denk ich hmmm


----------



## Kababär (17. Jul 2016)

Na.. hab ich zuerst auch gedacht.
Aber du fügst an der Stelle 0 deine Elemente ein, nicht hinten. Und holst die Elemente an der Stelle 0 raus.
Die Liste bzw. Warteschlange wurde einfach nur gedreht.
Fügst du A an der Stelle 0 ein und dann B an der Stelle 0, ist A an der Stelle 1.
Bei remove wird nun B zurückgegeben/gelöscht.
Da B als Letztes hinzugefügt wurde, aber als Erstes "aufgerufen" wird, ist es ein last in, first out.

Ich hatte den Aspekt vergessen, dass die Elemente vorne bei 0 eingefügt werden.


----------



## bob651 (17. Jul 2016)

ach so, wenn ich dann noch B einfüge und dann remove mache, wird das letzte gelöscht, also B. AH ok, also das letzte was ich hinzugefügt habe wird gelöscht, LIFO, OK habs


----------

