javada necə bir lüğət etmək olar


cavab 1:

Lüğət əsas dəyər əlaqəsini təmsil edən bir xəritəyə bənzər bir mücərrəd sinifdir. Həm açarlar, həm də dəyərlər hər hansı bir obyekt ola bilər, lakin boş deyil. Bir lüğətə bir boş düymə və ya boş bir dəyər daxil etmək cəhdi NullPointerException istisnasına səbəb olur. Buna görə həm düymələr, həm də dəyərlər üçün null olmayan bir dəyər vermək məcburidir. Dərslər ümumi tipdir. Hər hansı bir əməliyyatı yerinə yetirmək üçün lüğət daha sürətli olur, çünki boks / boks yoxdur (valetiplər boksa ehtiyac duymur) .Dacaqların təhlükəsizliyi yoxdur. , ip təhlükəsizliyinə ehtiyacınız varsa, öz sinxronizasiyanı həyata keçirməlisiniz.

Sadə Misal:

ictimai sinif LüğətAllMethods2 { ictimai statik boşluq əsas (String [] args) { // Bir lüğətə başlamaq Lüğət d = yeni Hashtable (); // qoymaq () metodu d.put ("1", "Java"); d.put ("2", "Proqramlaşdırma"); d.put ("3", "Dil"); // elementlər () metodu: Enumasiya v = d.elements (); isə (v.hasMoreElements ()) { System.out.println ("Lüğətdəki dəyər:" + v.nextElement ()); } }}

Nəticə:

Lüğətdəki dəyər: DilLüğətdəki dəyər: ProqramlaşdırmaLüğətdəki dəyər: Java

Lüğətdəki metodlar:

Metod Təsviri
V put (K düyməsi, V dəyəri): lüğətə açar dəyər cütü əlavə edir.
Enumeration elementləri (): lüğətdəki dəyər təmsilçiliyini qaytarır.
V get (Obyekt açarı): lüğətdə mübahisəli açarla müqayisə olunan dəyəri qaytarır.
boolean isEmpty (): lüğətin boş olub olmadığını yoxlayır.
Enumeration düymələri (): lüğətdəki açar nümayəndəliyi qaytarır.
V aradan qaldırılması (Obyekt açarı): mübahisəli açarla müqayisə edilmiş açar dəyəri cütlüyünü çıxarır.
int ölçüsü (): yoxunu qaytarır. Lüğətdəki əsas dəyər cütlüklərinin.

Misal:

ictimai sinif lüğətMetodlarDemo { ictimai statik boşluq əsas (String [] args) { // Bir lüğətə başlamaq Lüğət d = yeni Hashtable (); // qoymaq () metodu d.put ("1", "Java"); d.put ("2", "Proqramlaşdırma"); d.put ("3", "Dil"); // elementlər () metodu: Enumasiya v = d.elements (); isə (v.hasMoreElements ()) { System.out.println ("Lüğətdəki dəyər:" + v.nextElement ()); } // ölçüsü () metodu System.out.println ("\ nSözlük Sözü:" + d.size ()); // get () metodu: System.out.println ("Düymədə olan dəyər = 2:" + d.get ("2")); // isEmpty () metodu: System.out.println ("\ nAşağıdakı dəyər cütü yoxdur:" + d.isEmpty () + "\ n"); // düymələr () metodu: Enumasiya k = d.keys (); isə (k.hasMoreEends ()) { System.out.println ("Lüğətdəki açarlar:" + k.nextElement ()); } // qaldır () metodu: Sistem.out.println ("\ n Silmək:" + d.remove ("1")); System.out.println ("Silinmiş açarın dəyərini yoxlayın:" + d.get ("1")); // qaldır () metodu: d.remove ("2"); d.remove ("3"); // isEmpty () metodu: System.out.println ("\ nAşağıdakı dəyər cütü yoxdur:" + d.isEmpty () + "\ n"); }}

Nəticə:

Lüğətdəki dəyər: DilLüğətdəki dəyər: ProqramlaşdırmaLüğətdəki dəyər: JavaLüğətin ölçüsü: 3Açar dəyəri = 2: ProqramlaşdırmaAçar dəyər cütü yoxdur: saxtaLüğətdəki açarlar: 3Lüğətdəki açarlar: 2Lüğətdəki açarlar: 1Sil: JavaÇıxarılan açarın dəyərini yoxlayın: nullAçar dəyər cütü yoxdur: doğrudur

cavab 2:

Bir lüğət, dəyərlərin açarlarını göstərən bir mücərrəd sinifdir. Hər düymə unikal bir dəyər ilə əlaqələndirilir və açar unikaldır. Nol olmayan hər hansı bir obyekt ya açar, ya da bir dəyər üçün istifadə edilə bilər. Bir lüğətə bir boş düymə və ya boş bir dəyər daxil etmək cəhdi NullPointerException ilə nəticələnəcəkdir.

Ancaq orijinal Lüğət sinfi köhnəlmişdir və bunun əvəzinə bütün yeni tətbiqlər Mapinterface tətbiq etməlidir. Xəritə interfeysi tam eyni semantikadan istifadə edərək bir lüğətin işləməsini təmin edir. Bir xəritə xəritənin məzmununa düymələr dəsti, dəyərlər toplusu və ya əsas dəyər xəritələri dəsti kimi baxmağa imkan verən üç mənzərə təqdim edə bilər. Nəhayət, Map interfeysinin bəzi tətbiqləri dəyərləri arasında bir qayda saxlayır.

Xəritə interfeysi

Bir xəritə forma xəritəsi var harada:

  • K: bu xəritədə saxlanılan düymələrin növünü göstərir.
  • V: xəritələnmiş dəyərlərin növünü müəyyənləşdirir.

Bundan əlavə, Xəritə interfeysi həyata keçirilməli olan bir sıra metod təqdim edir. Bu bölmədə xəritənin ən fundamental metodlarından bəzilərini təqdim edəcəyik:

  • includeKey: Xəritədə tələb olunan açar varsa gerçək qayıdır.
  • daxildirValue: Xəritədə tələb olunan dəyəri varsa gerçək qayıdır.
  • get: tələb olunan açarın dəyərini almaq.
  • keySet: Xəritənin bütün düymələrini ehtiva edən bir dəsti qaytarır.
  • qoymaq: Xəritədə tələb olunan açar dəyər cütlüyünü əlavə edir.

Xəritə interfeysi HashMap, Hashtable və LinkedHashMap kimi müxtəlif Java sinifləri tərəfindən həyata keçirilir. Bu siniflər bir lüğətin tam işləməsini təmin edə bilirlər. Bununla birlikdə, bu siniflər aşağıda göstərildiyi kimi bəzi əsas cəhətlərdən fərqlənir:

HashTable - HashMap

Hashtable sinif hash cədvəlini həyata keçirir və dəyərlərin düymələrini xəritələndirir. A HashMap xəritə interfeysinə əsaslanan tətbiqetmədir. Onların hər ikisi iki əsas parametrdən ibarətdir: ilkin tutum və performans. Tutum hash cədvəlindəki çömçə sayı kimi müəyyən edilir, yük faktoru avtomatik olaraq artırılmadan əvvəl hash masasının çata biləcəyi maksimum dəyəri göstərən bir ölçüdür.

Bir lüğət olaraq HashMap istifadə edən bir nümunə aşağıda göstərilmişdir. Xəritəmizin növünü Hashtable-a dəyişsək, proqram da düzgün şəkildə yerinə yetirilə bilər:

idxal java.io.BufferedReader;

idxal java.io.File;

idxal java.io.FileReader;

idxal java.io.IOException;

idxal java.util.HashMap;

idxal java.util.Hashtable;

idxal java.util.Map;

ictimai sinif CountWords_v1 {

ictimai statik boşluq əsas (String [] args) IOException {atır

BufferedReader oxucu = yeni BufferedReader (yeni FileReader (yeni Fayl ("input.txt")));

String inputLine = null;

Xəritə lüğəti = yeni HashMap ();

// Xəritə lüğəti = yeni Hashtable ();

while ((inputLine = oxucu.readLine ())! = null) {

// Giriş xəttini bölün.

Sətir [] sözlər = inputLine.split ("\\ s +");

// Boş sətirlərə əhəmiyyət verməyin.

əgər (inputLine. bərabərliklər (""))

davam etmək;

for (simli söz: sözlər) {

// İstənilən vergül və nöqtəni silmək.

word = word.replace (".", "");

word = word.replace (",", "");

əgər (lüğət.containsKey (söz)) {

Tam val = lüğət.get (söz);

lüğət.put (söz, val + 1);

}

başqa

lüğət.put (söz, 1);

}

}

// Xəritədə saxlanan bütün sözləri çap etmək.

üçün (Sətir açarı: lüğət.keySet ())

System.out.println (düymə + ":" + lüğət.get (düymə));

oxucu.close ();

}

}

Bu nümunədə bir faylın sözlərini saxlamaq üçün HashMap istifadə etdik və hər bir sözü həmin sənəddə neçə dəfə göründük.

Nümunə bir icra aşağıda göstərilir:

n bu nümunədə bir faylın sözlərini saxlamaq üçün HashMap istifadə etdik və hər bir sözü həmin sənəddə neçə dəfə göründük.

Nümunə bir icra aşağıda göstərilir:

: 2Geeks: 1HashMaps: 1edir: 2mətn: 1a: 1Həmçinin: 1Hashtables: 1dən: 1BağlıHash Xəritələri: 1: 2yəni: 1Xəritələr: 1istifadə: 1Kod: 1Bu: 1Java: 2və: 1salam: 1ki: 1indiki: 1of: 2güc: 2hamı: 1nümunə: 1

cavab 3:

Həqiqi bir lüğətə ehtiyacınız varsa bu yolu edərdim:

  1. 'Tərtibçi' sinifini yaradın. Bəzi mənbələrdən (mətn faylı, JDBC və s.) Bütün sözləri -> təsviri / tərcümə cütlərini oxuyacaq və bu dəyərləri özündə cəmləşdirən sinifləri yaradır və sonra həmin instansiyalı sinifləri Siyah <> -a əlavə edir. Sonra bu siyahını <> Collections.sort () ilə sırala. Sonra onu ObjectOutputStream sinfi və writeObject () metodu ilə bəzi ikili fayllara çıxarın.
  2. Bu lüğətin həqiqi istehlakçısını yaradın. Başlanğıcda ObjectInputStream-dən readObject () oxuyacaq və sonra Collections.binarySearch () istifadə edərək List <> -də hər hansı bir söz tapa bilərsiniz. Mən Map-ı istifadə etməzdim, çünki Map-də yalnız _whole_ sözünü tapa bilərəm. sözün bir hissəsi ilə də axtarış edə bilərsiniz.

cavab 4:

Java-da bir lüğət məlumat quruluşu yaratmaq üçün, tətbiq edən hər hansı bir sinifdən istifadə edin

Xəritə

kimi interfeys

HashMap

,

Ağac xəritəsi

və ya

EnumMap

bir neçə ad vermək. Məsələn, deyək ki, bir kitabdakı hadisələrin sayına uyğun bir lüğət xəritələşdirmə sözləri yaratmaq istəyirsən:

Xəritə sözlər = yeni HashMap ();words.put ("atlama", 7);sözlər.put ("köpək", 5);words.put ("şanslı", 21);

cavab 5: