logo

Hashtable Java

The Hashtable klase ievieš hash tabulu, kas kartē atslēgas uz vērtībām. Jebkuru objektu, kas nav nulle, var izmantot kā atslēgu vai vērtību. Lai veiksmīgi saglabātu un izgūtu objektus no hashtable, objektiem, kas tiek izmantoti kā atslēgas, ir jāīsteno hashCode metode un vienādības metode.

mvc java

Klase java.util.Hashtable ir Java klase, kas nodrošina atslēgas vērtību datu struktūru, kas ir līdzīga kartes saskarnei. Tā bija daļa no sākotnējās Java Collections sistēmas un tika ieviesta Java 1.0.

Tomēr Hashtable klase kopš tā laika tiek uzskatīta par novecojušu, un tās lietošana parasti nav ieteicama. Tas ir tāpēc, ka tas tika izstrādāts pirms kolekciju ietvara ieviešanas un tajā nav ieviests Map interfeiss, kas apgrūtina tā lietošanu kopā ar citām ietvara daļām. Turklāt Hashtable klase ir sinhronizēta, kas var izraisīt lēnāku veiktspēju salīdzinājumā ar citām Map interfeisa implementācijām.



Parasti Hashtable klases vietā ieteicams izmantot Map saskarni vai kādu no tās implementācijām (piemēram, HashMap vai ConcurrentHashMap).

Šeit ir piemērs, kā izmantot klasi Hashtable:

Java




import> java.util.Enumeration;> import> java.util.Hashtable;> public> class> Main {> >public> static> void> main(String[] args) {> >Hashtable hashtable =>new> Hashtable();> >// Adding elements to the hashtable> >hashtable.put(>'A'>,>1>);> >hashtable.put(>'B'>,>2>);> >hashtable.put(>'C'>,>3>);> >// Getting values from the hashtable> >int> valueA = hashtable.get(>'A'>);> >System.out.println(>'Value of A: '> + valueA);> >// Removing elements from the hashtable> >hashtable.remove(>'B'>);> >// Enumerating the elements of the hashtable> >Enumeration keys = hashtable.keys();> >while> (keys.hasMoreElements()) {> >String key = keys.nextElement();> >System.out.println(>'Key: '> + key +>', Value: '> + hashtable.get(key));> >}> >}> }>

>

>

Izvade

Value of A: 1 Key: A, Value: 1 Key: C, Value: 3>

Noslēgumā jāsaka, ka, lai gan Hashtable klase joprojām pastāv Java un to joprojām var izmantot, parasti ir ieteicams tā vietā izmantot Map saskarni vai kādu no tās implementācijām.

Hashtable funkcijas

  • Tas ir līdzīgs HashMap, bet ir sinhronizēts.
  • Hashtable saglabā atslēgu/vērtību pāri jaucēj tabulā.
  • Programmā Hashtable mēs norādām objektu, kas tiek izmantots kā atslēga, un vērtību, ko vēlamies saistīt ar šo atslēgu. Pēc tam atslēga tiek sajaukta, un iegūtais jaucējkods tiek izmantots kā indekss, kurā vērtība tiek saglabāta tabulā.
  • Hashtable klases sākotnējā noklusējuma jauda ir 11, bet loadFactor ir 0,75.
  • HashMap nesniedz nekādu uzskaitījumu, savukārt Hashtable nodrošina nekļūdīgu uzskaitījumu.

Deklarācija:

public class Hashtable extends Dictionary implements Map, Cloneable, Serializable>

Tipa parametri:

  • K – šajā kartē uzturēto atslēgu veids
  • IN – kartēto vērtību veids

Hashtable hierarhija

Hashtable hierarhija

Hashtable darbarīki Serializējams , Klonējams , Karte saskarnes un paplašina Vārdnīca . Tiešās apakšklases ir Īpašības, UID noklusējumi .

Konstruktori:

Lai izveidotu Hashtable, mums tas ir jāimportē no java.util.Hashtable . Ir dažādi veidi, kā mēs varam izveidot Hashtable.

1. Hashtable(): Tādējādi tiek izveidota tukša hashtable ar noklusējuma ielādes koeficientu 0,75 un sākotnējā ietilpība ir 11.

Hashtable ht = new Hashtable();

Java




// Java program to demonstrate> // adding elements to Hashtable> import> java.io.*;> import> java.util.*;> class> AddElementsToHashtable {> >public> static> void> main(String args[])> >{> >// No need to mention the> >// Generic type twice> >Hashtable ht1 =>new> Hashtable();> >// Initialization of a Hashtable> >// using Generics> >Hashtable ht2> >=>new> Hashtable();> >// Inserting the Elements> >// using put() method> >ht1.put(>1>,>'one'>);> >ht1.put(>2>,>'two'>);> >ht1.put(>3>,>'three'>);> >ht2.put(>4>,>'four'>);> >ht2.put(>5>,>'five'>);> >ht2.put(>6>,>'six'>);> >// Print mappings to the console> >System.out.println(>'Mappings of ht1 : '> + ht1);> >System.out.println(>'Mappings of ht2 : '> + ht2);> >}> }>

>

>

Izvade

Mappings of ht1 : {3=three, 2=two, 1=one} Mappings of ht2 : {6=six, 5=five, 4=four}>

2. Hashtable (sākotnējā ietilpība): Tādējādi tiek izveidota jaukšanas tabula, kuras sākotnējais izmērs ir norādīts inicialCapacity, un noklusējuma slodzes koeficients ir 0,75.

Hashtable ht = new Hashtable(int sākotnējāCapacity);

Java




// Java program to demonstrate> // adding elements to Hashtable> import> java.io.*;> import> java.util.*;> class> AddElementsToHashtable {> >public> static> void> main(String args[])> >{> >// No need to mention the> >// Generic type twice> >Hashtable ht1 =>new> Hashtable(>4>);> >// Initialization of a Hashtable> >// using Generics> >Hashtable ht2> >=>new> Hashtable(>2>);> >// Inserting the Elements> >// using put() method> >ht1.put(>1>,>'one'>);> >ht1.put(>2>,>'two'>);> >ht1.put(>3>,>'three'>);> >ht2.put(>4>,>'four'>);> >ht2.put(>5>,>'five'>);> >ht2.put(>6>,>'six'>);> >// Print mappings to the console> >System.out.println(>'Mappings of ht1 : '> + ht1);> >System.out.println(>'Mappings of ht2 : '> + ht2);> >}> }>

>

>

Izvade

Mappings of ht1 : {3=three, 2=two, 1=one} Mappings of ht2 : {4=four, 6=six, 5=five}>

3. Hashtable (int lielums, peldošā aizpildījuma attiecība): Šī versija izveido jaukšanas tabulu, kuras sākotnējais izmērs ir norādīts pēc izmēra un aizpildījuma koeficienta, ko nosaka fillRatio. aizpildījuma koeficients: būtībā tas nosaka, cik pilna var būt jaukšanas tabula, pirms tā tiek palielināta, un tās vērtība ir no 0,0 līdz 1,0.

kali linux komandas

Hashtable ht = new Hashtable(int size, float fillRatio);

Java




// Java program to demonstrate> // adding elements to Hashtable> import> java.io.*;> import> java.util.*;> class> AddElementsToHashtable {> >public> static> void> main(String args[])> >{> >// No need to mention the> >// Generic type twice> >Hashtable ht1> >=>new> Hashtable(>4>,>0>.75f);> >// Initialization of a Hashtable> >// using Generics> >Hashtable ht2> >=>new> Hashtable(>3>,>0>.5f);> >// Inserting the Elements> >// using put() method> >ht1.put(>1>,>'one'>);> >ht1.put(>2>,>'two'>);> >ht1.put(>3>,>'three'>);> >ht2.put(>4>,>'four'>);> >ht2.put(>5>,>'five'>);> >ht2.put(>6>,>'six'>);> >// Print mappings to the console> >System.out.println(>'Mappings of ht1 : '> + ht1);> >System.out.println(>'Mappings of ht2 : '> + ht2);> >}> }>

>

>

Izvade

Mappings of ht1 : {3=three, 2=two, 1=one} Mappings of ht2 : {6=six, 5=five, 4=four}>

4. Hashtable (karte m): Tādējādi tiek izveidota jaukšanas tabula, kas tiek inicializēta ar elementiem m.

Hashtable ht = new Hashtable(Karte m);

Java




// Java program to demonstrate> // adding elements to Hashtable> import> java.io.*;> import> java.util.*;> class> AddElementsToHashtable {> >public> static> void> main(String args[])> >{> >// No need to mention the> >// Generic type twice> >Map hm =>new> HashMap();> >// Inserting the Elements> >// using put() method> >hm.put(>1>,>'one'>);> >hm.put(>2>,>'two'>);> >hm.put(>3>,>'three'>);> >// Initialization of a Hashtable> >// using Generics> >Hashtable ht2> >=>new> Hashtable(hm);> >// Print mappings to the console> >System.out.println(>'Mappings of ht2 : '> + ht2);> >}> }>

>

>

Izvade

Mappings of ht2 : {3=three, 2=two, 1=one}>

Piemērs:

Java




// Java program to illustrate> // Java.util.Hashtable> import> java.util.*;> public> class> GFG {> >public> static> void> main(String[] args)> >{> >// Create an empty Hashtable> >Hashtable ht =>new> Hashtable();> >// Add elements to the hashtable> >ht.put(>'vishal'>,>10>);> >ht.put(>'sachin'>,>30>);> >ht.put(>'vaibhav'>,>20>);> >// Print size and content> >System.out.println(>'Size of map is:- '> + ht.size());> >System.out.println(ht);> >// Check if a key is present and if> >// present, print value> >if> (ht.containsKey(>'vishal'>)) {> >Integer a = ht.get(>'vishal'>);> >System.out.println(>'value for key'> >+>' 'vishal' is:- '> + a);> >}> >}> }>

>

>

Izvade

Size of map is:- 3 {vaibhav=20, vishal=10, sachin=30} value for key 'vishal' is:- 10>

Dažādu darbību veikšana vietnē Hashtable

1. Elementu pievienošana: Lai pievienotu elementu hashtable, mēs varam izmantot metodi put(). Tomēr ievietošanas secība jaucējtabulā netiek saglabāta. Iekšēji katram elementam tiek ģenerēts atsevišķs jaucējkods, un elementi tiek indeksēti, pamatojoties uz šo jaucējkodu, lai padarītu to efektīvāku.

Java




// Java program to demonstrate> // adding elements to Hashtable> import> java.io.*;> import> java.util.*;> class> AddElementsToHashtable {> >public> static> void> main(String args[])> >{> >// No need to mention the> >// Generic type twice> >Hashtable ht1 =>new> Hashtable();> >// Initialization of a Hashtable> >// using Generics> >Hashtable ht2> >=>new> Hashtable();> >// Inserting the Elements> >// using put() method> >ht1.put(>1>,>'Geeks'>);> >ht1.put(>2>,>'For'>);> >ht1.put(>3>,>'Geeks'>);> >ht2.put(>1>,>'Geeks'>);> >ht2.put(>2>,>'For'>);> >ht2.put(>3>,>'Geeks'>);> > >// Print mappings to the console> >System.out.println(>'Mappings of ht1 : '> + ht1);> >System.out.println(>'Mappings of ht2 : '> + ht2);> >}> }>

java sarakstu uz masīvu
>

>

Izvade

Mappings of ht1 : {3=Geeks, 2=For, 1=Geeks} Mappings of ht2 : {3=Geeks, 2=For, 1=Geeks}>

2. Elementu maiņa: Pēc elementu pievienošanas, ja vēlamies elementu mainīt, to var izdarīt, vēlreiz pievienojot elementu ar metodi put(). Tā kā jaucējtabulas elementi tiek indeksēti, izmantojot taustiņus, atslēgas vērtību var mainīt, vienkārši ievietojot atjaunināto vērtību atslēgai, kuru mēs vēlamies mainīt.

Java




// Java program to demonstrate> // updating Hashtable> import> java.io.*;> import> java.util.*;> class> UpdatesOnHashtable {> >public> static> void> main(String args[])> >{> >// Initialization of a Hashtable> >Hashtable ht> >=>new> Hashtable();> >// Inserting the Elements> >// using put method> >ht.put(>1>,>'Geeks'>);> >ht.put(>2>,>'Geeks'>);> >ht.put(>3>,>'Geeks'>);> > >// print initial map to the console> >System.out.println(>'Initial Map '> + ht);> > >// Update the value at key 2> >ht.put(>2>,>'For'>);> > >// print the updated map> >System.out.println(>'Updated Map '> + ht);> >}> }>

>

>

Izvade

Initial Map {3=Geeks, 2=Geeks, 1=Geeks} Updated Map {3=Geeks, 2=For, 1=Geeks}>

3. Elementa noņemšana: Lai noņemtu elementu no kartes, mēs varam izmantot metodi remove(). Šī metode ņem atslēgas vērtību un no šīs kartes noņem atslēgas kartējumu, ja tā ir kartē.

Java




// Java program to demonstrate> // the removing mappings from Hashtable> import> java.io.*;> import> java.util.*;> class> RemovingMappingsFromHashtable {> >public> static> void> main(String args[])> >{> >// Initialization of a Hashtable> >Map ht> >=>new> Hashtable();> >// Inserting the Elements> >// using put method> >ht.put(>1>,>'Geeks'>);> >ht.put(>2>,>'For'>);> >ht.put(>3>,>'Geeks'>);> >ht.put(>4>,>'For'>);> >// Initial HashMap> >System.out.println(>'Initial map : '> + ht);> >// Remove the map entry with key 4> >ht.remove(>4>);> >// Final Hashtable> >System.out.println(>'Updated map : '> + ht);> >}> }>

>

>

Izvade

Initial map : {4=For, 3=Geeks, 2=For, 1=Geeks} Updated map : {3=Geeks, 2=For, 1=Geeks}>

4. Hashtable šķērsošana: Lai atkārtotu tabulu, mēs varam izmantot an uzlabots cilpai . Tālāk ir sniegts hashtable atkārtošanas piemērs.

Java




// Java program to illustrate> // traversal of Hashtable> import> java.util.Hashtable;> import> java.util.Map;> public> class> IteratingHashtable {> >public> static> void> main(String[] args)> >{> >// Create an instance of Hashtable> >Hashtable ht =>new> Hashtable();> >// Adding elements using put method> >ht.put(>'vishal'>,>10>);> >ht.put(>'sachin'>,>30>);> >ht.put(>'vaibhav'>,>20>);> > >// Iterating using enhanced for loop> >for> (Map.Entry e : ht.entrySet())> >System.out.println(e.getKey() +>' '> >+ e.getValue());> >}> }>

>

>

Izvade

vaibhav 20 vishal 10 sachin 30>

Hashtable iekšējā darbība

Hashtable datu struktūra ir segmentu masīvs, kurā tiek glabāti atslēgas/vērtības pāri. Tas izmanto hashCode() metode lai noteiktu, kurš segments atslēgas/vērtības pārim ir jāatkārto.
Jaucējfunkcija palīdz noteikt konkrētās atslēgas atrašanās vietu spaiņu sarakstā. Parasti jaucējkods ir nenegatīvs vesels skaitlis, kas ir vienāds ar vienādiem objektiem un var būt vai nebūt vienāds nevienādiem objektiem. Lai noteiktu, vai divi objekti ir vienādi vai nē, hashtable izmanto vienāds() metodi.

atzīme ar attēliem

Iespējams, ka diviem nevienlīdzīgiem objektiem ir vienāds jaucējkods. To sauc par a sadursme . Lai atrisinātu sadursmes, hashtable izmanto sarakstu masīvu. Pāri, kas kartēti uz vienu segmentu (masīva indekss), tiek saglabāti sarakstā, un saraksta atsauce tiek saglabāta masīva indeksā.

Hashtable sadursme

Hashtable metodes

  • K – taustiņu veids kartē.
  • IN – kartē kartēto vērtību veids.

METODE

APRAKSTS

skaidrs () Notīra šo hashtable, lai tajā nebūtu atslēgu.
klons () Izveido seklu šīs hashtable kopiju.

aprēķina (K taustiņš, BiFunction

K,? super V,? paplašina V> remappingFunction)

Mēģina aprēķināt kartējumu norādītajai atslēgai un tās pašreizējai kartētajai vērtībai (vai nullei, ja pašreizējā kartējuma nav).

computeIfAbsent(K taustiņš, funkcija

paplašina V> kartēšanas funkciju)

Ja norādītā atslēga vēl nav saistīta ar vērtību (vai ir kartēta uz nulli), mēģina aprēķināt tās vērtību, izmantojot doto kartēšanas funkciju, un ievada to šajā kartē, ja vien nav nulles.
computeIfPresent (taustiņš K, BiFunction remappingFunction) Ja norādītās atslēgas vērtība ir un nav nulle, mēģina aprēķināt jaunu kartējumu, ņemot vērā atslēgu un tās pašreizējo kartēto vērtību.
satur (objekta vērtība) Pārbauda, ​​vai dažas atslēgas atbilst norādītajai vērtībai šajā hashtabulā.
includeKey (objekta atslēga) Pārbauda, ​​vai norādītais objekts ir atslēga šajā hashtabulā.
includeValue (objekta vērtība) Atgriež vērtību True, ja šī hashtable kartē vienu vai vairākas atslēgas ar šo vērtību.
elementi () Atgriež vērtību uzskaitījumu šajā hashtabulā.
ierakstsSet() Atgriež šajā kartē ietverto kartējumu kopas skatu.
vienāds (Objekts o) Salīdzina norādīto objektu ar šo karti, lai nodrošinātu vienlīdzību saskaņā ar definīciju kartes saskarnē.
iegūt (objekta atslēga) Atgriež vērtību, kurai norādītā atslēga ir kartēta, vai nulli, ja šajā kartē nav atslēgas kartējuma.
hashCode() Atgriež šīs kartes jaucējkoda vērtību saskaņā ar definīciju kartes saskarnē.
ir tukšs() Pārbauda, ​​vai šajā hashtable nav nevienas vērtības atslēgas.
atslēgas () Atgriež šīs atsauces tabulas atslēgu uzskaitījumu.
keySet() Atgriež šajā kartē ietverto taustiņu kopas skatu.
sapludināšana (atslēga K, V vērtība, BiFunction remappingFunction) Ja norādītā atslēga vēl nav saistīta ar vērtību vai ir saistīta ar nulli, saista to ar norādīto vērtību, kas nav nulle.
likt (taustiņš K, V vērtība) Kartē norādīto atslēgu ar norādīto vērtību šajā hashtabulā.
ievietot visu (karte t) Kopē visus kartējumus no norādītās kartes uz šo jaucējtabulu.
rehash () Palielina šīs hashtable kapacitāti un iekšēji reorganizē, lai efektīvāk pielāgotu tās ierakstus un piekļūtu tiem.
noņemt (objekta atslēga) Noņem atslēgu (un tai atbilstošo vērtību) no šīs hashtable.
Izmērs() Atgriež atslēgu skaitu šajā hashtabulā.
toString() Atgriež šī Hashtable objekta virknes attēlojumu ierakstu kopas veidā, kas ir ietverts iekavās un atdalīts ar ASCII rakstzīmēm , (komats un atstarpe).
vērtības () Atgriež šajā kartē ietverto vērtību kolekcijas skatu.

Interfeisā java.util.Map deklarētās metodes

METODE

APRAKSTS

forEach (divu patērētāju darbība) Veic norādīto darbību katram ierakstam šajā kartē, līdz visi ieraksti ir apstrādāti vai darbība rada izņēmumu.
getOrDefault (objekta atslēga, V noklusējuma vērtība) Atgriež vērtību, ar kuru norādītā atslēga ir kartēta, vai noklusējuma vērtību, ja šajā kartē nav atslēgas kartējuma.
putIfAbsent (atslēga K, V vērtība) Ja norādītā atslēga vēl nav saistīta ar vērtību (vai ir saistīta ar nulli), saista to ar doto vērtību un atgriež nulli, pretējā gadījumā atgriež pašreizējo vērtību.

noņemt (objekta atslēga,

Objekta vērtība)

Noņem norādītās atslēgas ierakstu tikai tad, ja tas pašlaik ir kartēts ar norādīto vērtību.
aizstāt (taustiņš K, V vērtība) Aizstāj norādītās atslēgas ierakstu tikai tad, ja tā pašlaik ir saistīta ar kādu vērtību.
aizstāt (atslēga K, V oldValue, V newValue) Aizstāj norādītās atslēgas ierakstu tikai tad, ja pašlaik tas ir kartēts ar norādīto vērtību.
aizstāt visu (BiFunction funkcija) Aizstāj katra ieraksta vērtību ar attiecīgā ieraksta norādītās funkcijas izsaukšanas rezultātu, līdz visi ieraksti ir apstrādāti vai funkcija rada izņēmumu.

Vajag izlasīt:

  • Atšķirības starp HashMap un HashTable Java

Hashtable priekšrocības:

  1. Pavedieniem droša: klase Hashtable ir droša pret pavedieniem, kas nozīmē, ka tai vienlaikus var piekļūt vairāki pavedieni, neizraisot datu bojājumus vai citas sinhronizācijas problēmas.
  2. Vienkārša lietošana: Hashtable klase ir vienkārši lietojama, un tā nodrošina pamata atslēgas vērtību datu struktūras funkcionalitāti, kas var būt noderīga vienkāršos gadījumos.

Hashtable trūkumi:

  1. Novecojusi: klase Hashtable tiek uzskatīta par novecojušu, un tās lietošana parasti nav ieteicama. Tas ir tāpēc, ka tas tika izstrādāts pirms kolekciju ietvara ieviešanas un tajā nav ieviests Map interfeiss, kas apgrūtina tā lietošanu kopā ar citām ietvara daļām.
  2. Ierobežota funkcionalitāte: klase Hashtable nodrošina pamata atslēgas vērtību datu struktūras funkcionalitāti, taču nenodrošina visu funkcionalitātes klāstu, kas ir pieejams kartes saskarnē un tā implementācijās.
  3. Slikta veiktspēja: Hashtable klase ir sinhronizēta, kā rezultātā var būt lēnāka veiktspēja salīdzinājumā ar citām Map saskarnes implementācijām, piemēram, HashMap vai ConcurrentHashMap.

Uzziņu grāmatas:

  1. Morisa Naftalina un Filipa Veidlera Java kolekcijas. Šajā grāmatā ir sniegts visaptverošs pārskats par Java Collections sistēmu, tostarp par Hashtable klasi.
  2. Deivids Flanagans Java īsumā. Šajā grāmatā ir sniegta ātra uzziņa par Java galvenajām funkcijām, tostarp Hashtable klasi.
  3. Morisa Naftalina un Filipa Veidlera Java vispārīgie materiāli un kolekcijas. Šajā grāmatā ir sniegts visaptverošs ceļvedis par ģenēriskām zālēm un kolekcijām Java, tostarp Hashtable klasē.

Atsauce: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Hashtable.html