long in Vector speichern

Status
Nicht offen für weitere Antworten.

the_alien

Aktives Mitglied
Wieso kann ich damit:
Code:
private Vector Positions = new Vector();
Positions.addElement(12345);
nicht einfach long Variablen in einem Vector speichern? Eclipse meckert mich die ganze Zeit an das würde nicht gehen.
In "Java ist auch eine Insel" machen die das dann auch so:
Code:
Positions.addElement(""+12345);
Meiner Meinung nach ein vollkommen unnötiger Umweg, oder kann ich wirklich keine primitiven Datentypen in Vectoren speichern?

Sorry wenn meine Fragen echt dämlich sind 🙁
 
the_alien hat gesagt.:
Meiner Meinung nach ein vollkommen unnötiger Umweg, oder kann ich wirklich keine primitiven Datentypen in Vectoren speichern?
Genau so ist es, da ein Vector intern auf einem Object[] basiert.
 
Mit JAVA 5 geht das!

Ansonsten: Eine Wrapper-Klasse zu nutzen ist m.E. eleganter als
Code:
addElement(""+12345)
 
Blöderweise kann ich kein Java 5 nutzen dafür.

Ich mach mir nur sorgen um die Performance... Wenn ich jedesmal
Code:
wrapper = new Long(12345);
mache und das vielleicht 160 mal, dann Müll ich mir doch nach und nach meinen Speicher zu. Zumal das ja nicht das einzige ist was dort abgelegt wird.
 
Code:
Long l = Long.valueOf(1216l);
Ist besser. [edit]das bringt auch erst ab Java 5 was, sry 😀 [/edit]
In Java 5 passiert auch nichts anderes, nur das du dich nicht selbst darum kümmern musst
 
Und beim auslesen dann
Code:
Long wert = (Long)Positions.get(0);
?

Schonmal danke für die Tips.
So kleine Feinheiten machen doch schon nen starken Unterschied zu C++ und damit tu ich mich gerade verdammt schwer.
 
the_alien hat gesagt.:
In "Java ist auch eine Insel" machen die das dann auch so:
Code:
Positions.addElement(""+12345);

Es gibt einen Unterschied zwischen dieser Variante und deiner mit dem Umweg über Long.
""+12345 ist ein String - kein Long!

Zum Thema valueOf:
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Long.html#valueOf(java.lang.String)
 
mic_checker hat gesagt.:
Zum Thema valueOf:
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Long.html#valueOf(java.lang.String)
Ja, hab ich hier auch offen. Aber unter valueOf(String) gibts auch ein valueOf(long) und das existiert nicht sagt Eclipse...
 
Ich mach mir nur sorgen um die Performance... Wenn ich jedesmal
mache und das vielleicht 160 mal, dann Müll ich mir doch nach und nach meinen Speicher zu. Zumal das ja nicht das einzige ist was dort abgelegt wird.

WOW! 160 mal!!

mal ganz im Ernst:

Weil die in einem speziellen Speicherbereich für "extrem kurzlebige" Dinge landen, werden sie bei der nächsten GC sowieso entsorgt...und besonderen Geschwindigkeitsnachteil hast du dadurch NICHT

Merkregel: Denk erst dann über die Performance nach, wenns wirklich ein Problem gibt!

Bei halbwegs aktuellen PCs heutiger Bauart kannst du Wrapperobjkete und sowas getrost ignorieren; wenn die Applikation "zu langsam" ist, liegts bestimmt nicht daran
 
dazu muss ich einfach noch sagen:
Code:
addElement(""+12345)
erstellt gleich zwei neue Objekte. ein String und ein StringBuffer zur Verkettung.
 
Bleiglanz hat gesagt.:
Ich mach mir nur sorgen um die Performance... Wenn ich jedesmal
mache und das vielleicht 160 mal, dann Müll ich mir doch nach und nach meinen Speicher zu. Zumal das ja nicht das einzige ist was dort abgelegt wird.

WOW! 160 mal!!

mal ganz im Ernst:

Weil die in einem speziellen Speicherbereich für "extrem kurzlebige" Dinge landen, werden sie bei der nächsten GC sowieso entsorgt...und besonderen Geschwindigkeitsnachteil hast du dadurch NICHT

Merkregel: Denk erst dann über die Performance nach, wenns wirklich ein Problem gibt!

Bei halbwegs aktuellen PCs heutiger Bauart kannst du Wrapperobjkete und sowas getrost ignorieren; wenn die Applikation "zu langsam" ist, liegts bestimmt nicht daran
War einfach eine Zahl... Gut, keine wirklich klever gewählte 😀
Das Problem an der Sache ist, dass ich Datein mit teilweise mehreren hundert Gigabyte habe und die parsen muss. Darum frag ich lieber vorher bvor ich da debuggen darf wo der ganze Speicher hin ist...

Merkregel: Fehler vorbeugen ist besser als Fehler beheben 😉


Jetzt weiss ich aber immernoch nicht warum valueOf nur String als Übergabeparameter kennt.
 
Illuvatar hat gesagt.:
dazu muss ich einfach noch sagen:
Code:
addElement(""+12345)
erstellt gleich zwei neue Objekte. ein String und ein StringBuffer zur Verkettung.
Code:
addElement(""+"12345")
erzeugt nur ein String Object, daher vermute ich das die andere Variante auch optmiert wird und nur ein String erzeugt wird.
 
>>Das Problem an der Sache ist, dass ich Datein
>>mit teilweise mehreren hundert Gigabyte
>>habe und die parsen muss

in diesem Fall kannst du deinen Vector doch eh vergessen??

-> du darfst dann beim parsen vermutlich überhaupt keine Objekte auf dem Heap erzeugen...
 
In dem Vector will ich ja nur ein paar long Variablen speichern, nicht die ganze Datei.
Wenn ich allerdings Seitenweise aus der Datei lesen und beim erzeugen von Vektoren alles doppelt und dreifach aufm Heap liegt bis der GC kommt, dann kann ich das so vergessen, darum frag ich genau nach.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben