Java'da koleksiyonlar, nesne grupları ile çalışmak için veri yapılarını uygular. Ana yapılar:
ArrayList (List arayüzünü uygular) elemanları bir dizide saklar, indekse göre hızlı erişim sağlar, ancak ortada eleman eklemek/çıkarmak yavaştır çünkü elemanların kaydırılmasını gerektirir.
LinkedList (aynı zamanda List'i uygular) çift yönlü bir liste üzerine inşa edilmiştir. Ortada eleman ekleme/çıkarma yaparken hızlıdır, ancak indekse göre erişim yavaştır, çünkü listenin başından veya sonundan geçmesi gerekir.
HashMap Map arayüzünü uygular. Anahtar-değer çiftlerini saklar. Anahtar üzerinden değerlere hızlı erişim (O(1)) hash fonksiyonu sayesinde sağlanır, ancak elemanların sırasını garanti etmez.
List<String> arrayList = new ArrayList<>(); arrayList.add("A"); // hızlı arrayList.get(0); // hızlı List<String> linkedList = new LinkedList<>(); linkedList.add("A"); // biraz daha yavaş linkedList.add(0, "B"); // hızlı Map<String, Integer> map = new HashMap<>(); map.put("bir", 1); Integer val = map.get("bir"); // hızlı
HashMap ve Hashtable arasındaki temel fark nedir ve neden Hashtable modern kodda neredeyse kullanılmamaktadır?
Cevap: HashMap senkronize edilmemiştir, hem anahtar hem de değer için null değerine izin verir. Hashtable senkronize edilmiştir (birden fazla iş parçacığı bir nesne ile çalışma yapabilir ve bütünlük tehdit edilmez), ancak null'a izin vermez ve daha yavaştır. Modern kodda genellikle ConcurrentHashMap çoklu iş parçacıkları için güvenliği sağlamak amacıyla kullanılır, çünkü daha verimli ve çoklu iş parçacıklı hesaplamalar için ince ayar yapılabilir.
Map<String, String> map1 = new HashMap<>(); map1.put(null, "değer"); // TAMAM Map<String, String> map2 = new Hashtable<>(); map2.put(null, "değer"); // NullPointerException
Hikaye
Öğrenci kayıtlama sisteminde sık sık listenin ortasında ekleme ve silme işlemleri için ArrayList kullanıldı, bu da büyük veri hacmiyle birlikte performansın ciddi şekilde düşmesine neden oldu. LinkedList ile değiştirdikten sonra durum normale döndü.
Hikaye
Bir çoklu iş parçacıklı CRM sisteminde, senkronizasyon olmadan iş parçacıkları arasındaki verileri saklamak için HashMap kullanıldı, bu da zaman zaman tutarsız verilere ve race condition nedeniyle çökme sebeplerine neden oldu. ConcurrentHashMap'a geçiş yaptıktan sonra hata ortadan kalktı.
Hikaye
Bir geliştirici, yasak hakkında bilgi sahibi olmadan Hashtable'da null anahtarı eklemeye çalıştı. Bu, NullPointerException'a neden oldu ve uygulamanın neden aniden çöktüğünü bulmak uzun sürdü.