Variablen unique Value

blubbel

Mitglied
Hallo zsammen,

ich bin grad dabei mir ein kleines Verwaltungstool für Pflanzen zu schreiben. Dabei besitzt eine Pflanze neben anderen Attributen auch eine eindeutige Id. Diese wird standardmäßig über einen autoincrement gesetzt. Da die Pflanzen aber bereits nummeriert sind, brauche auch die Möglichkeit die Id manuell zu setzen. Dabei sollen natürlich trotzdem keine Ids mehrfach vergeben werden. Wie prüfe ich am besten, ob eine Id bereits vergeben ist (Zeile 17-19)?
Unter php würde ich dafür einfach ein statisches assoziatives Array mit key=Id nutzen. Wie kann man sowas unter JAVA realisieren?

Java:
public class Plant implements Serializable{
    private static AtomicInteger nextId = new AtomicInteger();
    private int id;

    public Plant() {
        this.id = nextId.incrementAndGet();
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        if( id >= nextId.get() ){
            nextId.set(id);
        }else{
//             if ( id existiert ? ){
//                throw new Exception("id still exists")
//            }
        }
        this.id = id;
    }
}
 

Spin

Top Contributor
Moin,

Java:
ArrayList list = new ArrayList();

for (Object o : list)
   if (!list.contains(o)) list.add(o);

Ich würde auf jeden Fall kein Set verwenden ;)

Java:
HashSet set =new HashSet();
set .add("X");
set .add("Y");
set .add("X"); // andere objekt wird ersezt

// output : X, Y

grüße spin

PS: contains() ist hier wirklich dein freund ;)
 

Timothy Truckle

Top Contributor
Unter php würde ich dafür einfach ein statisches assoziatives Array mit key=Id nutzen. Wie kann man sowas unter JAVA realisieren?
Das assoziative Array heist in Java [JAPI]Map[/JAPI] und wird üblicher Weise durch eine [JAPI]HashMap[/JAPI] representiert. Aber achtung, die enthält die Daten unsortiert. Wenn Du die Map sortiert (nach Schlüssel) durchgehen möchtest brauchst Du eine [JAPI]TreeMap[/JAPI]. (Frag mich bitte nicht, warum die TreeMap heist...) Unabhängig davon welche Implementierung du wählst sollte der Typ der Variablen
Code:
Map<Integer,Pflanze>
sein...

bye
TT
 

blubbel

Mitglied
Danke erstmal für die Hinweise. In diese Richtungen habe auch schon experementiert.
Eine Map <Integer,Plant> kann ich nicht verwenden, da ich ja bereits im Konstruktor ein add/put mit this durchführen müsste. Wäre ja super, da ich dann nicht noch zusätzlich eine Collection von Plants bräuchte.

Ich benutze nun ein HashSet<Integer>. Daß Einträge überschrieben werden macht ja nichts, da hier ja nur festgehalten wird welche IDs vergeben sind. Da müssen also sowieso keine doppelten Einträge stehen.
 
S

SlaterB

Gast
@Spin
wenn man Doppelte vermeiden will ist absolut ein Set geeigneter,
auch dort ruft man natürlich vorher contains() auf oder schaut sich den Rückgabewert von add() an,

die Liste bietet keinen Vorteil, ist nur langsamer
 

Timothy Truckle

Top Contributor
Eine Map <Integer,Plant> kann ich nicht verwenden, da ich ja bereits im Konstruktor ein add/put mit this durchführen müsste.
Wenn Deine Pflanzen selber ihre ID's verwalten und diese ID's nicht persistiert werden, warum machst Du dann keine "static ID generation":
Java:
class Plant{
  static int idCounter =0;
  private final int id = ++idCounter; //starts with 1
}

bye
TT
 
S

SlaterB

Gast
es ist zwar nicht ganz zu empfehlen, technisch aber normal möglich, im Konstruktor schon das Plant-Objekt in eine Map einzufügen,

auch wenn der Konstruktor danach noch mit Exception abgebrochen wird und der Aufrufer das Plant-Objekt vielleicht nicht erhält,
in der Map wäre es so normal wie jedes andere eingefügt/ verfügbar, vielleicht nicht komplett mit Werten befüllt


@Timothy Truckle
das war ja am Anfang auch so, aber noch manuell zugewiesene Ids erwünscht
 

blubbel

Mitglied
Die Id soll persistent sein. Nach Speichern und Laden, sollen die IDs wieder die selben sein. Diese können Lücken enthalten
Der bestehende Pflanzenbestand hat bereits Ids bzw. Nummern, die bereits Lücken enthalten (hier und da mal was gestorben).
Wenn erstmal alle Pflanzen erfasst sind und neue hinzukommen, kann der autoincrement greifen.
 

Timothy Truckle

