java map interface tutorial with implementation examples
Bu Kapsamlı Java Harita Eğitimi, Haritalar aracılığıyla Nasıl Oluşturulacağını, Başlatılacağını ve Yinelendiğini kapsar. Ayrıca Harita Yöntemleri ve Uygulama Örnekleri hakkında bilgi edineceksiniz:
Harita arayüzünün temellerini, harita arayüzü tarafından desteklenen yöntemleri ve harita arayüzüyle ilgili diğer belirli terimleri öğreneceksiniz.
Java'daki haritalar koleksiyonu, anahtarı bir değerle eşleyen bir koleksiyondur. Anahtarlardan ve değerlerden oluşan bir koleksiyondur. Haritadaki her giriş, karşılık gelen değerine sahip bir anahtardan oluşur. Anahtarlar haritalarda benzersizdir. Haritalar, tipik olarak bir koleksiyonu anahtar değerine göre değiştirmemiz gerektiğinde kullanılabilir.
=> TÜM Java Öğreticilerini Buradan Kontrol Edin.
Ne öğreneceksin:
- Java'da Haritalar
- Harita Yöntemleri
- Java Harita Uygulaması
- Sonuç
Java'da Haritalar
Java'daki harita, java.util.map arayüzünün bir parçasıdır. Harita arayüzü, koleksiyon arayüzünün bir parçası değildir ve haritaların diğer koleksiyonlardan farklı olmasının nedeni budur.
Harita arayüzünün genel hiyerarşisi aşağıda gösterilmiştir.
Yukarıda gösterildiği gibi, haritayı uygulamak için iki arayüz vardır, yani harita arayüzü ve sıralanmışMap arayüzü. HashMap, TreeMap ve LinkedHashMap olmak üzere üç sınıf vardır.
Bu harita türleri aşağıda açıklanmıştır:
Sınıf | Açıklama | |
---|---|---|
Kaldır | V kaldır (Nesne anahtarı) | Verilen anahtar için bir harita girişini silin |
LinkedHashMap | HashMap sınıfından genişler. Bu harita, kampanya siparişini korur | |
HashMap | Bir harita arayüzü uygulayın. HashMap tarafından hiçbir sipariş sağlanmamaktadır. | |
Ağaç Haritası | Hem harita hem de sıralanmışMap arayüzünü uygular. TreeMap artan bir düzen sağlar. |
Haritalar Hakkında Hatırlanması Gereken Noktalar.
- Haritalarda, her anahtar en fazla bir değerle eşlenebilir. Ayrıca haritalarda yinelenen anahtarlar olamaz.
- HashMap ve LinkedHashMap gibi harita uygulamaları boş anahtar ve boş değerlere izin verir. Ancak TreeMap buna izin vermiyor.
- Bir harita olduğu gibi geçilemez. Bu nedenle, çapraz geçiş için keyset () veya entrySet () yöntemi kullanılarak sete dönüştürülmesi gerekir.
Java'da Harita Oluşturun
Java'da bir harita oluşturmak için önce arayüzü programımıza dahil etmeliyiz. Harita işlevini içe aktarmak için programda aşağıdaki ifadelerden birini kullanabiliriz.
import java.util.*; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.TreeMap;
Bir arayüz olduğu için haritanın somut bir uygulamasını somutlaştırmamız gerekiyor.
Aşağıdaki ifadeler Java'da bir harita oluşturur.
Map hash_map = new HashMap(); Map tree_map = new TreeMap();
Yukarıdaki ifadeler, varsayılan özelliklere sahip haritalar oluşturacaktır.
Hem anahtar hem de değer için türleri belirleyen genel haritalar da oluşturabiliriz.
Map myMap = new HashMap();
Yukarıdaki tanım, değer olarak dizge tipi anahtarlara ve nesnelere sahip olacaktır.
Java'da Bir Harita Başlatma
Aşağıdaki yöntemler kullanılarak başlatılabilir:
# 1) Koleksiyonları Kullanma
Java Collections sınıfı, haritalar dahil koleksiyonları başlatmak için kullanılabilecek fabrika yöntemlerine sahiptir.
Haritayı başlatmak için kullanılan bazı yöntemler şunlardır:
(1) Collections.EmptyMap ()
Collections.EmptyMap () boş olan serileştirilebilir ve değişmez bir harita döndürür. Örneğin, aşağıdaki kod satırı,
Map myMap = Collections.EMPTY_MAP;
Bu boş bir harita oluşturacaktır. Yukarıdaki yöntem, 'kontrol edilmeyen atama uyarısı' atabilir ve bu nedenle, aşağıdaki gibi tür güvenli formu da kullanabiliriz.
Map myMap = Collections.emptyMap ();
(2) Collections.unModifiableMap ()
UnModifiableMap () yöntemi, bağımsız değişken olarak başka bir haritayı alır ve orijinal haritanın değiştirilemez bir görünümünü oluşturur.
Map myMap = Collections.EMPTY_MAP; Map map_unmodifiable = Collections.unmodifiableMap (myMap);
(3) Collections.singletonMap ()
Koleksiyonlar sınıfı ayrıca, yalnızca bir girişi olan değişmez bir tekli harita oluşturan bir fabrika yöntemi 'singletonMap ()' sağlar.
Map singleton_map = Collections.singletonMap('CHN', 'Beijing');
# 2) Java 8 kullanmak
Java 8 akış API yöntemlerinden bir veri akışı elde edebilir ve Collectors kullanarak haritalar oluşturabiliriz.
Harita oluşturma yöntemlerinden bazıları şunlardır:
(1) Collectors.toMap ()
Bir akış topluyoruz ve ardından bir harita oluşturmak için Collectors.toMap () yöntemini kullanıyoruz.
Map map = Stream.of(new String()(){{'USA', 'Washington'}, {'United Kingdom', 'London'} }).collect(Collectors.toMap(p -> p(0), p -> p(1)));
Yukarıdaki ifade, Java 8 akışından bir harita oluşturur.
(2) Collectors.collectingAndThen ()
Bunda, toplayıcının collectingAndThen () yöntemini kullanarak değişmez bir harita oluşturmasına izin veren toMap () yöntemini uyarlarız.
Map immutableMap = Stream.of(new String()(){ {'USA', 'Washington'}, {'United Kingdom', 'London”} }).collect(Collectors.collectingAndThen(Collectors.toMap(p -> p (0), p -> p(1)), Collections::unmodifiableMap));
# 3) Harita Arayüzünün put yöntemini kullanmak
Harita arayüzünün put () yöntemi, haritalara başlangıç değerleri atamak için kullanılabilir.
# 4) Çift Ayraç Başlatma Kullanımı
'Çift küme ayracı başlatma' tekniği bir iç sınıf oluşturur. Bu sınıf anonimdir ve içinde bir örnek başlatıcısı vardır. Bu tercih edilen bir teknik değildir ve bellek sızıntılarına veya serileştirme sorunlarına neden olabileceğinden kaçınılmalıdır.
Aşağıdaki program, yukarıda tartışılan bir haritayı başlatmanın çeşitli yöntemlerini göstermektedir.
import java.util.*; import java.util.stream.*; import java.util.stream.Collectors; public class Main { public static void main(String args()) { //using Collections //create an empty map Map emptymap = Collections.EMPTY_MAP; //create unmodifiable map using Collections Map unmodifiableMap = Collections.unmodifiableMap(emptymap); System.out.println('unmodifiableMap map values:' + unmodifiableMap); //singleton map Map singleton_map = Collections.singletonMap(10, ' TEN'); System.out.println('
singleton_map Map values:' + singleton_map); //using Java 8 //1. toMap method of collectors class Map map_cities = Stream.of(new String()(){ {'MH', 'Mumbai'}, {'CH', 'Chennai'}, {'DL', 'New Delhi'} }).collect(Collectors.toMap(p -> p(0), p -> p(1))); System.out.println('
map_cities values: ' + map_cities); //2. collectingAndThen method Map capitals_Map = Stream.of(new String()(){ {'MAH', 'Mumbai'}, {'GOA', 'Panaji'}, {'KAR', 'Bangaluru'} }).collect(Collectors.collectingAndThen (Collectors.toMap(p -> p(0), p -> p(1)), Collections::unmodifiableMap)); System.out.println('
capitals_Map values: ' + capitals_Map); //double brace initialization Map country_map = new HashMap(); country_map.put('USA', 'Washington'); country_map.put('UK', 'London'); country_map.put('IND', 'Delhi'); country_map.put('GER', 'Berlin'); System.out.println('
Map values:' + country_map); } }
Çıktı:
unmodifiableMap eşleme değerleri: {}
singleton_map Harita değerleri: {10 = TEN}
map_cities değerleri: {CH = Chennai, DL = Yeni Delhi, MH = Mumbai}
capitals_Map değerleri: {MAH = Mumbai, GOA = Panaji, KAR = Bangaluru}
Harita değerleri: {ABD = Washington, GER = Berlin, UK = Londra, IND = Delhi}
Java'da Harita Üzerinde Yineleyin ve Haritayı Yazdırın
Haritayı, diğer koleksiyonları katettiğimiz gibi gezebiliriz. Harita girişlerinin üzerinden geçmenin yanı sıra, yalnızca anahtarları veya haritadaki değerleri de geçebiliriz. Bir haritayı geçmek için önce ayarlanmaya dönüştürülmesi gerektiğini unutmayın.
Harita girişlerinde gezinmek için aşağıdaki yöntemler kullanılır.
Giriş Yineleyicisini Kullanma
Bu yöntemde, bir giriş kümesinden bir giriş yineleyicisi elde ederiz. Daha sonra getKey ve getValue yöntemlerini kullanarak her bir eşleme girişi için anahtar / değer çiftini alırız.
Aşağıdaki program bir giriş yineleyicinin kullanımını göstermektedir.
import java.util.*; import java.util.stream.*; import java.util.stream.Collectors; public class Main { public static void main(String args()) { //use toMap method of collectors class to populate the map Map map_cities = Stream.of(new String()(){ {'MH', 'Mumbai'}, {'CH', 'Chennai'}, {'DL', 'New Delhi'} }).collect(Collectors.toMap(p -> p(0), p -> p(1))); //transform map to set Set entries = map_cities.entrySet(); //declare an iterator Iterator iterator = entries.iterator(); System.out.println('The map entries are:'); System.out.println(' KEY VALUE'); //iterate and print key and value pairs. while(iterator.hasNext()) { Map.Entry entry = iterator.next(); System.out.println(' ' + entry.getKey() + ' ' +entry.getValue()); } } }
Çıktı:
Harita girişleri şunlardır:
ANAHTAR DEĞER
CH Chennai
DL Yeni Delhi
MH Mumbai
Yukarıdaki programda, entrySet yöntemini kullanarak haritadan bir giriş yineleyicisi elde ediyoruz. Daha sonra giriş yineleyicisinin hasNext () yöntemini kullanarak haritayı gezeriz ve anahtar-değer çiftini yazdırırız.
Her Döngü için Bir Giriş Kullanma
Burada inputSet'i her döngü için kullanarak geçiyoruz ve uygulama aşağıda gösteriliyor.
import java.util.*; import java.util.stream.*; import java.util.stream.Collectors; public class Main { public static void main(String args()) { //use toMap method of collectors class to populate the map Map map_cities = Stream.of(new String()(){ {'MH', 'Mumbai'}, {'CH', 'Chennai'}, {'DL', 'New Delhi'} }).collect(Collectors.toMap(p -> p(0), p -> p(1))); System.out.println('The map entries are:'); System.out.println(' KEY VALUE'); //iterate using for each over entry set and print key and value pairs. for(Map.Entry entry : map_cities.entrySet()){ System.out.println(' ' + entry.getKey() + ' ' +entry.getValue()); } } }
Çıktı:
Harita girişleri şunlardır:
ANAHTAR DEĞER
CH Chennai
DL Yeni Delhi
MH Mumbai
Harita Yöntemleri
Java'daki harita arayüzü, diğer koleksiyonlar tarafından desteklenenlere benzer çeşitli işlemleri destekler. Bu bölümde, Java'da Map API tarafından sağlanan çeşitli yöntemleri tartışacağız. Bu eğiticinin kapsamı genel olarak bir harita arayüzünü tanıtmakla sınırlı olduğundan, bu yöntemleri açıklamayacağız.
Harita arayüz sınıflarını tartışırken bu yöntemleri detaylı olarak tartışacağız.
Aşağıdaki tablo, harita API'si tarafından sağlanan tüm yöntemleri listeler.
Yöntem Adı | Yöntem Prototipi | Açıklama |
---|---|---|
almak | V get (Nesne anahtarı) | Verilen anahtar için nesneyi veya değeri verir |
koymak | V put (Nesne anahtarı, Nesne değeri) | Haritaya anahtar / değer girişi ekle |
putAll | void putAll (Harita haritası) | Haritaya verilen harita girişlerini ekleyin. Başka bir deyişle, bir haritayı kopyalar veya klonlar. |
anahtar seti | KeySet () ayarla | Haritanın set görünümünü döndürür. |
entrySet | Ayarlamak | İade, belirli bir haritanın görünümünü ayarlar |
değerler | Koleksiyon değerleri () | Haritadaki değerlerin koleksiyon görünümünü döndürür. |
boyut | int size () | Haritadaki girişlerin sayısını verir |
açık | void temizle () | Haritayı temizler |
boş | boolean isEmpty () | Haritanın boş olup olmadığını kontrol eder ve evet ise doğru döndürür. |
containsValue | boolean containsValue (Nesne değeri) | Harita verilen değere eşit bir değer içeriyorsa doğru döndürür |
containsKey | boolean containsKey (Nesne anahtarı) | Haritada belirli bir anahtar varsa doğru döndürür |
eşittir | boolean eşittir (Object o) | Belirtilen o nesnesini harita ile karşılaştırır |
hash kodu | int hashCode () | Harita için hash kodunu döndürür |
her biri için | void forEach (BiConsumer eylemi) | Haritadaki her giriş için verilen eylemi gerçekleştirir |
getOrDefault | V getOrDefault (Nesne anahtarı, V defaultValue) | Verilen anahtar için belirtilen değeri veya anahtar yoksa varsayılan değerini döndürür |
Kaldır | boole kaldır (Nesne anahtarı, Nesne değeri) | Belirtilen anahtarları ve değerleri kaldırır |
yerine koymak | V değiştirme (K anahtarı, V değeri) | Verilen anahtarı belirtilen değerle değiştirir |
yerine koymak | boole yerine (K anahtarı, V oldValue, V newValue) | Belirli bir anahtar için eski değeri yeni bir değerle değiştirir |
hepsini değiştir | void replaceAll (BiFunction işlevi) | Tüm harita girişlerini değiştirmek için verilen işlevi çağırır |
putIfAbsent | V putIfAbsent (K anahtarı, V değeri) | Verilen anahtarı, değeri yalnızca zaten mevcut değilse ekler |
hesaplamak | V hesaplama (K tuşu, BiFunction yeniden eşleme Fonksiyonu) | Eşleme işlevi verilen belirtilen anahtar ve değer için eşlemeyi hesaplar. |
computeIfAbsent | V computeIfAbsent (K tuşu, Function mappingFunction) | Zaten mevcut değilse, eşleme işlevini kullanarak verilen anahtarın değerini hesaplayın. |
computeIfPresent | V computeIfPresent (K tuşu, BiFunction yeniden eşlemeFunction) | Anahtar değeri zaten mevcutsa, verilen yeniden eşleme işleviyle verilen anahtar için yeni eşlemeyi hesaplar |
Git | V birleştirme (K anahtarı, V değeri, BiFunction yeniden eşleme Fonksiyonu) | Belirli bir anahtarı, önceden ilişkilendirilmemişse veya boş değerle ilişkilendirilmişse değerle ilişkilendirir. |
Yukarıdaki yöntemlerin tümü, harita arayüzü tarafından desteklenmektedir. Gölgeli görünen yöntemlerin Java 8'de bulunan yeni yöntemler olduğuna dikkat edin.
Java Harita Uygulaması
Aşağıdaki program Java'da bir harita örneği uygulamaktadır. Burada yukarıda tartışılan yöntemlerin çoğunu kullanıyoruz.
Örnek, çeşitli alma işlemlerini, koyma ve ayarlama işlemlerini gösterir.
import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class Main { public static void main(String() args) { //create a map Map country_map = new HashMap(); //assign values to the map country_map.put('IND', 'India'); country_map.put('SL', 'Srilanka'); country_map.put('CHN', 'China'); country_map.put('KOR', 'Korea'); country_map.put(null, 'Z'); // null key country_map.put('XX', null); // null value String value = country_map.get('CHN'); // get System.out.println('Key = CHN, Value : ' + value); value = country_map.getOrDefault('XX', 'Default Value'); //getOrDefault System.out.println('
Key = XX, Value : ' + value); boolean keyExists = country_map.containsKey(null); //containsKey boolean valueExists = country_map.containsValue('Z'); //containsValue System.out.println('
null keyExists : ' + keyExists + ', null valueExists= ' + valueExists); Set entrySet = country_map.entrySet(); //entrySet System.out.println('
entry set for the country_map: ' + entrySet); System.out.println('
Size of country_map : ' + country_map.size()); //size Map data_map = new HashMap(); data_map.putAll(country_map); //putAll System.out.println('
data_map mapped to country_map : ' + data_map); String nullKeyValue = data_map.remove(null); //remove System.out.println('
null key value for data_map : ' + nullKeyValue); System.out.println('
data_map after removing null key = ' + data_map); Set keySet = country_map.keySet(); //keySet System.out.println('
data map keys : ' + keySet); Collection values = country_map.values(); //values System.out.println('
data map values : ' + values); country_map.clear(); //clear System.out.println('
data map after clear operation, is empty :' + country_map.isEmpty()); } }
Çıktı:
Anahtar = CHN, Değer: Çin
Anahtar = XX, Değer: boş
null keyExists: true, null valueExists = true
country_map için giriş kümesi: (null = Z, XX = null, CHN = Çin, SL = Srilanka, IND = Hindistan, KOR = Kore)
Ülke haritasının boyutu: 6
data_map, country_map ile eşlendi: {null = Z, XX = null, CHN = Çin, SL = Srilanka, IND = Hindistan, KOR = Kore
to}
data_map için boş anahtar değeri: Z
boş anahtar kaldırıldıktan sonra data_map = {XX = null, CHN = Çin, SL = Srilanka, IND = Hindistan, KOR = Kore}
veri eşleme anahtarları: (boş, XX, CHN, SL, IND, KOR)
veri haritası değerleri: (Z, null, China, Srilanka, India, Korea)
temizleme işleminden sonraki veri haritası boş: doğru
Java'da Bir Haritayı Sıralama
Bir harita anahtar-değer çiftlerinden oluştuğundan, haritayı anahtarlara veya değerlere göre sıralayabiliriz.
Bu bölümde, bir haritayı hem anahtarlara hem de değerlere göre sıralayacağız.
Anahtara Göre Sırala
Anahtarlardaki bir haritayı sıralamak için bir ağaç haritası kullanabiliriz. Ağaç haritası, tuşları otomatik olarak sıralar. Aşağıdaki Java programı, bir haritayı ağaç haritasına dönüştürür ve sıralanan anahtarları görüntüler.
import java.util.HashMap; import java.util.Map; import java.util.TreeMap; public class Main { public static void main(String() args) { //declare and initialize a map Map country_map = new HashMap(); country_map.put('I', 'India'); country_map.put('C', 'China'); country_map.put('A', 'America'); country_map.put('D', 'Denmark'); country_map.put('X', 'Hongkong'); //print original map System.out.println('Original Unsorted Map: '); display_map(country_map); System.out.println('
Map sorted by Key: '); //convert map to treemap and display it in which keys are auto sorted Map treecountry = new TreeMap(country_map); display_map(treecountry); } public static void display_map(Map map) { //obtain entry iterator and display key value pairs of map for (Map.Entry entry : map.entrySet()) { System.out.println(' ' + entry.getKey() + ' ' + entry.getValue()); } } }
Çıktı:
Orijinal Sıralanmamış Harita:
Bir Amerika
C Çin
D Danimarka
X Hongkong
I Hindistan
Anahtara göre sıralanmış harita:
Bir Amerika
C Çin
D Danimarka
I Hindistan
X Hongkong
Yukarıdaki program anahtar olarak tek bir alfabe kodu ve değerler olarak ülke adlarından oluşan bir harita oluşturur. İlk olarak, sıralanmamış orijinal haritayı görüntülüyoruz. Ardından haritayı, anahtarları otomatik olarak sıralayan bir ağaç haritasına dönüştürüyoruz. Son olarak, sıralı ağaç haritasını tuşlar üzerinde görüntülüyoruz.
Değere Göre Sırala
Bir haritayı değerlere göre sıralamak için önce haritayı bir listeye dönüştürüyoruz. Ardından bu listeyi, değerleri karşılaştırmak ve belirli bir sıraya göre düzenlemek için bir karşılaştırıcı kullanan Collections.sort () yöntemini kullanarak sıralarız.
Liste sıralandıktan sonra, bağlantılı liste girişleri tekrar haritaya kopyalanır ve bu da bize sıralı haritayı verir.
Aşağıdaki Java programı, bir haritanın değere göre sıralanmasını göstermektedir. Program, sıralama işlevine aktarılan LinkedHashMap'i kullanır. Sıralama işlevinde, bağlantılı bir listeye dönüştürülür ve sıralanır. Sıraladıktan sonra LinkedHashMap'e geri dönüştürülür.
şirketlerde sorulan selenyum mülakat soruları
import java.util.*; public class Main { public static void main(String() args) { //define and initialize a map LinkedHashMap capitals_map = new LinkedHashMap(); capitals_map.put('NEP', 'Kathmandu'); capitals_map.put('IND', 'New Delhi'); capitals_map.put('USA', 'Washington'); capitals_map.put('UK', 'London'); capitals_map.put('AUS', 'Canberra'); //print original map System.out.println('Original unsorted map: '); System.out.println(capitals_map); //call sortMap method Map sorted_Map = sortMap(capitals_map); //print the sorted map System.out.println('
Map sorted on value : '); System.out.println(' Key Value '); for (Map.Entry entry : sorted_Map.entrySet()) { System.out.println(' ' + entry.getKey()+ ' ' + entry.getValue()); } } public static LinkedHashMap sortMap(LinkedHashMap linked_map) { //create a linkedlist from LinkedHashMap List capital_List = new LinkedList(linked_map.entrySet()); //sort the LinkedList Collections.sort(capital_List, (o1, o2) -> o1.getValue().compareTo(o2.getValue())); //Create LinkedHashMap from linkedlist and return it LinkedHashMap finalMap = new LinkedHashMap(); for (Map.Entry entry : capital_List) { finalMap.put(entry.getKey(), entry.getValue()); } return finalMap; } }
Çıktı:
Orijinal sıralanmamış harita:
{NEP = Katmandu, IND = Yeni Delhi, ABD = Washington, İngiltere = Londra, AUS = Canberra
Değere göre sıralanmış harita:
Anahtar Değer
Canberra'DAN
NEP Katmandu
İngiltere Londra
IND Yeni Delhi
ABD Washington
Java'da Eşzamanlı Harita
ConcurrentMap, java.util.map arayüzünden miras alınan bir arayüzdür. ConcurrentMap arabirimi ilk olarak JDK 1.5'te tanıtıldı ve eşzamanlı erişimi işleyen bir harita sağlar.
ConcurrentMap arayüzü java.util.concurrent paketinin bir parçasıdır.
Aşağıdaki Java programı concurrentMap'i Java'da göstermektedir.
import java.util.concurrent.*; class Main { public static void main(String() args) { //create and initialize concurrentHashMap ConcurrentHashMap m = new ConcurrentHashMap(); m.put(100, 'Red'); m.put(101, 'Green'); m.put(102, 'Blue'); System.out.println('
Initial Concurrent Map : ' + m); //add a key using putIfAbsent method; key=103 is absent so its added m.putIfAbsent(103, 'Purple'); System.out.println('
After adding absent key 103 : ' + m); m.remove(101, 'Green'); // remove key = 101 System.out.println('
Concurrent Map after removing 101:' + m); m.putIfAbsent(101, 'Brown'); // again add key = 101 since its absent System.out.println('
Add absent key 101:' + m); m.replace(101, 'Brown', 'Green'); // replace value for key = 101 with 'Green' System.out.println('
Replace value at key 101:' + m); } } import java.util.concurrent.*; class Main { public static void main(String() args) { //create and initialize concurrentHashMap ConcurrentHashMap m = new ConcurrentHashMap(); m.put(100, 'Red'); m.put(101, 'Green'); m.put(102, 'Blue'); System.out.println('
Initial Concurrent Map : ' + m); //add a key using putIfAbsent method; key=103 is absent so its added m.putIfAbsent(103, 'Purple'); System.out.println('
After adding absent key 103 : ' + m); m.remove(101, 'Green'); // remove key = 101 System.out.println('
Concurrent Map after removing 101:' + m); m.putIfAbsent(101, 'Brown'); // again add key = 101 since its absent System.out.println('
Add absent key 101:' + m); m.replace(101, 'Brown', 'Green'); // replace value for key = 101 with 'Green' System.out.println('
Replace value at key 101:' + m); } }
Çıktı:
İlk Eşzamanlı Harita: {100 = Kırmızı, 101 = Yeşil, 102 = Mavi}
Eksik anahtar 103 eklendikten sonra: {100 = Kırmızı, 101 = Yeşil, 102 = Mavi, 103 = Mor}
101'i kaldırdıktan sonra Eşzamanlı Harita: {100 = Kırmızı, 102 = Mavi, 103 = Mor}
Eksik 101 anahtarı ekleyin: {100 = Kırmızı, 101 = Kahverengi, 102 = Mavi, 103 = Mor}
101 anahtardaki değeri değiştirin: {100 = Kırmızı, 101 = Yeşil, 102 = Mavi, 103 = Mor}
Java'da Senkronize Harita
Senkronize bir harita, iş parçacığı açısından güvenli olan ve belirli bir harita tarafından desteklenen bir haritadır. Java'da Senkronize harita, java.util.Collections sınıfının senkronizedMap () yöntemi kullanılarak elde edilir. Bu yöntem, belirli bir harita için senkronize edilmiş bir harita döndürür.
Bu döndürülen senkronize harita, seri erişim sağlamak için arka haritaya erişmek için kullanılır.
SynizedMap () yönteminin genel bildirimi şöyledir:
public static Map synchronizedMap(Map m)
burada m => desteklenen haritadır.
Daha önce belirtildiği gibi, bu yöntem m haritasının senkronize görünümünü döndürür.
Aşağıdaki Java programı, senkronize edilmiş bir harita örneğidir.
import java.util.*; public class Main { public static void main(String() args) { //declare and initialize a map Map int_map = new HashMap(); int_map.put(1, 10); int_map.put(2, 20); int_map.put(3, 30); int_map.put(4, 40); int_map.put(5, 50); //print the map System.out.println('Original (backed) Map: ' + int_map); //obtain synchronized map Map sync_map = Collections.synchronizedMap(int_map); //remove an element from the map int_map.remove(3, 30); //print the altered map System.out.println('
Synchronized map after remove(3, 30):' + sync_map); } }
Çıktı:
Orijinal (yedeklenmiş) Harita: {1 = 10, 2 = 20, 3 = 30, 4 = 40, 5 = 50}
Kaldırıldıktan sonra senkronize edilmiş harita (3, 30): {1 = 10, 2 = 20, 4 = 40, 5 = 50}
Java'da Statik Harita
Java'da statik bir harita, statik bir değişken gibi statik olarak bildirilen bir haritadır. Statik bir harita bildirerek, nesneyi kullanmadan erişilebilir bir sınıf değişkeni haline gelir.
Java'da statik bir harita oluşturmak ve başlatmak için iki yaklaşım vardır.
# 1) Statik Değişken Kullanma
Burada, statik bir eşleme değişkeni oluşturuyoruz ve bunu bildirimle birlikte somutlaştırıyoruz.
Bu yaklaşım aşağıdaki Java programında gösterilmiştir.
import java.util.*; class Main { //declare a static map variable and initialize it with declaration private static final Map myMap = new HashMap(){ { put(1, 'India'); put(2, 'Portugal'); put(3, 'Germany'); } }; public static void main(String() args) { //print the map System.out.println('Static map using static map variable:'); System.out.println(myMap); } }
Çıktı:
Statik harita değişkeni kullanan statik harita:
{1 = Hindistan, 2 = Portekiz, 3 = Almanya}
# 2) Statik Blok Kullanma
Bunda statik bir harita değişkeni oluşturuyoruz. Daha sonra statik bir blok oluşturuyoruz ve bu statik bloğun içinde harita değişkenini başlatıyoruz.
Aşağıdaki program bunu göstermektedir.
import java.util.*; class Main { // Declare the static map private static Map map; // declare a static block and initialize static map static { map = new HashMap(); map.put(1, 'Red'); map.put(2, 'Green'); map.put(3, 'Blue'); } public static void main(String() args) { System.out.println('Static Map using static block:'); System.out.println(map); } }
Çıktı:
Statik blok kullanan Statik Harita:
{1 = Kırmızı, 2 = Yeşil, 3 = Mavi}
Listenin Haritaya Dönüştürülmesi
Bu bölümde, listeyi haritaya dönüştürme yöntemlerini tartışacağız.
İki yöntem şunları içerir:
Geleneksel yöntem
Geleneksel yöntemde, her liste öğesi her döngü için bir eşlemeye kopyalanır.
Bu uygulama aşağıda gösterilmiştir:
import java.util.*; public class Main { public static void main(String() args) { //declare and initialize a list List colorsList = new ArrayList(); colorsList.add('Red'); colorsList.add('Green'); colorsList.add('Blue'); colorsList.add('Brown'); colorsList.add('White'); System.out.println('The given list: ' + colorsList); //declare a map Map map = new HashMap(); //initial Id(key) int i=1; //assign each list element to the map for (String color : colorsList) { map.put(i, color); i++; } //print the map System.out.println('Map generated from List:' + map); } }
Çıktı:
Verilen liste: (Kırmızı, Yeşil, Mavi, Kahverengi, Beyaz)
Listeden oluşturulan harita: {1 = Kırmızı, 2 = Yeşil, 3 = Mavi, 4 = Kahverengi, 5 = Beyaz}
Java 8'de Harita Listesi
Ayrıca verilen listeyi haritaya dönüştürecek Java 8 metodunu Collectors.mapOf () kullanabiliriz.
Aşağıdaki program bunu göstermektedir.
import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.stream.Collectors; // class for list class Subject { //sub_id => map key private Integer sub_id; // sub_name => map value private String sub_name; // Subject constructor public Subject(Integer sub_id, String sub_name) { // initialize sub_id and sub_name this.sub_id = sub_id; this.sub_name = sub_name; } // return sub_id public Integer getSub_Id() { return sub_id; } // return sub_name public String getSub_Name() { return sub_name; } } public class Main { public static void main(String() args) { // create a list and add values to the list List sub_list = new ArrayList(); sub_list.add(new Subject(1, 'Abacus')); sub_list.add(new Subject(2, 'Maths')); sub_list.add(new Subject(3, 'Physics')); sub_list.add(new Subject(3, 'Chemistry')); //use Java 8 Collectors.toMap() method to create a map and assign list elements to it LinkedHashMap sub_map = sub_list.stream() .collect( Collectors.toMap(Subject::getSub_Id, Subject::getSub_Name,(x, y) -> x + ', ' + y, LinkedHashMap::new)); //print the map System.out.println('Map obtained from list : ' + sub_map); } }
Çıktı:
Listeden elde edilen harita: {1 = Abaküs, 2 = Matematik, 3 = Fizik, Kimya}
Bu programda, liste sınıfı olarak hareket eden bir Konu sınıfımız var. Konu sınıfının iki alanı vardır, yani sub_id ve sub_name. Sınıftan alan değerlerini okumak için yöntemlerimiz var. Ana işlevde, bu sınıfın nesnelerini oluşturuyoruz ve bir liste oluşturuyoruz.
Bu liste daha sonra öğeleri tek tek alan Collectors.MapOf yöntemi kullanılarak haritaya dönüştürülür. Ayrıca sub_Id'yi haritanın anahtarı olarak alır. Son olarak, anahtar olarak sub_Id ve değer olarak Alt_Adı olan harita oluşturulur.
Java'da Haritayı Dizeye Dönüştür
Bir harita koleksiyonu, iki yaklaşım kullanılarak bir dizeye dönüştürülebilir:
StringBuilder'ı kullanma
Burada bir StringBuilder nesnesi oluşturuyoruz ve ardından haritanın anahtar-değer çiftlerini StringBuilder nesnesine kopyalıyoruz. Ardından StringBuilder nesnesini bir dizeye dönüştürüyoruz.
sql vs nosql artıları ve eksileri
Aşağıdaki program haritayı dizgeye dönüştürmek için Java kodunu göstermektedir.
import java.util.*; import java.util.stream.Collectors; public class Main { public static void main(String() args) { //create and initialize a map Map numberNames = new HashMap(); numberNames.put(10, 'Ten'); numberNames.put(20, 'Twenty'); numberNames.put(30, 'Thirty'); numberNames.put(40, 'Forty'); //print the given map System.out.println('The given map: ' + numberNames); //create a StringBuilder object to store string StringBuilder map_String = new StringBuilder('{'); //append key-value pair of map to StringBuilder object for (Integer key : numberNames.keySet()) { map_String.append(key + '=' + numberNames.get(key) + ', '); } map_String.delete(map_String.length()-2, map_String.length()).append('}'); //print the string from StringBuilder System.out.println('
The string representation of map:'); System.out.println(map_String.toString()); } }
Çıktı:
Verilen harita: {20 = Yirmi, 40 = Kırk, 10 = On, 30 = Otuz}
Haritanın dize gösterimi:
{20 = Yirmi, 40 = Kırk, 10 = On, 30 = Otuz}
Java 8 Akışlarını Kullanma
Bu yöntemde, harita anahtarlarından bir akım oluşturup ardından dizgeye dönüştürüyoruz.
Aşağıda verilen program, haritanın akışları kullanarak bir dizgeye dönüştürülmesini göstermektedir.
import java.util.*; import java.util.stream.Collectors; public class Main{ public static void main(String() args) { //create and initialize a map Map numberNames = new HashMap(); numberNames.put(10, 'Ten'); numberNames.put(20, 'Twenty'); numberNames.put(30, 'Thirty'); numberNames.put(40, 'Forty'); //print the given map System.out.println('The given map: ' + numberNames); String map_String = numberNames.keySet().stream() .map(key -> key + '=' + numberNames.get(key)) .collect(Collectors.joining(', ', '{', '}')); //print the string System.out.println('
The string representation of map:'); System.out.println(map_String); } }
Çıktı:
Verilen harita: {20 = Yirmi, 40 = Kırk, 10 = On, 30 = Otuz}
Haritanın dize gösterimi:
{20 = Yirmi, 40 = Kırk, 10 = On, 30 = Otuz}
Haritayı Java'da Listeye Dönüştür
Bir harita, anahtarlardan ve değerlerden oluşurken, bir liste, ayrı ayrı öğeler dizisidir. Haritayı bir listeye dönüştürürken, genellikle anahtarları bir anahtarlar listesine ve değerleri bir değerler listesine dönüştürürüz.
Aşağıdaki Java programı bu dönüşümü göstermektedir.
import java.util.*; public class Main { public static void main(String() args) { //declare a map and initialize it Map color_map = new HashMap(); color_map.put(10, 'red'); color_map.put(20, 'green'); color_map.put(30, 'blue'); color_map.put(40, 'cyan'); color_map.put(50, 'magenta'); //print the list of keys using map.keySet() method System.out.println('List of keys from the given map:'); List key_list = new ArrayList(color_map.keySet()); System.out.println(key_list); //print the list of values using map.values() method System.out.println('
List of values from the given map:'); List val_list = new ArrayList(color_map.values()); System.out.println(val_list); } }
Çıktı:
Verilen haritadaki anahtarların listesi:
(50, 20, 40, 10, 30)
Verilen haritadaki değerlerin listesi:
(macenta, yeşil, camgöbeği, kırmızı, mavi)
Sözlük Vs. Java'da Harita
Java'da bir sözlük ile bir harita arasındaki temel farklardan bazılarını tartışalım.
Sözlük | Harita |
---|---|
Sözlük soyut bir sınıftır. | Harita bir arayüzdür. |
Sözlük sınıfı tarafından kullanılan sınıflar ve yöntemler, koleksiyon çerçevesinden önce gelir. | Harita sınıfları tarafından kullanılan sınıflar ve yöntemler, koleksiyon çerçevesinin parçasıdır. |
Bir sınıf sözlüğü genişletirse, Java yalnızca tek kalıtımı desteklediği için başka bir sınıfı genişletemez | Harita bir arayüzdür, bu nedenle bir sınıf haritadan ve diğer arayüzlerden miras alabilir. |
Eski uygulama. Java'nın yeni sürümlerinde neredeyse modası geçmiş. | Harita arayüzü sözlük uygulamasının yerini aldı. |
Sıkça Sorulan Sorular
S # 1) Java'da neden bir harita arayüzü kullanıyoruz?
Cevap: Harita, verileri anahtar-değer çiftleri olarak depolayan sınıflar tarafından uygulanan bir Java arabirimidir. Harita arayüzü, ekleme, güncelleme, silme vb. Gibi anahtar-değer çiftlerinde gerçekleştirilebilecek işlemler / yöntemler sağlar.
S # 2)MAP, Java'da ne anlama geliyor?
Cevap: Java'daki bir harita, belirli bir değere sahip bir anahtarın eşlemesini temsil eder. Bir Java haritası, bu anahtar / değer çiftlerini bir haritada depolar. Sadece haritadaki anahtarı kullanarak bir anahtarla ilişkili değeri arayabilir ve alabiliriz.
Koleksiyon arabiriminin parçası olmayan bir arabirim kullanılarak Java'da bir harita uygulanır. Ama harita bir koleksiyon.
S # 3)MAP nedir?
Cevap: Get (), get () yöntemine bağımsız değişken olarak sağlanan belirli bir anahtarla ilişkili değeri almak için kullanılan, Java'daki bir harita arabirimi tarafından sağlanan bir yöntemdir. Değer yoksa null döndürülür.
S # 4)Harita bir koleksiyon mu?
Cevap: Harita genel olarak bir koleksiyon olarak görülse de, bir Koleksiyon arayüzü uygulamaz. Ağaç haritası gibi bazı harita uygulamaları boş değerleri veya anahtarları desteklemez.
S # 5)Set ve map arasındaki fark nedir?
Cevap: Küme, yalnızca anahtarların bir koleksiyonudur, oysa harita, anahtar-değer çiftlerinin bir koleksiyonudur. Küme boş değerlere izin vermezken, bazı eşleme uygulamaları boş değerlere izin verir.
Set, yinelenen anahtarlara izin vermiyor. Harita, yinelenen değerlere izin verebilir ancak anahtarların benzersiz olması gerekir. Set genellikle benzersiz öğelerden oluşan bir koleksiyonu depolamak istediğimizde kullanılır. Harita, verileri anahtar-değer çiftleri biçiminde saklamamız gerektiğinde kullanılabilir.
Sonuç
Bu eğiticide, harita arayüzünün temellerini tartıştık. Java'daki harita arayüzüyle ilgili çeşitli yöntemleri ve diğer tüm ayrıntıları da gördük. Treemap, hashmap, vb.Dahil olmak üzere çeşitli harita arayüzleri uygulamalarının olduğunu öğrendik.
Gelecek eğitimlerimizde, bu harita uygulamasını daha ayrıntılı olarak tartışacağız.
=> Java'yı Sıfırdan Öğrenmek İçin Burayı Ziyaret Edin.
Önerilen Kaynaklar
- Java'da HashMap Nedir?
- TreeMap In Java - Java TreeMap Örnekleriyle Öğretici
- Java'da LinkedHashMap - LinkedHashMap Örneği ve Uygulaması
- Java'da Arabirimi Ayarlayın: Örneklerle Java Seti Eğitimi
- Yeni Başlayanlar İçin JAVA Eğitimi: 100+ Uygulamalı Java Video Eğitimi
- Java Yığın Eğitimi: Örneklerle Yığın Sınıfı Uygulaması
- Örneklerle Java Yansıtma Eğitimi
- Java'da Jagged Array - Örneklerle Eğitim