{"id":775,"date":"2015-01-23T21:07:14","date_gmt":"2015-01-23T20:07:14","guid":{"rendered":"http:\/\/www.webotlet.hu\/?p=775"},"modified":"2019-12-18T09:05:17","modified_gmt":"2019-12-18T08:05:17","slug":"java-programozas-18-arraylist","status":"publish","type":"post","link":"https:\/\/www.webotlet.hu\/?p=775","title":{"rendered":"Java programoz\u00e1s 20. &#8211; ArrayList"},"content":{"rendered":"<h1>ArrayList, avagy a felment\u0151 sereg a rugalmatlan t\u00f6mb\u00f6k helyett<\/h1>\n<h2>A t\u00f6mb\u00f6k korl\u00e1tjai<\/h2>\n<p>Szerintem mindenki eml\u00e9kszik arra a pillanatra, amikor megismerte a t\u00f6mb\u00f6ket. Vagy szerelem volt els\u0151 l\u00e1t\u00e1sra, vagy ekkor esett el\u0151sz\u00f6r komolyan k\u00e9ts\u00e9gbe. De ha t\u00faltette mag\u00e1t az els\u0151 sokkon, akkor r\u00e1j\u00f6tt, hogy nem is olyan bonyolultak. A t\u00f6mb\u00f6ket nagyon szeretj\u00fck. Nagyon sok \u00e9s sokfajta adatot k\u00e9pesek t\u00e1rolni. Ezek lehetnek primit\u00edv, vagy referencia t\u00edpusok is. Mi t\u00f6bb, az elemeknek sorrendje van. A nagyon sok adatb\u00f3l b\u00e1rmikor kivehet\u00fcnk egyet. Ak\u00e1r megvizsg\u00e1lhatjuk az \u00f6sszeset, szigor\u00faan sorban haladva. Akkor mi a gond vele?<\/p>\n<ol>\n<li>A m\u00e9rete<\/li>\n<li>A b\u0151v\u00edt\u00e9se<\/li>\n<li>Keres\u00e9s az elemei k\u00f6z\u00f6tt<\/li>\n<\/ol>\n<p>Sorolhatn\u00e1m m\u00e9g, de bevezet\u00e9snek ennyi pont el\u00e9g.<\/p>\n<p>Az els\u0151 probl\u00e9m\u00e1val m\u00e1r biztosan tal\u00e1lkozt\u00e1l. A t\u00f6mbnek els\u0151re j\u00f3 m\u00e9retet kell v\u00e1lasztani. Mi\u00e9rt? Mert a m\u00e9rete fix. Ez egy nagyon komoly d\u00f6nt\u00e9s. Ez nem egy hajv\u00e1g\u00e1s. Az kin\u0151 \u00fajra. De egy t\u00f6mb m\u00e9ret\u00e9t megv\u00e1ltoztatni&#8230; Azt\u00e1n r\u00e1j\u00f6ssz, hogy nagyobb kell, akkor k\u00e9sz\u00edthetsz m\u00e1sikat, \u00e9s abba \u00e1tpakolhatod az eredeti \u00e9rt\u00e9keket, meg azokat, amik nem f\u00e9rtek el. \u00c9s ha az is kicsi lesz? Vagy els\u0151re kisz\u00e1molhatod, hogy mekkor\u00e1ra van sz\u00fcks\u00e9g, \u00e9s l\u00e9trehozod amekkora kell. \u00c9s ha valami nem v\u00e1rt esem\u00e9ny miatt m\u00e9giscsak kicsi? Vagy \u00e9pp t\u00fal nagy?<\/p>\n<p>A m\u00e1sodik gond els\u0151re hasonl\u00edthat az els\u0151h\u00f6z, val\u00f3j\u00e1ban teljesen m\u00e1s. Itt b\u0151v\u00edt\u00e9s alatt nem felt\u00e9tlen\u00fcl arra gondolok, hogy a t\u00f6mb kicsi. T\u00e9telezz\u00fck fel, hogy van egy 100 elem\u0171 t\u00f6mb\u00f6d. Okosan ekkor\u00e1t hozt\u00e1l l\u00e9tre, mert tudtad, hogy enn\u00e9l t\u00f6bb elemet soha nem kell t\u00e1rolnod. De csak 65-\u00f6t tett\u00e9l bele. Akkor is felk\u00e9sz\u00fclt\u00e9l mindenre, mert az \u00faj elemeket b\u00e1rmikor odarakhatod a t\u00f6mb v\u00e9g\u00e9re. Az m\u00e1r csak apr\u00f3s\u00e1g, hogy ha nincs tele a t\u00f6mb, akkor a m\u00e9ret\u00e9t megad\u00f3 t\u00f6mb.length \u00e9rtelm\u00e9t vesztette. Neked kell k\u00fcl\u00f6n nyilv\u00e1ntartanod \u00e9s folyamatosan friss\u00edtened, hogy mennyi val\u00f3di elem van benne. R\u00e1ad\u00e1sul olyan \u00fcgyes vagy, hogy \u00edgy m\u00e9g ki is vehetsz elemet a t\u00f6mb v\u00e9g\u00e9r\u0151l (pontos\u00edtok, null\u00e1zod az ottani elemet), \u00e9s ekkor cs\u00f6kkentheted a val\u00f3di elemsz\u00e1mot t\u00e1rol\u00f3 v\u00e1ltoz\u00f3t. Profi. Hozz\u00e1adhatsz \u00e9s el is vehetsz bel\u0151le. Az is apr\u00f3 sz\u00e9ps\u00e9ghiba, hogy a t\u00f6mb v\u00e9g\u00e9n a nem val\u00f3di elemek ugyanakkora mem\u00f3ri\u00e1t foglalnak, mint az elej\u00e9n l\u00e9v\u0151 val\u00f3diak. K\u00e9pzelj\u00fck el, hogy gyerekek neveit t\u00e1rolod annak megfelel\u0151en, hogy a tornasorban hol \u00e1llnak. \u00c9rkezett egy \u00faj gyerek. Hova \u00e1ll\u00edtod? A sor v\u00e9g\u00e9re? El\u00e9g ritka eset. De a t\u00f6mbbe nem lehet csak \u00fagy ak\u00e1rhova besz\u00farni egy elemet. A t\u00f6bbit od\u00e9bb kell pakolni. Neked. \u00c9s ha t\u00e1vozik egy gyerek? Az sem felt\u00e9tlen\u00fcl a sor v\u00e9g\u00e9r\u0151l fog elt\u0171nni. \u00c9s a t\u00f6bbi \u00fcresen hagyja a hely\u00e9t? Vagy pakoljunk mindenkit eggyel el\u0151r\u00e9bb, aki ut\u00e1na \u00e1llt?<\/p>\n<p>A harmadik probl\u00e9ma akkor j\u00f6tt el\u0151, amikor meg akartuk tudni, hogy egy t\u00f6mbben benne van-e egy elem, akkor meg kellett keresni. Ha \u00fcgyesek voltunk, \u00e9s lehet\u0151s\u00e9g\u00fcnk volt r\u00e1, akkor valamilyen rendezett t\u00f6mbbel dolgoztunk. Abban lehet, hogy nem line\u00e1risan, minden elemet megvizsg\u00e1lva kell keresni. De milyen j\u00f3 lenne, ha a keres\u00e9ssel nem nek\u00fcnk kell foglalkozni, hanem azonnal v\u00e1laszt kaphatn\u00e1nk arra, hogy benne van-e a keresett elem, vagy nem.<\/p>\n<p>A t\u00f6mb\u00f6k but\u00e1k. Szeretj\u00fck \u0151ket, de but\u00e1k. A tanulm\u00e1nyaink elej\u00e9n musz\u00e1j megismern\u00fcnk \u0151ket. Rajtuk kereszt\u00fcl tanulunk meg programozni. \u00c9s min\u00e9l jobban megtanulunk, ann\u00e1l jobban megismerj\u00fck a korl\u00e1tait. Felismerj\u00fck azt, hogy amit mi eddig f\u00e9listenk\u00e9nt tisztelt\u00fcnk, mert mindent meg tudtunk oldani vele (igaz, n\u00e9ha k\u00f6r\u00fclm\u00e9nyesen), val\u00f3j\u00e1ban ink\u00e1bb spanyolcsizma. Sz\u0171k, rugalmatlan, \u00e9s ha sokat akarunk ugr\u00e1lni, akkor nagyon sz\u00far.<\/p>\n<p>Ismerj\u00fck meg azt, ami minden gondunkat megoldja.<\/p>\n<h2>ArrayList<\/h2>\n<p>Ha nagyon sarkosan szeretn\u00e9nk fogalmazni, mondhatn\u00e1nk, hogy az ArrayList egy v\u00e1ltoztathat\u00f3 m\u00e9ret\u0171 t\u00f6mb. S\u0151t, a m\u00e9ret\u00e9vel egy\u00e1ltal\u00e1n nem kell foglalkoznunk, ha nem akarunk. Megk\u00e9rdezni az\u00e9rt szabad.<\/p>\n<p>Az ArrayList val\u00f3j\u00e1ban egy oszt\u00e1ly, ami a motorh\u00e1ztet\u0151 alatt szint\u00e9n egy t\u00f6mbbel dolgozik. De nem most mondtam, hogy a t\u00f6mb m\u00e9rete fix? \u00c9s ha v\u00e1ltoztatni kell a t\u00f6mb m\u00e9ret\u00e9n? Akkor l\u00e9trehoz egy \u00fajat \u00e9s azzal dolgozik. Az ArrayList oszt\u00e1ly tele van pakolva olyan hasznos met\u00f3dusokkal, amelyek az \u00f6sszes el\u0151z\u0151leg felsorolt probl\u00e9m\u00e1t nemcsak hogy megoldj\u00e1k, hanem m\u00e9g t\u00f6bbre is k\u00e9pesek. Ok\u00e9, \u00edgy picit becsapva \u00e9rezheted magad, hiszen m\u00e9gis csak t\u00f6mb\u00f6t haszn\u00e1lsz. Csak nem Te. \u00c9s ez sok gondt\u00f3l megk\u00edm\u00e9l.<\/p>\n<p>L\u00e1ssuk akkor, hogyan haszn\u00e1lhatjuk az ArrayList-et, \u00e9s mi mindenre j\u00f3. T\u00e9telezz\u00fck fel, sz\u00fcks\u00e9g\u00fcnk van egy olyan list\u00e1ra, mely eg\u00e9sz sz\u00e1mokat t\u00e1rol.<\/p>\n<p>Ahhoz, hogy l\u00e9trehozhassunk egyet, import\u00e1lni kell azt a k\u00f3dot, ahol \u0151 tal\u00e1lhat\u00f3, az ArrayList oszt\u00e1lyt:<\/p>\n<pre class=\"brush: java; highlight: [1,6]; title: ; notranslate\" title=\"\">\r\nimport java.util.ArrayList;\r\npublic class Lista\r\n{\r\n  public static void main(String&#x5B;] args )\r\n  {\r\n    ArrayList&lt;Integer&gt; szamok = new ArrayList&lt;&gt;();\r\n  }\r\n}\r\n<\/pre>\n<p>Az els\u0151 kiemelt sor mutatja az oszt\u00e1ly import\u00e1l\u00e1s\u00e1t, ilyet m\u00e1r l\u00e1thatt\u00e1l a Scanner eset\u00e9n. A m\u00e1sodik egy v\u00e1ltoz\u00f3 deklar\u00e1l\u00e1s \u00e9s egy p\u00e9ld\u00e1nyos\u00edt\u00e1s. Akkor most dek\u00f3doljuk, hogy mit is l\u00e1tunk:<\/p>\n<ol>\n<li>Megadunk egy ArrayList oszt\u00e1ly\u00fa v\u00e1ltoz\u00f3t.<\/li>\n<li>R\u00f6gz\u00edtj\u00fck, hogy ebben Integer oszt\u00e1ly\u00fa objektumokat szeretn\u00e9nk t\u00e1rolni.<\/li>\n<li>A v\u00e1ltoz\u00f3 neve: szamok<\/li>\n<li>Egy \u00faj list\u00e1t hozunk l\u00e9tre, ahol a t\u00edpust m\u00e1r nem kell \u00fajra megadni.<\/li>\n<li>\u00c9s nem adunk meg semmit sem a konstruktor\u00e1nak.<\/li>\n<\/ol>\n<p>Mi\u00e9rt nem &lt;int&gt; szerepel a t\u00edpusmegad\u00e1sn\u00e1l, ahogy a t\u00f6mb\u00f6kn\u00e9l l\u00e1ttuk? Mi ez az Integer? Nagy bet\u0171vel kezd\u0151dik, akkor ez egy oszt\u00e1ly?<\/p>\n<p>Igen. Ez egy <strong>burkol\u00f3 vagy csomagol\u00f3 oszt\u00e1ly<\/strong>. Arra val\u00f3, hogy becsomagolja mag\u00e1ba a primit\u00edv \u00e9rt\u00e9ket, \u00edgy olyan helyen is haszn\u00e1lhatjuk azokat, ahol csak Objektummal \u00e1llnak sz\u00f3ba.<\/p>\n<p>Az\u00e9rt van erre sz\u00fcks\u00e9g, mert a lista csak \u00e9s kiz\u00e1r\u00f3lag referencia t\u00edpus\u00fa adatokat k\u00e9pes t\u00e1rolni, primit\u00edv t\u00edpusokat nem rakhatunk bele. Ha m\u00e9gis azokat szeretn\u00e9nk t\u00e1rolni, akkor a primit\u00edv t\u00edpusok megfelel\u0151 csomagol\u00f3 oszt\u00e1ly\u00e1t kell haszn\u00e1lnunk t\u00edpusk\u00e9nt:<\/p>\n<ul>\n<li>int helyett Integer<\/li>\n<li>double\u00a0helyett Double<\/li>\n<li>char\u00a0helyett Character<\/li>\n<li>boolean\u00a0helyett Boolean<\/li>\n<li>(valamint a t\u00f6bbi eg\u00e9sz \u00e9s val\u00f3s t\u00edpus, azonos n\u00e9vvel)<\/li>\n<\/ul>\n<p>Vegy\u00fcnk egy t\u00f6mb t\u00e9mak\u00f6rrel kapcsolatos komplex feladatot, de most \u00faj bar\u00e1tunkat haszn\u00e1ljuk. Sorsoljunk ki 20 eg\u00e9sz sz\u00e1mot a [-10;40] intervallumb\u00f3l \u00e9s t\u00e1roljuk el \u0151ket. A kiemelt sorokat a p\u00e9lda ut\u00e1n megmagyar\u00e1zom, ezek tartalmazz\u00e1k a gyakran haszn\u00e1lt ArrayList met\u00f3dusokat \u00e9s a l\u00e9nyegi r\u00e9szeket, melyek a lista \u00e1ltal\u00e1nos haszn\u00e1lat\u00e1hoz sz\u00fcks\u00e9gesek.<\/p>\n<pre class=\"brush: java; gutter: true; highlight: [8,10,12,15,17,32,36,37,38,39,43,53,64,82,83,102]; title: ; notranslate\" title=\"\">\r\nimport java.util.ArrayList;\r\npublic class Lista\r\n{\r\n  public static void main(String&#x5B;] args )\r\n  {\r\n\u00a0\u00a0\u00a0 ArrayList&lt;Integer&gt; szamok = new ArrayList&lt;&gt;();\r\n\/\/ t\u00f6lts\u00fck fel a list\u00e1t\r\n\u00a0\u00a0\u00a0 for( int i = 0; i &lt; 20; i++ )\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 szamok.add( (int)(Math.random() * 51) - 10 );\r\n\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 System.out.println(&quot;A lista m\u00e9rete: &quot; + szamok.size());\r\n\r\n\/\/ \u00edrjuk ki az elemeit\r\n\u00a0\u00a0\u00a0 for( int i = 0; i &lt; szamok.size(); i++ )\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 System.out.print( szamok.get(i)+&quot; &quot; );\r\n\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 System.out.println();\r\n\r\n\/\/ t\u00f6r\u00f6lj\u00fcnk ki a lista legkisebb elem\u00e9t\r\n\/\/ ha t\u00f6bb legkisebb van, akkor az els\u0151t\r\n\u00a0\u00a0\u00a0 int min = 0;\r\n\u00a0\u00a0\u00a0 for( int i = 0; i &lt; szamok.size(); i++ )\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 if( szamok.get(i) &lt; szamok.get(min) )\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 min = i;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 System.out.println(&quot;A legkisebb eleme: &quot; + szamok.get(min));\r\n\u00a0\u00a0\u00a0 szamok.remove(min);\r\n\u00a0\u00a0\u00a0 System.out.println(&quot;A lista merete: &quot; + szamok.size());\r\n\u00a0\u00a0 \u00a0\r\n\/\/ a lista elemei\r\n\u00a0\u00a0\u00a0 for (Integer i : szamok)\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 System.out.print(i+&quot; &quot;);\r\n\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 System.out.println();\r\n\u00a0\u00a0 \u00a0\r\n\/\/ sz\u00farjunk be egy v\u00e9letlen elemet a lista elej\u00e9re\r\n\u00a0\u00a0\u00a0 szamok.add( 0, (int)(Math.random() * 51) - 10 );\r\n\r\n\u00a0\u00a0\u00a0 for (Integer i : szamok)\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 System.out.print(i + &quot; &quot;);\r\n\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 System.out.println();\r\n\u00a0\u00a0 \u00a0\r\n\/\/ n\u00e9zz\u00fck meg, benne van-e az intervallum legnagyobb\r\n\/\/ eleme a list\u00e1ban, \u00e9s ha igen, hol?\r\n\u00a0\u00a0\u00a0 int hely = szamok.indexOf(40);\r\n\u00a0\u00a0\u00a0 if( hely &gt; -1 )\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 System.out.println(&quot;A 40-es elem helye: &quot; + hely);\r\n\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 else\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 System.out.println(&quot;Nincs 40-es elem a list\u00e1ban.&quot;);\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\/\/ vizsg\u00e1ljuk meg, van-e 0 \u00e9rt\u00e9k a list\u00e1ban\r\n\u00a0\u00a0\u00a0 if( szamok.contains(0) )\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 System.out.println(&quot;A lista tartalmaz 0-at.&quot;);\r\n\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 else\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 System.out.println(&quot;A lista NEM tartalmaz 0-at.&quot;);\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\/\/ rendezz\u00fck a list\u00e1ban szerepl\u0151 sz\u00e1mokat n\u00f6vekv\u0151 sorrendbe\r\n\u00a0\u00a0\u00a0 int csere;\r\n\u00a0\u00a0\u00a0 for (int i = 0; i &lt; szamok.size() - 1; i++)\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 for (int j = i + 1; j &lt; szamok.size(); j++)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if( szamok.get(i) &gt; szamok.get(j) )\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 csere = szamok.get(i);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 szamok.set(i, szamok.get(j));\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 szamok.set(j, csere);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\/\/ \u00edrjuk ki a rendezett sz\u00e1mokat\r\n\u00a0\u00a0\u00a0 System.out.println(&quot;Rendezett sorrend:&quot;);\r\n\u00a0\u00a0\u00a0 for (Integer i : szamok)\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 System.out.print(i + &quot; &quot;);\r\n\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 System.out.println();\r\n\r\n\/\/ t\u00f6r\u00f6lj\u00fck ki a negat\u00edv elemeket a rendezett list\u00e1b\u00f3l\r\n\u00a0\u00a0\u00a0 for( int i = 0; i &lt; szamok.size(); i++ )\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 if( szamok.get(i) &gt; -1 )\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 szamok.removeAll(szamok.subList(0, i));\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 break;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\/\/ \u00edrjuk ki a list\u00e1ban maradt elemeket\r\n\u00a0\u00a0\u00a0 for (Integer i : szamok)\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 System.out.print( i +&quot; &quot;);\r\n\u00a0\u00a0\u00a0 }\r\n  }\r\n} <\/pre>\n<p>Akkor l\u00e1ssuk a feladat megold\u00e1s\u00e1t r\u00e9szenk\u00e9nt, melyen kereszt\u00fcl az ArrayList m\u0171k\u00f6d\u00e9s\u00e9t is meg\u00e9rtj\u00fck. A felsorol\u00e1s elej\u00e9n l\u00e9v\u0151 sz\u00e1mok a kiemelt sorokat jelentik.<\/p>\n<ul>\n<li>8 &#8211; Figyeld meg, hogy nem hivatkozok a lista m\u00e9ret\u00e9re a felt\u00f6lt\u00e9sekor, mivel a m\u00e9rete alaphelyzetben 0. A for ciklusban a fut\u00e1si felt\u00e9telben sz\u00e1mk\u00e9nt adom meg, hogy 20x fusson le a ciklus, vagyis 20 elemet fogok elt\u00e1rolni a list\u00e1ban. Minden elem hozz\u00e1ad\u00e1s ut\u00e1n a lista m\u00e9rete eggyel n\u0151.<\/li>\n<li>10 &#8211; Itt l\u00e1thatod, hogyan adunk hozz\u00e1 egy elemet a list\u00e1hoz, ami mindig a lista v\u00e9g\u00e9re ker\u00fcl.<\/li>\n<li>12 &#8211; A lista m\u00e9ret\u00e9t a .size() met\u00f3dussal kaphatod meg.<\/li>\n<li>15 &#8211; A .size() m\u00e1r szerepelt, de most m\u00e1r a lista bej\u00e1r\u00e1s\u00e1hoz haszn\u00e1lom egy for ciklus fut\u00e1si felt\u00e9tel\u00e9ben.<\/li>\n<li>17 &#8211; A lista b\u00e1rmelyik eleme indexelhet\u0151, hasonl\u00f3an a t\u00f6mb\u00f6kh\u00f6z, csak itt a hivatkoz\u00e1shoz a .get(index) met\u00f3dust haszn\u00e1ljuk, \u00e9s nem a t\u00f6mb\u00f6kn\u00e9l tanult tomb[index] szerkezetet.<\/li>\n<li>32 &#8211; B\u00e1rmilyen elemet elt\u00e1vol\u00edthatok az indexe alapj\u00e1n a .remove(index) met\u00f3dussal. Az ut\u00e1na elhelyezked\u0151 elemek eggyel balra tol\u00f3dnak \u00e9s a lista m\u00e9rete eggyel cs\u00f6kken.<\/li>\n<li>36-39 &#8211; Foreach ciklus haszn\u00e1lhat\u00f3 az elemek el\u00e9r\u00e9s\u00e9hez, p\u00e9ld\u00e1ul ki\u00edrat\u00e1s eset\u00e9n. Ha csak az elemek sz\u00e1m\u00edtanak \u00e9s az index\u00fck nem, akkor a foreach ciklus mindig haszn\u00e1lhat\u00f3 a for helyett.<\/li>\n<li>43 &#8211; Az add(index, elem) met\u00f3dussal a lista tetsz\u0151leges hely\u00e9re besz\u00farhatunk egy elemet. Ha nem a lista v\u00e9g\u00e9re sz\u00farunk be elemet, akkor a besz\u00far\u00e1s hely\u00e9n l\u00e9v\u0151 \u00e9s a m\u00f6g\u00f6tte \u00e1ll\u00f3k eggyel jobbra tol\u00f3dnak, vagyis val\u00f3di besz\u00far\u00e1sr\u00f3l besz\u00e9l\u00fcnk, nem cser\u00e9r\u0151l!<\/li>\n<li>53 &#8211; Az String kezel\u00e9sb\u0151l m\u00e1r ismert .indexOf(elem) met\u00f3dussal megkaphatjuk egy adott elem hely\u00e9t a list\u00e1ban. Ha az eredm\u00e9ny -1, akkor nincs a list\u00e1ban. Az indexOf() mindig a lista elej\u00e9r\u0151l ind\u00edtja a keres\u00e9st, \u00e9s t\u00f6bb el\u0151fordul\u00e1s eset\u00e9n az els\u0151 tal\u00e1lat hely\u00e9t adja meg. A lastIndexOf(), hasonl\u00f3an a String t\u00e9mak\u00f6rben tanulthoz h\u00e1tulr\u00f3l adja meg az els\u0151 el\u0151fordul\u00e1s hely\u00e9t, \u00e9s -1-et ha nincs tal\u00e1lat.<\/li>\n<li>64 &#8211; A .contains(elem) logikai v\u00e1laszt (boolean) ad arra a k\u00e9rd\u00e9sre, hogy az adott elem benne van-e a list\u00e1ban.<\/li>\n<li>82-83 &#8211; A set(index, elem) met\u00f3dus az index helyen l\u00e9v\u0151 elemet cser\u00e9li fel az \u00e1ltalunk megadottra. Ilyenkor a m\u00f6g\u00f6tte \u00e1ll\u00f3 elemek a hely\u00fck\u00f6n maradnak, vagyis nem besz\u00far\u00e1s t\u00f6rt\u00e9nik. Jellemz\u0151en az elemek felcser\u00e9l\u00e9sekor haszn\u00e1ljuk, hiszen az elemek elt\u00e1vol\u00edt\u00e1sa \u00e9s hozz\u00e1ad\u00e1sa nem \u00edgy t\u00f6rt\u00e9nik.<\/li>\n<li>102 &#8211; Ez egy komplexebb p\u00e9lda. Egy list\u00e1b\u00f3l ki lehet t\u00f6r\u00f6lni egy m\u00e1sik lista elemeit. Jelen esetben a .subList(int start, int end) met\u00f3dust haszn\u00e1lom. A for ciklusban megn\u00e9zem, hogy a rendezett t\u00f6mbben hol tal\u00e1lhat\u00f3 az els\u0151 nem negat\u00edv elem. Ennek a helye i lesz. A szamok.subList(0, i) azt jelenti, hogy a 0 indext\u0151l az i <strong>el\u0151tti <\/strong>indexig tart\u00f3 elemeket kiemelem a list\u00e1b\u00f3l, majd ezt a kapott list\u00e1t odaadom a removeAll met\u00f3dusnak, hogy ezeket t\u00f6r\u00f6lje a szamok list\u00e1b\u00f3l.<\/li>\n<\/ul>\n<p>Ezek a p\u00e9ld\u00e1k lefedik az ArrayList t\u00e9mak\u00f6r nagy r\u00e9sz\u00e9t. Persze vannak m\u00e9g finoms\u00e1gok benne, de \u00fagy gondolom indul\u00e1snak ennyi pont el\u00e9g. Egy fontos dolgot viszont megeml\u00edten\u00e9k:<\/p>\n<p><strong>Az ArrayList is t\u00falindexelhet\u0151! Nem hivatkozhatsz olyan index\u0171 elemre, ami nem l\u00e9tezik!<\/strong><\/p>\n<h2>ArrayList, de nem minden \u00e1ron<\/h2>\n<p>A helyzet az, hogy nem minden esetben \u00e9ri meg az ArrayList-et haszn\u00e1lni. T\u00e9ny, hogy rengeteg mindent tud, de a t\u00f6mb\u00f6ket nem v\u00e1lthatja ki teljes m\u00e9rt\u00e9kben. Tiszt\u00e1zzunk akkor p\u00e1r ir\u00e1nyelvet, melyet figyelembe kell venni, hogy ha v\u00e1lasztanod kell a t\u00f6mb \u00e9s az ArrayList k\u00f6z\u00f6tt.<\/p>\n<h4>T\u00f6mb:<\/h4>\n<ul>\n<li>Ha a tanulm\u00e1nyaid elej\u00e9n j\u00e1rsz.<\/li>\n<li>Ha el\u0151re tudod, h\u00e1ny elemet szeretn\u00e9l t\u00e1rolni, \u00e9s nem akarod b\u0151v\u00edteni a sz\u00e1mukat.<\/li>\n<li>Ha csak primit\u00edv \u00e9rt\u00e9keket t\u00e1rolsz.<\/li>\n<li>Ha az alap algoritmusokat m\u00e9g nem alkalmazod hib\u00e1tlanul.<\/li>\n<\/ul>\n<h4>ArrayList:<\/h4>\n<ul>\n<li>Ha m\u00e1r az alap algoritmusokat tetsz\u0151leges feladatokban hib\u00e1tlanul alkalmazni tudod.<\/li>\n<li>Ha objektumokkal dolgozol.<\/li>\n<li>Ha a t\u00e1rolt elemeid sz\u00e1ma v\u00e1ltozhat.<\/li>\n<li>Ha a t\u00f6mb\u00f6k m\u00e1r ink\u00e1bb korl\u00e1toznak, mint seg\u00edtenek.<\/li>\n<\/ul>\n<h2><a name=\"diamond\"><\/a>Diamond oper\u00e1tor<\/h2>\n<p>A 7-es verzi\u00f3j\u00fa Java-t\u00f3l kezd\u0151d\u0151en bevezett\u00e9k az \u00fagynevezett diamond oper\u00e1tort. Ez val\u00f3j\u00e1ban nem oper\u00e1tor, de hivatalos Java oldalon is \u00edgy nevezik, valamint rengeteg hivatkoz\u00e1s is ilyen n\u00e9vvel illeti. Arr\u00f3l van sz\u00f3, hogy a lista deklar\u00e1l\u00e1sa ut\u00e1n az inicializ\u00e1l\u00e1skor nem k\u00f6telez\u0151 a t\u00edpust megadni, a szerkezetb\u0151l elhagyhat\u00f3. A 6. sorban l\u00e9v\u0151 eredetileg ismertetett deklar\u00e1l\u00e1st \u00e9s inicializ\u00e1l\u00e1st r\u00f6vid\u00edtheted a 7. sorban l\u00e1that\u00f3 m\u00f3don. A diamond tal\u00e1n a t\u00edpuselhagy\u00e1s ut\u00e1n ottmarad\u00f3 &lt;&gt; jelek alakj\u00e1ra utal. Az\u00e9rt mutattam meg ezt a dolgot, mert \u00fajabb k\u00f3dokban m\u00e1r nem tal\u00e1lkozhatsz ilyennel, de r\u00e9giekben m\u00e9g a megjegyz\u00e9sben szerepl\u00f3 forma is el\u0151fordulhat. Nem hiba, csak m\u00e1r felesleges ism\u00e9t ki\u00edrni a t\u00edpust.<\/p>\n<pre class=\"brush: java; gutter: true; highlight: [6,7]; title: ; notranslate\" title=\"\">\r\nimport java.util.ArrayList;\r\npublic class Lista\r\n{\r\n\u00a0 public static void main(String&#x5B;] args )\r\n\u00a0 {\r\n\/\/ ArrayList&lt;Integer&gt; szamok = new ArrayList&lt;Integer&gt;();\r\n\u00a0\u00a0\u00a0 ArrayList&lt;Integer&gt; szamok = new ArrayList&lt;&gt;();\r\n\u00a0 }\r\n}\r\n<\/pre>\n<h2>Egy\u00e9b tudnival\u00f3k<\/h2>\n<p>Hamarosan ide ker\u00fclnek a burkol\u00f3 oszt\u00e1lyokkal kapcsolatos tudnival\u00f3k.<\/p>\n<h4>K\u00f6vetkez\u0151 lecke: <a title=\"Java programoz\u00e1s 21. \u2013 F\u00e1jlkezel\u00e9s alapjai\" href=\"http:\/\/www.webotlet.hu\/?p=627\">F\u00e1jlkezel\u00e9s alapjai<\/a><\/h4>\n","protected":false},"excerpt":{"rendered":"<p>ArrayList, avagy a felment\u0151 sereg a rugalmatlan t\u00f6mb\u00f6k helyett A t\u00f6mb\u00f6k korl\u00e1tjai Szerintem mindenki eml\u00e9kszik arra a pillanatra, amikor megismerte a t\u00f6mb\u00f6ket. Vagy szerelem volt els\u0151 l\u00e1t\u00e1sra, vagy ekkor esett el\u0151sz\u00f6r komolyan k\u00e9ts\u00e9gbe. De ha t\u00faltette mag\u00e1t az els\u0151 sokkon, <a class=\"more-link\" href=\"https:\/\/www.webotlet.hu\/?p=775\">Tov\u00e1bb <span class=\"screen-reader-text\">  Java programoz\u00e1s 20. &#8211; ArrayList<\/span><span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[100],"tags":[21,144,16,20,15],"class_list":["post-775","post","type-post","status-publish","format-standard","hentry","category-java-halado-leckek","tag-burkolo-osztaly","tag-java_programozas","tag-lista","tag-objektum","tag-tomb"],"_links":{"self":[{"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/posts\/775","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=775"}],"version-history":[{"count":54,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/posts\/775\/revisions"}],"predecessor-version":[{"id":2980,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=\/wp\/v2\/posts\/775\/revisions\/2980"}],"wp:attachment":[{"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=775"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=775"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webotlet.hu\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=775"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}