Hashmap Mülakat Soruları ve Cevapları [Yeni Başlayanlar ve Deneyimliler İçin]

Yayınlanan: 2020-09-24

Java.util.HashMap sınıfı, Java'nın açık ara en önemli kitaplıklarından biridir. Nadiren Java ile yazılmış herhangi bir proje vardır ve uygulamalarında HashMap kütüphanesini kullanmaz. Java ile ilgili herhangi bir program için bunu neredeyse vazgeçilmez kılan, bu veri yapısının uygulanma şeklidir. HashMap, tanımında çok basittir. HashMap, çok tablolu bir yaklaşım kullanılarak uygulanan bir veri yapısıdır.

Haklı olarak sadece bir veri yapısı olacaksa HashMap olması gerektiği söylenir. Bu sadece çok yararlı değil, aynı zamanda çok zaman verimlidir. HashMap'te basit bir arama yalnızca yaklaşık O(1) zaman alır (yani bir HashMap'teki tüm aramalar sabit zamanda yapılır). Java'nın programlama dilinde HashTable, concurrenthashmaps, vb. gibi birçok HashMap uygulamasını bulacaksınız. Ancak, genel bir uygulama arıyorsanız, temel HashMap'ten uzaklaşmamalısınız.

HashMap'in bu uygulamalarının her biri, kendi özellik setleri ve kullanım durumları ile birlikte gelir. Eşlemeyi yazdığınız sıranın korunmasını istiyorsanız, Linked HashMap'i kullanmayı düşünmelisiniz. Eşlemenizin sıralanmasını istiyorsanız, sıralamayı sizin için yapan HashMap'in TreeMap uygulamasını kullanmalısınız.

Benzer bir şekilde, ölçeklenebilirliği korurken eşzamanlı bir uygulamada da kullanılabilen, iş parçacığı için güvenli olan bir Hash tablosu arıyorsanız, eşzamanlı bir HashMap'e bakıyor olacaksınız.

Gördüğünüz gibi HashMap'i kullanmanın çeşitli yolları var. HashMap'in önemini gerçekten bilmek için, herhangi bir yazılım mühendisliği iş profili için mülakat sorularını görmelisiniz. Bir HashMap'i nasıl doğru şekilde uygulayacağınızı bilmiyorsanız, zamanı doğru şekilde optimize edemezsiniz. Dolayısıyla, bir programcıysanız, HashMap'in içini ve dışını öğrenmekten uzaklaşamazsınız. Bu nedenle, bir sonraki görüşmenize hazırlanmanıza yardımcı olacak bazı olağanüstü hashmap görüşme sorularını aşağıda listeledik.

Dünyanın en iyi Üniversitelerinden çevrimiçi veri bilimi kursu öğrenin . Kariyerinizi hızlandırmak için Yönetici PG Programları, Gelişmiş Sertifika Programları veya Yüksek Lisans Programları kazanın.

İçindekiler

Hashmap Mülakat Soruları ve Cevapları

S1. Java'da HashMap'in put() yöntemini nasıl kullanacaksınız?

Ans. put() yöntemi, basitçe, karma olarak bilinen ilkeyi kullanarak çalışır. Söz konusu nesneyi arka uçta (bir bellek dizisi olan) depolamak için bu işlevi kullanırsınız. Bu nesnenin arka uçtaki tam konumunu tespit edebilmek için bu put() işleviyle birlikte başka bir işlev kullanmanız gerekir. hashcode() işlevi, daha önce açıkladığımız şekilde put() için yardımcı işlev olarak kullanılır.

Bu nedenle, bu iki işlevin birlikte çalışma şekli, arka uçtaki kullanılabilir anahtarı ve bellek konumunu aramalarıdır. Eğer çarpışırlarsa, her iki değere de sahip olan nesne (hem anahtarın hem de değerin değerleri), daha sonra bağlantılı liste olarak da bilinen dinamik bir liste uygulamasına eklenir. Buradaki beğenilenler listesi, daha önce bulunan hafıza konumunda saklanır.

