{"id":32477,"date":"2025-10-22T07:41:39","date_gmt":"2025-10-22T04:41:39","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=32477"},"modified":"2025-10-22T07:41:39","modified_gmt":"2025-10-22T04:41:39","slug":"javada-haritalar-maps-nedir-ve-neden-kullanilir","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/javada-haritalar-maps-nedir-ve-neden-kullanilir\/","title":{"rendered":"Java&#8217;da Haritalar (Maps) Nedir ve Neden Kullan\u0131l\u0131r?"},"content":{"rendered":"<p><body><\/p>\n<h2>Java&#8217;da Haritalar (Maps) Nedir ve Neden Kullan\u0131l\u0131r?<\/h2>\n<p>Java programlamada veri yap\u0131lar\u0131, bilgiyi d\u00fczenli bir \u015fekilde depolamak ve y\u00f6netmek i\u00e7in temel ta\u015flard\u0131r. Listeler (<code>List<\/code>) ve K\u00fcmeler (<code>Set<\/code>) gibi yayg\u0131n veri yap\u0131lar\u0131n\u0131n yan\u0131 s\u0131ra, anahtar-de\u011fer \u00e7iftleri halinde veri depolaman\u0131z\u0131 sa\u011flayan \u00f6zel bir yap\u0131 daha vard\u0131r: Haritalar (<code>Map<\/code>).<\/p>\n<p>Bir harita, her biri benzersiz bir anahtarla ili\u015fkilendirilmi\u015f bir de\u011fer koleksiyonudur. T\u0131pk\u0131 bir s\u00f6zl\u00fck gibi d\u00fc\u015f\u00fcnebilirsiniz; her kelime (anahtar) kendi tan\u0131m\u0131na (de\u011fer) sahiptir. Bu yap\u0131, belirli bir anahtara h\u0131zl\u0131 bir \u015fekilde eri\u015fim sa\u011flamak istedi\u011finiz durumlarda son derece faydal\u0131d\u0131r. \u00d6rne\u011fin, bir kullan\u0131c\u0131n\u0131n ID&#8217;sine g\u00f6re kullan\u0131c\u0131 nesnesine, bir \u00fclkenin koduna g\u00f6re tam ad\u0131na veya bir \u00fcr\u00fcn\u00fcn barkoduna g\u00f6re fiyat\u0131na eri\u015fmek i\u00e7in haritalar idealdir.<\/p>\n<p>Haritalar, listelerden farkl\u0131 olarak \u00f6\u011felere indeks yerine anahtarlar arac\u0131l\u0131\u011f\u0131yla eri\u015fim sa\u011flar. Bu, dinamik ve esnek veri modelleri olu\u015fturmak i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r ve bir\u00e7ok ger\u00e7ek d\u00fcnya uygulamas\u0131n\u0131n temelini olu\u015fturur.<\/p>\n<h2>Java&#8217;daki Temel Map T\u00fcrleri<\/h2>\n<p>Java&#8217;da <code>Map<\/code> bir aray\u00fczd\u00fcr ve bu aray\u00fcz\u00fc uygulayan \u00e7e\u015fitli s\u0131n\u0131flar bulunur. Her s\u0131n\u0131f\u0131n kendine \u00f6zg\u00fc \u00f6zellikleri, performans karakteristikleri ve kullan\u0131m senaryolar\u0131 vard\u0131r. En yayg\u0131n kullan\u0131lan \u00fc\u00e7 t\u00fcr\u00fc inceleyelim:<\/p>\n<h3>HashMap<\/h3>\n<p><code>HashMap<\/code>, Java&#8217;daki en s\u0131k kullan\u0131lan <code>Map<\/code> uygulamas\u0131d\u0131r. Anahtarlar\u0131n ve de\u011ferlerin depolanmas\u0131 i\u00e7in karma (hashing) mekanizmas\u0131n\u0131 kullan\u0131r. Bu sayede, eleman ekleme, silme ve eri\u015fim i\u015flemleri ortalama olarak sabit zamanda (O(1)) ger\u00e7ekle\u015fir, bu da onu \u00e7ok h\u0131zl\u0131 yapar.<\/p>\n<ul>\n<li><b>S\u0131ralama Garantisi Yoktur:<\/b> Elemanlar\u0131n eklenme s\u0131ras\u0131n\u0131 veya herhangi bir do\u011fal s\u0131ralamay\u0131 korumaz. Yineleme s\u0131ras\u0131nda elemanlar\u0131n s\u0131ras\u0131 tahmin edilemez.<\/li>\n<li><b><code>null<\/code> Anahtar ve De\u011fer:<\/b> Bir tane <code>null<\/code> anahtar ve birden fazla <code>null<\/code> de\u011fer kabul edebilir.<\/li>\n<li><b>Senkronize De\u011fildir:<\/b> \u00c7oklu i\u015f par\u00e7ac\u0131kl\u0131 (multi-threaded) ortamlarda g\u00fcvenli de\u011fildir. E\u011fer \u00e7oklu i\u015f par\u00e7ac\u0131\u011f\u0131 eri\u015fimi gerekiyorsa <code>ConcurrentHashMap<\/code> kullan\u0131lmal\u0131d\u0131r.<\/li>\n<\/ul>\n<h3>LinkedHashMap<\/h3>\n<p><code>LinkedHashMap<\/code>, <code>HashMap<\/code>&#8216;in t\u00fcm \u00f6zelliklerini ta\u015f\u0131r ancak ek olarak elemanlar\u0131n eklenme s\u0131ras\u0131n\u0131 (insertion order) korur. Yani, harita \u00fczerinde yineleme yapt\u0131\u011f\u0131n\u0131zda elemanlar eklendikleri s\u0131raya g\u00f6re d\u00f6ner. \u0130ste\u011fe ba\u011fl\u0131 olarak, elemanlar\u0131n son eri\u015fim s\u0131ras\u0131na g\u00f6re de s\u0131ralanabilir (access order), bu da LFU\/LRU \u00f6nbellekleri gibi senaryolar i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<ul>\n<li><b>S\u0131ralama Garantisi Var:<\/b> Elemanlar\u0131n eklenme s\u0131ras\u0131n\u0131 korur.<\/li>\n<li><b>Performans:<\/b> <code>HashMap<\/code>&#8216;e g\u00f6re biraz daha yava\u015ft\u0131r, \u00e7\u00fcnk\u00fc s\u0131ralamay\u0131 korumak i\u00e7in \u00e7ift y\u00f6nl\u00fc bir ba\u011fl\u0131 liste (doubly linked list) yap\u0131s\u0131 kullan\u0131r.<\/li>\n<\/ul>\n<h3>TreeMap<\/h3>\n<p><code>TreeMap<\/code>, anahtarlar\u0131 do\u011fal s\u0131ralar\u0131na g\u00f6re veya bir <code>Comparator<\/code> arac\u0131l\u0131\u011f\u0131yla belirtilen \u00f6zel bir s\u0131ralamaya g\u00f6re s\u0131ralar. Bu, haritadaki elemanlara her zaman s\u0131ral\u0131 bir \u015fekilde eri\u015fmek istedi\u011finiz durumlarda kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<ul>\n<li><b>S\u0131ralama Garantisi Var:<\/b> Anahtarlar\u0131 s\u0131ral\u0131 bir \u015fekilde tutar.<\/li>\n<li><b><code>null<\/code> Anahtar Kabul Etmez:<\/b> Anahtarlar\u0131n s\u0131ralanabilmesi gerekti\u011fi i\u00e7in <code>null<\/code> anahtarlara izin vermez. Ancak <code>null<\/code> de\u011fer kabul edebilir.<\/li>\n<li><b>Performans:<\/b> Ekleme, silme ve eri\u015fim i\u015flemleri O(log N) zaman karma\u015f\u0131kl\u0131\u011f\u0131na sahiptir, bu da <code>HashMap<\/code>&#8216;ten daha yava\u015ft\u0131r ancak s\u0131ral\u0131 eri\u015fim sa\u011flar.<\/li>\n<\/ul>\n<h2>Map Temel \u0130\u015flemleri ve Kullan\u0131m\u0131<\/h2>\n<p>Java&#8217;da bir harita olu\u015fturmak, eleman eklemek, bunlara eri\u015fmek ve \u00fczerinde \u00e7e\u015fitli i\u015flemler yapmak olduk\u00e7a basittir. \u0130\u015fte temel i\u015flemlerin bir \u00f6zeti:<\/p>\n<h3>Map Olu\u015fturma<\/h3>\n<p>Harita olu\u015fturmak i\u00e7in genellikle <code>HashMap<\/code> s\u0131n\u0131f\u0131n\u0131 kullan\u0131r\u0131z. Anahtar ve de\u011fer tiplerini belirtmeyi unutmay\u0131n.<\/p>\n<pre><code class=\"language-java\">\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class MapKullanimi {\n    public static void main(String[] args) {\n        \/\/ String anahtar ve Integer de\u011fer tutan bir HashMap olu\u015fturma\n        Map<String, Integer> ogrenciNotlari = new HashMap<>();\n        System.out.println(\"Ba\u015flang\u0131\u00e7ta harita bo\u015f mu? \" + ogrenciNotlari.isEmpty()); \/\/ true\n    }\n}\n<\/code><\/pre>\n<h3>Eleman Ekleme (put)<\/h3>\n<p>Bir anahtar-de\u011fer \u00e7iftini haritaya eklemek i\u00e7in <code>put()<\/code> metodunu kullan\u0131r\u0131z. E\u011fer anahtar zaten varsa, eski de\u011fer yeni de\u011ferle de\u011fi\u015ftirilir ve eski de\u011fer d\u00f6nd\u00fcr\u00fcl\u00fcr.<\/p>\n<pre><code class=\"language-java\">\n\/\/ Eleman ekleme\nogrenciNotlari.put(\"Ali\", 85);\nogrenciNotlari.put(\"Ay\u015fe\", 92);\nogrenciNotlari.put(\"Mehmet\", 78);\nogrenciNotlari.put(\"Zeynep\", 92); \/\/ Farkl\u0131 anahtar, ayn\u0131 de\u011fer olabilir\n\nSystem.out.println(\"\u00d6\u011frenci Notlar\u0131: \" + ogrenciNotlari); \/\/ {Ali=85, Zeynep=92, Ay\u015fe=92, Mehmet=78} - S\u0131ra garanti de\u011fil\n<\/code><\/pre>\n<h3>Elemanlara Eri\u015fim (get)<\/h3>\n<p>Belirli bir anahtarla ili\u015fkili de\u011feri almak i\u00e7in <code>get()<\/code> metodunu kullan\u0131r\u0131z. E\u011fer anahtar bulunamazsa <code>null<\/code> d\u00f6ner.<\/p>\n<pre><code class=\"language-java\">\n\/\/ Elemana eri\u015fim\nint aliNotu = ogrenciNotlari.get(\"Ali\");\nSystem.out.println(\"Ali'nin Notu: \" + aliNotu); \/\/ 85\n\n\/\/ Olmayan bir anahtar\u0131 deneme\nInteger canNotu = ogrenciNotlari.get(\"Can\");\nSystem.out.println(\"Can'\u0131n Notu: \" + canNotu); \/\/ null\n\n\/\/ getOrDefault() ile varsay\u0131lan de\u011fer kullanma\nint fatmaNotu = ogrenciNotlari.getOrDefault(\"Fatma\", 0);\nSystem.out.println(\"Fatma'n\u0131n Notu (varsay\u0131lan ile): \" + fatmaNotu); \/\/ 0\n<\/code><\/pre>\n<h3>Eleman Kontrol\u00fc (containsKey, containsValue)<\/h3>\n<p>Bir haritan\u0131n belirli bir anahtar\u0131 veya de\u011feri i\u00e7erip i\u00e7ermedi\u011fini kontrol edebilirsiniz.<\/p>\n<pre><code class=\"language-java\">\n\/\/ Anahtar kontrol\u00fc\nboolean aliVarMi = ogrenciNotlari.containsKey(\"Ali\");\nSystem.out.println(\"Ali haritada var m\u0131? \" + aliVarMi); \/\/ true\n\nboolean ahmetVarMi = ogrenciNotlari.containsKey(\"Ahmet\");\nSystem.out.println(\"Ahmet haritada var m\u0131? \" + ahmetVarMi); \/\/ false\n\n\/\/ De\u011fer kontrol\u00fc\nboolean doksanIkiVarMi = ogrenciNotlari.containsValue(92);\nSystem.out.println(\"92 notu haritada var m\u0131? \" + doksanIkiVarMi); \/\/ true\n<\/code><\/pre>\n<h3>Eleman Silme (remove)<\/h3>\n<p>Belirli bir anahtar-de\u011fer \u00e7iftini haritadan silmek i\u00e7in <code>remove()<\/code> metodunu kullan\u0131r\u0131z. Silinen de\u011fer d\u00f6nd\u00fcr\u00fcl\u00fcr. Anahtar bulunamazsa <code>null<\/code> d\u00f6ner.<\/p>\n<pre><code class=\"language-java\">\n\/\/ Eleman silme\nInteger silinenNot = ogrenciNotlari.remove(\"Mehmet\");\nSystem.out.println(\"Silinen Mehmet'in Notu: \" + silinenNot); \/\/ 78\nSystem.out.println(\"G\u00fcncel \u00d6\u011frenci Notlar\u0131: \" + ogrenciNotlari); \/\/ {Ali=85, Zeynep=92, Ay\u015fe=92}\n\n\/\/ Olmayan bir anahtar\u0131 silmeye \u00e7al\u0131\u015fmak\nInteger olmayanSilinen = ogrenciNotlari.remove(\"Can\");\nSystem.out.println(\"Olmayan Can'\u0131n Notu: \" + olmayanSilinen); \/\/ null\n<\/code><\/pre>\n<h3>Boyut ve Temizleme (size, isEmpty, clear)<\/h3>\n<p>Haritan\u0131n ka\u00e7 eleman i\u00e7erdi\u011fini, bo\u015f olup olmad\u0131\u011f\u0131n\u0131 ve t\u00fcm elemanlar\u0131n\u0131 temizlemeyi sa\u011flayan metodlar.<\/p>\n<pre><code class=\"language-java\">\nSystem.out.println(\"Haritan\u0131n boyutu: \" + ogrenciNotlari.size()); \/\/ 3\nSystem.out.println(\"Harita bo\u015f mu? \" + ogrenciNotlari.isEmpty()); \/\/ false\n\nogrenciNotlari.clear(); \/\/ T\u00fcm elemanlar\u0131 siler\nSystem.out.println(\"Harita temizlendikten sonra: \" + ogrenciNotlari); \/\/ {}\nSystem.out.println(\"Harita bo\u015f mu? \" + ogrenciNotlari.isEmpty()); \/\/ true\n<\/code><\/pre>\n<h2>Map \u00dczerinde Yineleme (Iterating)<\/h2>\n<p>Haritadaki elemanlar \u00fczerinde dola\u015fmak i\u00e7in birka\u00e7 farkl\u0131 y\u00f6ntem bulunur. \u0130htiyac\u0131n\u0131za g\u00f6re en uygun olan\u0131 se\u00e7ebilirsiniz.<\/p>\n<h3>Anahtarlar \u00dczerinden Yineleme (keySet())<\/h3>\n<p>Sadece anahtarlar \u00fczerinde yineleme yapmak istiyorsan\u0131z <code>keySet()<\/code> metodunu kullanabilirsiniz. Bu metod, haritadaki t\u00fcm anahtarlar\u0131 i\u00e7eren bir <code>Set<\/code> d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-java\">\nMap<String, String> ulkeBaskentleri = new HashMap<>();\nulkeBaskentleri.put(\"T\u00fcrkiye\", \"Ankara\");\nulkeBaskentleri.put(\"Fransa\", \"Paris\");\nulkeBaskentleri.put(\"Almanya\", \"Berlin\");\n\nSystem.out.println(\"--- Anahtarlar \u00dczerinden Yineleme ---\");\nfor (String ulke : ulkeBaskentleri.keySet()) {\n    System.out.println(\"\u00dclke: \" + ulke);\n}\n<\/code><\/pre>\n<h3>De\u011ferler \u00dczerinden Yineleme (values())<\/h3>\n<p>Sadece de\u011ferler \u00fczerinde yineleme yapmak istiyorsan\u0131z <code>values()<\/code> metodunu kullanabilirsiniz. Bu metod, haritadaki t\u00fcm de\u011ferleri i\u00e7eren bir <code>Collection<\/code> d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-java\">\nSystem.out.println(\"--- De\u011ferler \u00dczerinden Yineleme ---\");\nfor (String baskent : ulkeBaskentleri.values()) {\n    System.out.println(\"Ba\u015fkent: \" + baskent);\n}\n<\/code><\/pre>\n<h3>Giri\u015fler (Entry) \u00dczerinden Yineleme (entrySet())<\/h3>\n<p>Hem anahtarlara hem de de\u011ferlere ayn\u0131 anda eri\u015fmek istiyorsan\u0131z en verimli yol <code>entrySet()<\/code> metodunu kullanmakt\u0131r. Bu metod, haritadaki her bir anahtar-de\u011fer \u00e7iftini temsil eden <code>Map.Entry<\/code> nesnelerinin bir <code>Set<\/code>&#8216;ini d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-java\">\nSystem.out.println(\"--- Giri\u015fler \u00dczerinden Yineleme ---\");\nfor (Map.Entry<String, String> entry : ulkeBaskentleri.entrySet()) {\n    System.out.println(\"\u00dclke: \" + entry.getKey() + \", Ba\u015fkent: \" + entry.getValue());\n}\n<\/code><\/pre>\n<h3>Java 8 forEach() Metodu ile Yineleme<\/h3>\n<p>Java 8 ile birlikte gelen <code>forEach()<\/code> metodu, haritalar \u00fczerinde yineleme yapmak i\u00e7in daha modern ve okunabilir bir yol sunar. Lambda ifadeleri ile birlikte kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-java\">\nSystem.out.println(\"--- Java 8 forEach() ile Yineleme ---\");\nulkeBaskentleri.forEach((ulke, baskent) -> \n    System.out.println(\"\u00dclke: \" + ulke + \", Ba\u015fkent: \" + baskent)\n);\n<\/code><\/pre>\n<h2>Pratik \u0130pu\u00e7lar\u0131 ve Geli\u015fmi\u015f Kullan\u0131m<\/h2>\n<h3>Do\u011fru Map T\u00fcr\u00fcn\u00fc Se\u00e7mek<\/h3>\n<ul>\n<li><b><code>HashMap<\/code>:<\/b> \u00c7o\u011fu genel ama\u00e7l\u0131 kullan\u0131m i\u00e7in varsay\u0131lan se\u00e7imdir. Y\u00fcksek performans gerektiren ve s\u0131ralaman\u0131n \u00f6nemli olmad\u0131\u011f\u0131 durumlarda tercih edilir.<\/li>\n<li><b><code>LinkedHashMap<\/code>:<\/b> Elemanlar\u0131n eklenme s\u0131ras\u0131n\u0131n korunmas\u0131 gerekti\u011finde veya LRU\/LFU \u00f6nbellekleri gibi eri\u015fim s\u0131ras\u0131na g\u00f6re s\u0131ralaman\u0131n \u00f6nemli oldu\u011fu durumlarda kullan\u0131l\u0131r.<\/li>\n<li><b><code>TreeMap<\/code>:<\/b> Anahtarlar\u0131n do\u011fal s\u0131ralar\u0131na g\u00f6re veya \u00f6zel bir <code>Comparator<\/code> ile s\u0131ralanmas\u0131 gerekti\u011finde kullan\u0131l\u0131r. \u00d6rne\u011fin, bir anahtar aral\u0131\u011f\u0131ndaki elemanlara eri\u015fmek (subMap) istedi\u011finizde.<\/li>\n<li><b><code>ConcurrentHashMap<\/code>:<\/b> \u00c7oklu i\u015f par\u00e7ac\u0131kl\u0131 (multi-threaded) ortamlarda g\u00fcvenli harita eri\u015fimi sa\u011flamak i\u00e7in kullan\u0131l\u0131r. Performans a\u00e7\u0131s\u0131ndan <code>Hashtable<\/code>&#8216;dan daha iyidir.<\/li>\n<\/ul>\n<h3>De\u011fi\u015fmez (Immutable) Map&#8217;ler Olu\u015fturma<\/h3>\n<p>Java 9 ve sonraki versiyonlarda, k\u00fc\u00e7\u00fck, de\u011fi\u015fmez haritalar olu\u015fturmak i\u00e7in <code>Map.of()<\/code> ve <code>Map.ofEntries()<\/code> gibi kolayla\u015ft\u0131r\u0131c\u0131 metodlar bulunmaktad\u0131r. Bu haritalar olu\u015fturulduktan sonra de\u011fi\u015ftirilemezler (ekleme, silme yap\u0131lamaz). G\u00fcvenlik ve performans avantajlar\u0131 sunarlar.<\/p>\n<pre><code class=\"language-java\">\n\/\/ De\u011fi\u015fmez Map olu\u015fturma (Java 9+)\nMap<String, Integer> immutableMap = Map.of(\"Bir\", 1, \"\u0130ki\", 2, \"\u00dc\u00e7\", 3);\n\/\/ immutableMap.put(\"D\u00f6rt\", 4); \/\/ UnsupportedOperationException hatas\u0131 verir\nSystem.out.println(\"De\u011fi\u015fmez Map: \" + immutableMap);\n\n\/\/ Varolan bir Map'ten de\u011fi\u015fmez kopya olu\u015fturma (Java 10+)\nMap<String, String> mutableMap = new HashMap<>();\nmutableMap.put(\"A\", \"Apple\");\nMap<String, String> immutableCopy = Map.copyOf(mutableMap);\n\/\/ immutableCopy.put(\"B\", \"Banana\"); \/\/ UnsupportedOperationException\nSystem.out.println(\"De\u011fi\u015fmez Kopya Map: \" + immutableCopy);\n<\/code><\/pre>\n<h3>computeIfAbsent() ve merge() gibi Modern Metodlar<\/h3>\n<p>Java 8 ile birlikte <code>Map<\/code> aray\u00fcz\u00fcne eklenen yeni metodlar, haritalarla \u00e7al\u0131\u015fmay\u0131 daha kolay ve verimli hale getirir.<\/p>\n<ul>\n<li><b><code>computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)<\/code>:<\/b> E\u011fer belirtilen anahtar haritada yoksa, fonksiyonu \u00e7al\u0131\u015ft\u0131rarak bir de\u011fer hesaplar ve bu de\u011feri anahtarla ili\u015fkilendirir.<\/li>\n<li><b><code>merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction)<\/code>:<\/b> E\u011fer belirtilen anahtar haritada yoksa, de\u011feri ekler. E\u011fer anahtar varsa, mevcut de\u011fer ile yeni de\u011feri birle\u015ftirmek i\u00e7in belirtilen fonksiyonu kullan\u0131r.<\/li>\n<\/ul>\n<pre><code class=\"language-java\">\nMap<String, Integer> kelimeSayilari = new HashMap<>();\nkelimeSayilari.put(\"elma\", 2);\n\n\/\/ \"armut\" yoksa, 1 olarak ekle\nkelimeSayilari.computeIfAbsent(\"armut\", k -> 1);\nSystem.out.println(\"ComputeIfAbsent sonras\u0131: \" + kelimeSayilari); \/\/ {elma=2, armut=1}\n\n\/\/ \"elma\" zaten var, mevcut de\u011fer ile yeni de\u011feri topla\nkelimeSayilari.merge(\"elma\", 1, (mevcutDeger, yeniDeger) -> mevcutDeger + yeniDeger);\nSystem.out.println(\"Merge sonras\u0131 (elma): \" + kelimeSayilari); \/\/ {elma=3, armut=1}\n\n\/\/ \"kiraz\" yok, 1 olarak ekle\nkelimeSayilari.merge(\"kiraz\", 1, (mevcutDeger, yeniDeger) -> mevcutDeger + yeniDeger);\nSystem.out.println(\"Merge sonras\u0131 (kiraz): \" + kelimeSayilari); \/\/ {elma=3, armut=1, kiraz=1}\n<\/code><\/pre>\n<h2>Sonu\u00e7<\/h2>\n<p>Java&#8217;daki haritalar, anahtar-de\u011fer \u00e7iftleri halinde veri depolamak i\u00e7in vazge\u00e7ilmez bir veri yap\u0131s\u0131d\u0131r. <code>HashMap<\/code>, <code>LinkedHashMap<\/code> ve <code>TreeMap<\/code> gibi farkl\u0131 t\u00fcrleri, \u00e7e\u015fitli performans ve s\u0131ralama gereksinimlerine cevap verir. Temel ekleme, eri\u015fim, silme ve yineleme i\u015flemleriyle birlikte, Java 8 ve sonras\u0131 gelen modern metodlar, haritalarla \u00e7al\u0131\u015fmay\u0131 daha esnek ve verimli hale getirmi\u015ftir. Do\u011fru <code>Map<\/code> t\u00fcr\u00fcn\u00fc se\u00e7mek ve geli\u015fmi\u015f \u00f6zelliklerini kullanmak, uygulaman\u0131z\u0131n performans\u0131n\u0131 ve okunabilirli\u011fini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131racakt\u0131r.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<h4>S: Bir Map&#8217;e <code>null<\/code> anahtar veya de\u011fer ekleyebilir miyim?<\/h4>\n<p>C: <code>HashMap<\/code> ve <code>LinkedHashMap<\/code> bir tane <code>null<\/code> anahtar ve birden fazla <code>null<\/code> de\u011fer kabul eder. Ancak <code>TreeMap<\/code>, anahtarlar\u0131n s\u0131ralanmas\u0131 gerekti\u011fi i\u00e7in <code>null<\/code> anahtarlara izin vermez.<\/p>\n<h4>S: Java Map&#8217;leri thread-safe (i\u015f par\u00e7ac\u0131\u011f\u0131 g\u00fcvenli) midir?<\/h4>\n<p>C: Hay\u0131r, <code>HashMap<\/code>, <code>LinkedHashMap<\/code> ve <code>TreeMap<\/code> varsay\u0131lan olarak thread-safe de\u011fildir. \u00c7oklu i\u015f par\u00e7ac\u0131kl\u0131 ortamlarda kullan\u0131ld\u0131\u011f\u0131nda senkronizasyon sorunlar\u0131 ya\u015fanabilir. Bu t\u00fcr durumlarda <code>java.util.concurrent<\/code> paketindeki <code>ConcurrentHashMap<\/code> s\u0131n\u0131f\u0131 kullan\u0131lmal\u0131d\u0131r.<\/p>\n<h4>S: Bir Map&#8217;i nas\u0131l s\u0131ralayabilirim?<\/h4>\n<p>C: E\u011fer anahtarlara g\u00f6re s\u0131ral\u0131 eri\u015fim istiyorsan\u0131z <code>TreeMap<\/code> kullanabilirsiniz. E\u011fer <code>HashMap<\/code> veya <code>LinkedHashMap<\/code>&#8216;i s\u0131ralamak istiyorsan\u0131z, <code>entrySet()<\/code>&#8216;i bir <code>List<\/code>&#8216;e d\u00f6n\u00fc\u015ft\u00fcr\u00fcp <code>Collections.sort()<\/code> metodu ile veya Java 8 Stream API&#8217;yi kullanarak anahtarlara ya da de\u011ferlere g\u00f6re s\u0131ralayabilirsiniz.<\/p>\n<pre><code class=\"language-java\">\n\/\/ HashMap'i de\u011ferlere g\u00f6re s\u0131ralama \u00f6rne\u011fi\nMap<String, Integer> notlar = new HashMap<>();\nnotlar.put(\"Ali\", 85);\nnotlar.put(\"Ay\u015fe\", 92);\nnotlar.put(\"Mehmet\", 78);\n\nnotlar.entrySet().stream()\n    .sorted(Map.Entry.comparingByValue())\n    .forEach(entry -> System.out.println(entry.getKey() + \": \" + entry.getValue()));\n\/\/ \u00c7\u0131kt\u0131: Mehmet: 78, Ali: 85, Ay\u015fe: 92\n<\/code><\/pre>\n<h4>S: <code>Map.Entry<\/code> nedir?<\/h4>\n<p>C: <code>Map.Entry<\/code>, <code>Map<\/code> aray\u00fcz\u00fcn\u00fcn i\u00e7inde tan\u0131mlanm\u0131\u015f bir i\u00e7 aray\u00fczd\u00fcr. Bir haritadaki tek bir anahtar-de\u011fer \u00e7iftini temsil eder. <code>entrySet()<\/code> metodu, <code>Map.Entry<\/code> nesnelerinin bir k\u00fcmesini d\u00f6nd\u00fcr\u00fcr ve bu sayede hem anahtara (<code>getKey()<\/code>) hem de de\u011fere (<code>getValue()<\/code>) ayn\u0131 anda eri\u015fim sa\u011flan\u0131r.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Java&#8217;da Haritalar (Maps) Nedir ve Neden Kullan\u0131l\u0131r?\nJava programlamada veri yap\u0131lar\u0131, bilgiyi d\u00fczenli bir \u015fekilde depolamak ve y\u00f6netmek i\u00e7in","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1408],"tags":[],"class_list":{"0":"post-32477","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-java","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Java&#039;da Haritalar (Maps) Nedir ve Neden Kullan\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/javada-haritalar-maps-nedir-ve-neden-kullanilir\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java&#039;da Haritalar (Maps) Nedir ve Neden Kullan\u0131l\u0131r?\" \/>\n<meta property=\"og:description\" content=\"Java&#039;da Haritalar (Maps) Nedir ve Neden Kullan\u0131l\u0131r? Java programlamada veri yap\u0131lar\u0131, bilgiyi d\u00fczenli bir \u015fekilde depolamak ve y\u00f6netmek i\u00e7in\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/javada-haritalar-maps-nedir-ve-neden-kullanilir\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-22T04:41:39+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javada-haritalar-maps-nedir-ve-neden-kullanilir\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javada-haritalar-maps-nedir-ve-neden-kullanilir\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Java&#8217;da Haritalar (Maps) Nedir ve Neden Kullan\u0131l\u0131r?\",\"datePublished\":\"2025-10-22T04:41:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javada-haritalar-maps-nedir-ve-neden-kullanilir\/\"},\"wordCount\":1454,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Java\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/javada-haritalar-maps-nedir-ve-neden-kullanilir\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javada-haritalar-maps-nedir-ve-neden-kullanilir\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/javada-haritalar-maps-nedir-ve-neden-kullanilir\/\",\"name\":\"Java'da Haritalar (Maps) Nedir ve Neden Kullan\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-22T04:41:39+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javada-haritalar-maps-nedir-ve-neden-kullanilir\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/javada-haritalar-maps-nedir-ve-neden-kullanilir\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/javada-haritalar-maps-nedir-ve-neden-kullanilir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java&#8217;da Haritalar (Maps) Nedir ve Neden Kullan\u0131l\u0131r?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Java'da Haritalar (Maps) Nedir ve Neden Kullan\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/javada-haritalar-maps-nedir-ve-neden-kullanilir\/","og_locale":"tr_TR","og_type":"article","og_title":"Java'da Haritalar (Maps) Nedir ve Neden Kullan\u0131l\u0131r?","og_description":"Java'da Haritalar (Maps) Nedir ve Neden Kullan\u0131l\u0131r? Java programlamada veri yap\u0131lar\u0131, bilgiyi d\u00fczenli bir \u015fekilde depolamak ve y\u00f6netmek i\u00e7in","og_url":"https:\/\/fatihsoysal.com\/blog\/javada-haritalar-maps-nedir-ve-neden-kullanilir\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-22T04:41:39+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"8 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/javada-haritalar-maps-nedir-ve-neden-kullanilir\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/javada-haritalar-maps-nedir-ve-neden-kullanilir\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Java&#8217;da Haritalar (Maps) Nedir ve Neden Kullan\u0131l\u0131r?","datePublished":"2025-10-22T04:41:39+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/javada-haritalar-maps-nedir-ve-neden-kullanilir\/"},"wordCount":1454,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Java"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/javada-haritalar-maps-nedir-ve-neden-kullanilir\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/javada-haritalar-maps-nedir-ve-neden-kullanilir\/","url":"https:\/\/fatihsoysal.com\/blog\/javada-haritalar-maps-nedir-ve-neden-kullanilir\/","name":"Java'da Haritalar (Maps) Nedir ve Neden Kullan\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-22T04:41:39+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/javada-haritalar-maps-nedir-ve-neden-kullanilir\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/javada-haritalar-maps-nedir-ve-neden-kullanilir\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/javada-haritalar-maps-nedir-ve-neden-kullanilir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Java&#8217;da Haritalar (Maps) Nedir ve Neden Kullan\u0131l\u0131r?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32477","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=32477"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32477\/revisions"}],"predecessor-version":[{"id":32478,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32477\/revisions\/32478"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32477"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32477"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32477"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}