implementera Parklass i Java

i det här inlägget kommer vi att se hur vi implementerar vår egen Parklass i Java.

ett par är en behållare för att lagra en tupel av två objekt. JDK tillhandahåller ingen implementering av Parklassen. Det kan bero på att Parklassen inte anger förhållandet mellan de angivna värdena. Låt oss ta ett exempel på std::pair i C++, där dess första och andra fält kan vara vad som helst. C++ anger inte vad dataparklassen lagrar. I Java är Map.Entry ett utmärkt exempel som har ett meningsfullt namn som representerar ett nyckelvärdespar.

trots att det inte finns någon meningsfull relation mellan data som lagras i paret saknar programmerare ofta denna funktion i Java. Det finns lösningar, som diskuteras här i detalj, för att fylla gapet. Men skulle det inte vara bra att implementera vår egen Parklass i Java som vi kan anpassa till vår stil.

Well skriva ett par klass är faktiskt mycket enkel i Java. Nedan följer enkel anpassad implementering av Parklass i Java som har

  1. två offentliga fält – first och second, precis som i C++.
  2. en privat konstruktör.
  3. en statisk fabriksmetod of() för att skapa en oföränderlig, typad Pair instans (som internt kallar den privata konstruktören).
  4. åsidosätta hashCode() och equals() metoder för att säkerställa önskat beteende i hash-baserade samlingar.
  5. åsidosatt toString() metod för att enkelt skriva ut objektet Pair.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78

importera java.util.ArrayList;
importera java.util.HashSet;
importera java.util.Lista;
importera java.util.Set;
/ / par klass
klass Par< U, V>
{
public final u first; // första fältet i ett par
public final v second; // andra fältet i ett par
/ / konstruerar ett nytt par med angivna värden
privat par (U first, V second)
{
det här.första = första;
detta.andra = andra;
}
@Åsidosätt
/ / kontroller specificerat objekt är ”lika med” aktuellt objekt eller inte
offentliga booleska är lika med (objekt o)
{
om (detta == o)
returnera sant;
om (o == null || getClass ()!= o. getClass())
returnera falskt;
par<?, ?> par = (par<?, ?>) o;
/ / call är lika med () metod för de underliggande objekten
om (!första.lika (par.först))
returnera falskt;
returnera andra.lika (par.andra);
}
@Åsidosätt
/ / beräknar hashkod för ett objekt för att stödja hashtabeller
Offentlig int hashkod()
{
// använd hashkoder för de underliggande objekten
retur 31 * först.hashCode () + andra.hashCode();
}
@Åsidosätt
Offentlig sträng toString()
{
return ” (”+första+”, ” + andra+”)”;
}
// Fabriksmetod för att skapa en typad par oföränderlig instans
offentlig statisk <U, V> par <U, V> av (U a, V b)
{
// samtal privat konstruktör
returnera nytt par<>(a, b);
}
}
// Program för att implementera Pair Class i Java
class Main
{
allmänna statisk void main (String args)
{
par< sträng, heltal> p1 = par.av (”John”, 26);
par< sträng, heltal> p2 = par.av (”Tom”, 30);
par< sträng, heltal> p3 = par.av (”John”, 26);
lista< par< sträng, heltal>> par = ny ArrayList<>();
par.Lägg till (p1);
par.Lägg till (p2);
par.Lägg till (p3);
systemet.ut.println (par);
Set<par<sträng, heltal>>distinctPairs = ny HashSet<> (par);
systemet.ut.println (distinctPairs);
}
}

ladda ner kör kod

utgång:

Lämna ett svar

Din e-postadress kommer inte publiceras.