S2. Bir nesnenin bir HashMap'in anahtarı veya değeri olarak kullanılabilmesi için sahip olması gereken temel ihtiyaçlar nelerdir?

Ans. Herhangi bir HashMap'te ve uygulamasında kullandığımız hem anahtar hem de değer, içinde bu iki işlevi de yazmalıdır. Bu iki işlevin adı eşittir() ve hashcode()'dur. Herhangi bir HashMap'e anahtarın değerini eklediğimizde hashcode() adlı fonksiyon kullanılır. Aynı zamanda, equals() işlevi yalnızca HashMap'te zaten depolanmış olan değeri geri almaya çalıştığımızda çağrılır.

S3. Diyelim ki HashMap'inizde kullandığınız anahtarların izini kaybettiniz. Eklemek istediğiniz bir sonraki anahtar HashMap'te zaten mevcut. Sizce bu durumda ne olacak?

Ans. Eğer bir hata olması gerektiğini düşünüyorsanız HashMap'ten bahsetmiyorsak yanılmış olmazsınız. Ancak, HashMap kullanıyorsanız ve değeri hashmap'te zaten mevcut olan bir anahtar eklerseniz, Java derleyicisi herhangi bir hata vermez. Bunun yerine, derleyici gidip girdiğiniz anahtarla ilişkili değeri bulacak ve yalnızca oradaki değeri güncelleyecektir.

Değeri hashmap'e eklemek için put() işlevini kullanırsanız, bu işlevin dönüş değeri o anahtarla ilişkili eski değer olacaktır. Öyleyse, A anahtarı için depolanmış bir değeriniz olduğunu varsayalım. Şimdi A'nın değerini 50 diyelim, koyarsanız, put() işlevi tarafından döndürülecek değer 1 olacaktır. ve A anahtarında depolanan son değer 50 olur.

S4. Boş bir değerin saklanması ihtiyacının ortaya çıkması durumunda. Bu durumda HashMap'i kullanabilir misiniz?

Ans. Evet, bu durumda hashmap'i sorunsuz kullanabiliriz çünkü hashmap'ler saklayabileceğiniz değeri düşürmez. Herhangi bir hashmap'te kalbinizin istediği kadar boş değer saklayabilirsiniz.

S5. Java'daki hashmap uygulamasıyla çarpışma nasıl ele alınır?

Ans. Java.util.HashMap kod kitaplığı, çarpışmaları işlemek için zincirleme yöntemini kullanır. Bu zincirlemenin çalışma şekli, hem anahtar hem de değer çiftini içeren hashmap'e yapılan herhangi bir yeni giriş, bağlantılı bir listede depolanacak ve bu liste daha sonra hashmap'lerin mevcut verilerinin bulunduğu yerde (kova konumu) saklanacaktır. .

Hashmap'inizdeki tüm anahtarların aynı hashcode'a sahip olması durumunda, hashmap'iniz artık hashmap olmayacaktır. Bağlantılı bir listeye dönüştürülecektir. Arama süresi bir (o(1)) mertebesi, yani sabit zaman, doğrusal zaman olan N (O(N)) mertebesine kadar artacaktır.

S6. Java'nın hashmap uygulamasında boş değeri olan bir anahtarı saklayabilecek misiniz?

Ans. Evet, Java'nın hashmap uygulamasında, anahtarları boş bir değere sahip olarak saklayabileceksiniz. Ancak, her zaman kova listesinin başında saklanacak olan bu tür yalnızca bir anahtarı saklayabileceksiniz. Hashmap, burada hashcode() işlevini çağırmaz, çünkü bu işlev bir boş anahtarda kullanılırsa, bir Boş İşaretçi İstisnası hatası verir. Hashmap'inizin ilk indeksinin size döndürülmesini istiyorsanız, anahtar olarak null değerini kullanmak yerine get işlevini kullanmanız gerekecektir.

Okuyun: Veri Yapısında Sıralama: Kategoriler ve Türler

S7. Sizce hashmap hangi veri yapısını taklit etmek için tasarlanmıştır?

Ans. Hashmap'in, hash tablosu veri yapısının görünümünü ve işlevselliğini taklit etmesi beklenir. Değerleri bir anahtar ve değer çifti biçiminde saklamak istiyorsanız, karma tablo veri yapısı ideal seçiminizdir. Bu hash tablosunun tercih edilmesinin temel nedeni arama süresinden kaynaklanmaktadır. Yani, aramak istediğiniz anahtara sahipseniz, o zaman sadece bir veya sabit zamanlı olarak, istediğiniz değeri geri alabileceksiniz.

S8. Hashmap, yapı veya diziler gibi temel veri yapılarından biri olmadığından. Bir hashmap oluşturduğunuzda kaputun altında neler olduğunu düşünüyorsunuz? Sizce bize hashmapleri hangi veri yapısının kombinasyonu verdi?

Ans. Hashmap aslında bir hashtable'ı temsil etse de, kaputun altında doğrudan uygulanmaz. Bir hashmap'e hayat vermek için iyi bilinen iki veri yapısını kullanıyoruz. Bağlantılı bir liste ve diziler kullanıyoruz. Anahtar ve değer çiftini dinamik olarak depolamak için bağlantılı bir liste kullanılır ve dizi, tüm bu bağlantılı listeleri bunlara depolamak için kullanılır; birlikte bir hashmap oluştururlar.

Java 8'den itibaren, bağlantılı liste yeterince büyürse, bağlantılı liste yerine Java bunun yerine bir ikili arama ağacı uygular. Bu değişiklik, zamandan tasarruf etmek ve hashmap'in genel performansını iyileştirmek için yapılmıştır.

Ayrıca Okuyun: Veri Bilimi Mülakat Soruları

S9. Aynı anahtar altında birden fazla değer saklamak istediğimizde, Java'da bulunan hashmap uygulamasında bunun mümkün olacağını düşünüyor musunuz?

Ans. Hayır, hashmap'te yinelenen anahtarları depolayamazsınız. Hashmap'te zaten mevcut olan bir anahtarda yeni bir değer saklamaya çalışırsanız, o zaman hashmap, o anahtarda daha önce depolanmış olan değeri kaldırır ve yenisiyle değiştirir.

Bu durumda hashmap'in boyutu değişmez, yani hashmap'e hiçbir anahtar eklenmez. Bu özellik, bir hashmap'in tüm anahtarlarını geri almak için keyset() işlevini kullanmamızın nedenlerinden biridir ve bu işlevin bir koleksiyon değil bir küme döndürmesidir (çünkü bir kümede tüm değerlerin benzersiz olması gerekir).

S10. HashMap'te yinelenen değerleri saklayabilecek misiniz?

Ans. Evet, hashmap'te yinelenen değerleri saklayabileceksiniz. Hashmap'ten tüm değerleri almanızın nedeni budur. Sonra bir set almak yerine bir koleksiyon alıyoruz. Sıralama garanti edilmediği için değeri liste şeklinde vermez.

S11. Java'nın hashmap uygulamasında, iş parçacığı güvenli mi?

Ans. Hayır, vanilya Hashmap Java'da iş parçacığı için güvenli değildir. İdeal olarak, değeri değiştirebilecek ve hashmap'i herhangi bir biçimde veya şekilde düzenleyebilecek bir iş parçacığıyla hashmap'i paylaşmaktan kaçınmalısınız. Bununla birlikte, salt okunur bir hashmap kullanabilir ve ardından onu iş parçacığına besleyebilirsiniz. Bu sayede içerdikleri değerler değişmez.

Q12. Çoklu iş parçacığı kullanan bir uygulamada hashmap kullanırsak ne olacağını düşünüyorsunuz?

