ugrás a tartalomhoz

Tanácsok Java-hoz, PHP programozó(?)nak

tiku I tikaszvince · 2007. Már. 12. (H), 17.11
Sziasztok!

Eddig csak PHP-val foglalkoztam. Amit tudok autodidakta módon szedtem magamra.
Most elkezdtem ismerkedni a Java nyelvvel is. A tanácsotokat szeretném kérni, hogy mit olvassak el? Hol kezdjem? Mik azok a buktatók, amikre mindenképpen figyeljek oda? Nem a "mindig deklaráljuk a változókat a program elején" típusú tanácsokra van szükségem.

Hogy hol is akadtam el?
Van egy PHP-ban írt űrlap generátorom. Arra gondoltam, gyakorlásként átírom Javara. PHP-ben a létrehozott elemeket egy asszociatív tömbben tárolom (a tömb kulcsai az elemek azonosítói).
Java-ban mivel válthatom ki ezt a megoldást? Mikor létrehozom a generátor objektumot (és a tárolót) még nem tudom, hogy hány elem lesz benne. nem tudom, hogy a még nem létező elemeknek mi lesz az azonosítója. Nézegettem a Map, Set, Vector tipusokat, de nem teljesen értem őket.

A tanácsokat előre is köszönöm.

tikuVoltam
 
1

Ajánlom "magamat"

Nagy Gusztáv · 2007. Már. 12. (H), 17.28
Ajánlom figyelmedbe a Java jegyzetemet, most konkrétan nincs időm válaszolni, de szívesen fogok segíteni a Java tanulásában (akár e-mailen is elérhetsz).
Egyenlőre annyit, hogy a Map megvalósításai (pl. HashMap) állnak a PHP tömbjeihez legközelebb.
2

Sun tutorial

zmb · 2007. Már. 12. (H), 21.46
A fenti jegyzeten kivul meg erdemes talan a sun fele tutorialokat is vegig bongeszni:
Sun tutorial

A konkret peldad eseteben egy Map megvalositast (jellemzoen HashMap) kene letrehozni, es dobalni bele az elemeket.

Javaslom, hogy eloszor az alapokkal legyel tisztaban - a nyelv tulajdonsagai, a java.lang es java.util csomag - aztan lehet tovabb kacsingatni mas teruletek fele (swing, servlet/jsp, ejb, spring, stb.).

Ket tipikus hiba:
- A Stringeket ne + operatorral konkatenald ossze, ha nem a StringBuilder osztallyal (StringBuffer is hasznalhato, csak ez utobbi szinkronizalt, es emaitt lassabb).
- Vector helyett ArrayList hasznald (ugyanazt tudja a ketto, csak a Vektor szinkronizalt, es emaitt lassabb).
3

Hogy?

vbence · 2007. Már. 13. (K), 00.59
Én mindig plusszal konkatenáltam. Mi történik akkor?

De ha tipikus hibákról van szó: stringeket ne == -vel hasolíts össze, hanem equals-szal.
4

Teljesítmény probléma lehet

Nagy Gusztáv · 2007. Már. 13. (K), 01.12
"Én mindig plusszal konkatenáltam. Mi történik akkor?"

Nem kell megijedni, csak érdemes figyelembevenni, hogy a + operátornak mi a háttérköltsége.
Pl egy ilyen esetben nagyon nem szerencsés a + operátor:

String s = "";
for (...) {
  char c = ...
  s = s + c;
}
Ekkor ugyanis minden egyes ciklusban kb. a következő fog történni:

s = new StringBuilder().append(s).append(c).toString();
Ugye jól látszik, hogy sokkal hatékonyabb a kód így (egyetlen objektummal megússzuk):

StringBuilder sb = new StringBuilder();
for (...) {
  char c = ...
  sb.append(c).;
}
String s = sb.toString();
5

A string immutable

Rici · 2007. Már. 13. (K), 01.13
Egy sztringnek nem változtatható az értéke. Ha egy sztring típusú változóhoz új értéket rendelsz, akkor az egy új sztringre fog mutatni, de ezzel a régi sztringet nem változtattad meg, csak már nem arra hivatkozol. Ebből következik, hogy a plusszal konkatenálás azért nem optimális, mert eredménye egy teljesen új sztring objektum. Akkor is, ha mondjuk s += x; formában használod. Pl. ebben az esetben s az újonnan létrejövő sztring objektumra mutat, aminek értéke s és x értéknek konkatenáltja, de attól még a régi s is ott marad a memóriában, amit később el kell takarítani.

Ez egyedi sztringműveleteknél nem jelent gyakorlati problémát, tehát egy-két pluszos összeadással nincs semmi gond. A probléma akkor jön elő nagyon, ha pl. az s += x; utasítás egy ciklus magjában van, ami mondjuk lefut 1000-szer. Ekkor 1000 db egyre hosszabb sztring objektumod lesz, amikre az utolsó kivételével nem hivatkozik senki. Tehát a memóriából előbb-utóbb kitakarítja őket a gc, de addig helyet foglalnak, és persze a gc-t sem érdemes terhelni, ha nem muszáj.

Ehhez képest a StringBuilder az olyan sztringként fogható fel, aminek változtatható az értéke, hozzáfűzéskor nem jön létre új objektum, csak a meglévő bővül.
6

Köszi

vbence · 2007. Már. 13. (K), 01.25
Köszi a kimerítő választ. A Számalkon annakidején félfüllel hallottam valamit, hogy "Javában nem lehet plusszal stringeket összeadni" azóta se értettem, hogy mire gondolnak. Főleg, hogy aki mondta összesen egy Angszter Erzsébet könyvasott.
7

Tanulni, tanulni, tanulni...

error · 2007. Már. 13. (K), 10.23
Ha Web-es Java fejlesztésre adod a fejed, készűlj fel arra, hogy elég sokat kell majd tanulnod. Alapból azt javasolnám, hogy tölts le egy Netbeanst és csinálj meg pár tutorialt.

Az ajánlott kulcsszavak sorrendben az alábbiak: Servlet, JSP, JSTL, JSF

Sok türelmet és sikert :)

UI: a String-eket össze lehet adni, és a PHP tömbkezelését ne is keresd sehol, ez a jóság csak PHP-ben van. Amúgy meg HashMap.