Top Contributor
Die Id soll persistent sein. Nach Speichern und Laden, sollen die IDs wieder die selben sein. Diese können Lücken enthalten
Der bestehende Pflanzenbestand hat bereits Ids bzw. Nummern, die bereits Lücken enthalten (hier und da mal was gestorben).
Wenn erstmal alle Pflanzen erfasst sind und neue hinzukommen, kann der autoincrement greifen.
D.h.: Du brauchst die höchste ID ehr selten.
Dann würde ich die Anwendung auch nicht darauf optimieren, sondern die Liste der Pflanzen dann, wenn die neue ID gebraucht wird nach der ID
sortieren (mit Comparator) um die aktuell höchste zu ermitteln.

Oder willst Du die Lücken wiederverwenden?

bye
TT
 

blubbel

Mitglied
@Timothy Truckle
Ja ich denke das werde ich auch so machen (müssen?):
Ich hab nämlich ein Problem beim Laden/Speichern. Ich verwende ein Objekt "PlantManagerProject", welches u.a. in einer ArrayList<Plant> die Pflanzen hält. Wenn im laufenden Program nun ein Projekt Speichere und ein neues Lade müsste ich immer nextID beim starten eines neuen Projekts/Laden eines Vorhandenen immer wieder auf auf 0 zurücksetzen und die Liste vergebenerIDs zurücksetzen....
Das kommt mir ziemlich unsinnig vor.