Ans. Birden fazla iş parçacığı kullanan bir uygulamaya bir hashmap iletirseniz ve bu iş parçacıklarının her biri, hashmap'te depolanan değerleri değiştirebilir, ekleyebilir veya kaldırabilirse, o zaman hashmap'in oluşturulduğu dahili veriler bozulur. . Hashmap'i oluşturmak için kullanılan bağlantılar kaybolacaktı ve ardından hashmap yapısını kaybedecek ve amacı da kaybolacaktı. Bu nedenle, iş parçacıklı bir uygulamada kullanacaksanız, her zaman iş parçacığı güvenli hashmap kullanmanız önerilir.

S13. Java'daki HashMap'in tamamını yinelemek istiyorsak. Bunu yapabilmemizin farklı yolları nelerdir?

Ans. Java'da bir hashmap üzerinde yineleme yapmanın birçok yolu vardır; Bunlardan bazıları aşağıda listelenmiştir:

  1. Yinelenen bir değişkenle birlikte keySet işlevini kullanabilirsiniz.
  2. Yinelenen bir değişkenle birlikte enterySet işlevini kullanabilirsiniz.
  3. inputSet işlevini kullanabilir ve bunu gelişmiş bir döngü ile kullanabilirsiniz.
  4. keySet'i kullanabilir ve bir yöntem alabilirsiniz.

Ayrıca Okuyun: Python'da Veri Yapıları ve Algoritma: Bilmeniz Gereken Her Şey

Sıradaki ne?

Veri bilimi hakkında bilgi edinmek istiyorsanız, IIIT-B & upGrad'ın çalışan profesyoneller için oluşturulmuş ve 10'dan fazla vaka çalışması ve proje, uygulamalı uygulamalı atölye çalışmaları, endüstri uzmanlarıyla mentorluk, 1 Endüstri danışmanlarıyla bire bir, en iyi firmalarla 400+ saat öğrenim ve iş yardımı.

Hashtable'ın HashMap'ten farkı nedir?

Senkronize olmayan bir veri yapısı bir HashMap'tir. Öte yandan bir Hashtable, iş parçacığı için güvenlidir ve senkronizasyon kodu gerektirmeden birçok iş parçacığı arasında paylaşılabilir. Hashtable, bir boş anahtara veya birden çok boş değere izin vermez, ancak HashMap izin verir. İş parçacığı olmayan uygulamalarda Hashtable yerine HashMap kullanılmalıdır. Basitçe söylemek gerekirse, HashMap tek iş parçacıklı veya senkronize olmayan uygulamalarda kullanılmalıdır.

HashMap veya TreeMap kullanmak daha mı hızlı?

Bir TreeMap'te değerler anahtar tarafından belirlenir. Boş bir anahtarı olamaz, ancak birden çok boş değeri olabilir. HashMap ile aynıdır, ancak artan düzen yerine artan düzeni korur (anahtarının doğal düzeni kullanılarak sıralanır). HashMap, bileşenlerini karma tablo tabanlı bir uygulama olarak karma işlevine göre düzenlemek için dizi tabanlı bir veri yapısı kullanır. Add(), delete() ve içerir gibi çoğu işlem için HashMap, O(1)() öğesinin sabit zamanlı performansını tahmin eder. Sonuç olarak, bir TreeMap'ten çok daha hızlıdır.

ArrayList yerine HashMap kullanmak ne zaman daha iyidir?

Yalnızca depolamak istediğimiz veriler için benzersiz anahtarlar mevcut olduğunda HashMap anlamlıdır. Bir anahtara dayalı şeyler ararken, hızlı erişim süresi bir zorunluluk olduğu için onu kullanmalıyız. Bir koleksiyonda aynı giriş sırasını tutmak kritik olduğunda, HashMap'ten kaçınmalıyız. Her ikisi de birbirinden farklıdır ve farklı amaçlara hizmet eder. Nesneleri Java'da depolamak istiyorsanız, anahtarları değerlere eşlemek için HashMap'i, aksi takdirde ArrayList'i kullanın.