Performance spielt hier ja ohnehin keine große Rolle.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Wie mache ich die Variable xyz eindeutig/unique? Java Basics - Anfänger-Themen 20
B JaxB - Unique Name updaten / Referenzen in XML Java Basics - Anfänger-Themen 0
J Klassendiagramm: unique Java Basics - Anfänger-Themen 4
B Unique ID nochmal Unique machen Java Basics - Anfänger-Themen 20
B Unique ID für Device im internen Netzwerk Java Basics - Anfänger-Themen 19
I Unique client information in WebApp Java Basics - Anfänger-Themen 3
I Unique ID für Computer Java Basics - Anfänger-Themen 10
Dingoe Input/Output Unique ID's für Objekte Java Basics - Anfänger-Themen 5
F Unique Object Java Basics - Anfänger-Themen 3
J Datentypen Meine Hashliste ist nicht unique Java Basics - Anfänger-Themen 5
A ComboBox mit unique Werten Java Basics - Anfänger-Themen 2
S HashMap mehrere Keys zu einem Value Java Basics - Anfänger-Themen 3
I JSON - cannot deserialize from Object value Java Basics - Anfänger-Themen 16
C Long value an Stringbuilder übergeben, equals Methode funktioniert nicht Java Basics - Anfänger-Themen 2
J Java call by Value oder Reference Java Basics - Anfänger-Themen 35
R Call-by-Value, Call-by-Reference, Call-by-Name Ausgabe Java Basics - Anfänger-Themen 1
D String value change listener Java Basics - Anfänger-Themen 2
G Java Object value und entity? Java Basics - Anfänger-Themen 2
ms_cikar Den Wert einer Hex. value bestimmten. Java Basics - Anfänger-Themen 8
R Boolean value ohne Kontrollstrukturen ändern Java Basics - Anfänger-Themen 5
F Entity vs value Java Basics - Anfänger-Themen 3
U Worin besteht der Unterschied zwischen call by reference und call by value? Java Basics - Anfänger-Themen 14
R Value von einem JSON-Objekt ausgeben Java Basics - Anfänger-Themen 4
V NullPointerException, wenn Key und Value null sind Java Basics - Anfänger-Themen 2
K Value eines HashMaps in einer HashMap wiedergeben. Java Basics - Anfänger-Themen 5
E jProgressbar, 6 Versuche, welche value angeben ? Java Basics - Anfänger-Themen 3
G Klassen Call by Value auch bei Objekten? Java Basics - Anfänger-Themen 2
E Hash map Value Wert hochzuholen/ändern Java Basics - Anfänger-Themen 7
J Variablen Komsiche System.in.read() return-value? Java Basics - Anfänger-Themen 3
N JFreeChart - Value und veriable Zeitachse Java Basics - Anfänger-Themen 15
J Open Office Property Value mit Java aufrufen Java Basics - Anfänger-Themen 0
H call by reference & value Java Basics - Anfänger-Themen 14
R Property Value als null setzen Java Basics - Anfänger-Themen 1
O Erste Schritte TreeMap nach Value sortieren Java Basics - Anfänger-Themen 2
B Compiler-Fehler Hilfe!!! required variable ; found value Java Basics - Anfänger-Themen 4
M Arrays als return Value? Java Basics - Anfänger-Themen 2
S Integer/Value-Paar in Prio-Queue ohne Comparator Java Basics - Anfänger-Themen 5
T Schleifenindex "by reference" / "by value" Java Basics - Anfänger-Themen 13
V Methoden key value Parameter Java Basics - Anfänger-Themen 11
C Probleme bei einem Stringvergleich - Attribut "value" unterscheidet sich Java Basics - Anfänger-Themen 9
F HashMap nach kleinstem Value durchsuchen Java Basics - Anfänger-Themen 11
D TreeMap: Höheren Key ermitteln und den Value liefern Java Basics - Anfänger-Themen 3
B Call by Value/Reference Java Basics - Anfänger-Themen 4
Todesbote Map (Key=String; Value = Vector) Value/Vector sortieren Java Basics - Anfänger-Themen 13
R Key/Value ohne Maps? Java Basics - Anfänger-Themen 2
B Datentypen Key/Value sortieren Java Basics - Anfänger-Themen 15
S Warnung in Eclipse: unassigned closeable value Java Basics - Anfänger-Themen 20
J Objectreferenz statt value an Methode uebergeben? Java Basics - Anfänger-Themen 2
K HashMap auf leere Key-Value-Paare prüfen Java Basics - Anfänger-Themen 14
C Collections String[] als value in HashMap Java Basics - Anfänger-Themen 6
P Key anhand von Value finden (Hashtable) Java Basics - Anfänger-Themen 3
B JavaSkript Form-Tag Value & Post Java Basics - Anfänger-Themen 6
M String( char[] value ) Java Basics - Anfänger-Themen 3
feardorcha Java von Kopf bis Fuß "Java ist Pass-by-Value" Java Basics - Anfänger-Themen 6
M Value-returing Methode funktioniert nicht Java Basics - Anfänger-Themen 4
O Was bedeutet public class value? Java Basics - Anfänger-Themen 3
M jSpinner: nur angezeigte Value auslesen? Java Basics - Anfänger-Themen 3
F Erste Schritte return (char)toUnsignedInt(value) Java Basics - Anfänger-Themen 2
J unexpected type variable/value Java Basics - Anfänger-Themen 2
F Hilfe Regular Expression Grouping Value Java Basics - Anfänger-Themen 3
K unexpected type variable/value Java Basics - Anfänger-Themen 7
turmaline Duration Value Java Basics - Anfänger-Themen 8
T Enum - Key als Value ermitteln Java Basics - Anfänger-Themen 7
K java pass by value Java Basics - Anfänger-Themen 29
capgeti Datentypen Static generic return value von Subclass? Java Basics - Anfänger-Themen 9
A ein map key/value"problem" Java Basics - Anfänger-Themen 9
A Regex get Value Java Basics - Anfänger-Themen 5
D Key und Value aus hashMap speichern Java Basics - Anfänger-Themen 7
M HashMap-Value | Array Java Basics - Anfänger-Themen 3
N Methode erfüllt nicht den zweck (Call by value) Java Basics - Anfänger-Themen 17
0 Call by value Java Basics - Anfänger-Themen 3
H TreeMap.remove(value) - und nicht mit key! Geht das? Java Basics - Anfänger-Themen 18
H Abhängigkeiten (key-value ) Java Basics - Anfänger-Themen 19
P Value einer Konstante lesen Java Basics - Anfänger-Themen 2
lumo Magic Value?! Java Basics - Anfänger-Themen 19
S HashMap: Rückgabe des key zu bestimmten value Java Basics - Anfänger-Themen 3
K Maps mit veränderlichen Daten als Value Objekte Java Basics - Anfänger-Themen 3
D Hashtable Value(Array) in String und dann Ausgeben Java Basics - Anfänger-Themen 23
? key - value Struktur in ArrayList Java Basics - Anfänger-Themen 3
G Container für [key,value] elemente ? Java Basics - Anfänger-Themen 7
G Überprüfen ob einen Array einen Value enthält Java Basics - Anfänger-Themen 13
C Passing Reference by Value Java Basics - Anfänger-Themen 4
A Integer Value Error beim Start Java Basics - Anfänger-Themen 5
G jProgressBar value aus anderer Klasse heraus verändern Java Basics - Anfänger-Themen 7
F Hashtable mit String[] als value Java Basics - Anfänger-Themen 2
L HashMap Key<->Value vertauschen Java Basics - Anfänger-Themen 5
T Klasse String enthält Methode value? Java Basics - Anfänger-Themen 2
T Suche über mehrere Felder value = key = value Java Basics - Anfänger-Themen 3
S Value von ein Hashtable collectionen Java Basics - Anfänger-Themen 3
S Value sortieren Java Basics - Anfänger-Themen 3
D Map (HashMap) sortiern nach den Value? Java Basics - Anfänger-Themen 16
W Hashtable Integer als Value Java Basics - Anfänger-Themen 6
M value von Komponenten erhalten Java Basics - Anfänger-Themen 3
G TreeMap sortieren über ArrayList als Value Java Basics - Anfänger-Themen 9
L Value aus einer Map holen Java Basics - Anfänger-Themen 10
R kleinster Value in HashMap Java Basics - Anfänger-Themen 12
H HashMap initialisieren<Key, Value>? Java Basics - Anfänger-Themen 9
B map value auslesen Java Basics - Anfänger-Themen 2
V Beginner question with check true value??? Java Basics - Anfänger-Themen 3
S call by reference vs. call by value - pls help Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben