A tuple je podatkovna struktura, ki lahko vsebuje objekte različnih vrst. Ti predmeti niso med seboj povezani, vendar imajo pomen, če jih obravnavamo skupaj. V tem razdelku razpravljamo kaj je tuple , značilnosti, velikost, in operacije tork. Razpravljali bomo tudi o implementacija tuple v Javi .
Kaj je tuple?
Na splošno, a tuple je urejena zbirka predmetov. Podatki v tuple so shranjeni kot objekt v ločenem nizu bajtov. Vsebuje vrednosti, ločene z vejicami, v oglatih oklepajih []. Tuples so nespremenljiv, za razliko od podatkovne strukture Lists. Tuple lahko vsebuje več tuples. Lahko se šteje tudi za anonimen objekt.
Značilnosti Tuple
Tuple ima naslednje lastnosti:
- je typesafe, iterable, immutable, in serializable .
- Izvaja toString(), enako(), in hashCode()
- Izvaja tudi Primerljivo (Tuple izvaja primerljivo)
Tuple Primer
Poglejmo naslednji primer.
['Sophia', 'Female', 22, 'Marketing Manager']
Zgornja torka je a kvartet tuple, ker ima štiri elementi (predmeti). Opažamo, da je vsak predmet drugačne vrste. Toda ko ga obravnavamo skupaj, ima poseben pomen. Zgornja zbirka predstavlja podatke o zaposlenem, kot so ime, spol, starost in naziv.
Oglejmo si še nekaj drugih primerov tulp.
['Java', 'Object-oriented', 14] ['John', 'Wick' 21, 'USA', false, '[email protected]'] [3, 'Samsung', 'Galaxy S2', 37000.00]
Tuple v Javi
V Javi je tuple generična podatkovna struktura, ki vsak element obravnava kot objekt, ti objekti pa so shranjeni v ločenem nizu bajtov. Z drugimi besedami, lahko tudi rečemo, da je tuple an naročeno zbirka predmetov različnih vrst.
Funkcionalnost tuple je mogoče implementirati s podatkovno strukturo List in Array, vendar te podatkovne strukture po zasnovi ne vsebujejo različnih vrst podatkovnih vrst. Zato je jasno, da heterogena tuple z uporabo standardne podatkovne strukture (seznam/matrika) v Javi ni mogoč. Ker smo zahtevali tuple podatkovno strukturo za izpolnjevanje zahteve po hrambi homogena struktura podatkov.
Upoštevajte to podatkovna struktura tuple ni prisotna v programiranju Java , privzeto. Lahko pa implementiramo podatkovno strukturo tuple z uporabo knjižnice tretje osebe z imenom javatuples .
Preden preidemo na izvedbo, bomo najprej prenesli javatuples.jar mapa. In dodajte to datoteko na pot projekta.
Uporabimo lahko tudi naslednjo odvisnost v pom.xml datoteko za implementacijo podatkovne strukture tuples v Javi.
org.javatuples javatuples 1.2
Implementirajmo tuple in ustvarimo preprost program Java tuple.
int v niz
Knjižnica Javatuples
The javatuples knjižnica ima tuple razrede, ki ustrezajo velikosti tuple. Tuple so lahko različne velikosti. Tuple lahko vsebuje največ 10 elementi. Izvedba vsake tuple je drugačna. Hierarhija razredov je naslednja.
Java.lang.Object ↳ org.javatuples.Tuple ↳ org.javatuples.ClassName
Java Tuple Class
The Tuple je abstraktni osnovni razred za vse tuple razrede, ki mu pripadajo org.javatuples paket. Vse metode razreda tuple so javne in končne. Naslednja tabela povzema metode razreda tuple. Izvaja Iterable in Serializable vmesnike.
Metoda | Sintaksa | Opis |
---|---|---|
vsebuje() | javna končna logična vrednost vsebuje (java.lang.Object value) | Preveri, ali ima tuple določen element ali ne. |
vsebujeVse() | javni končni boolean containsAll(java.util.Collection collection) | Vrne true, če ta tuple vsebuje vse elemente podane zbirke (Seznam/Matrika). |
enako () | javna končna logična vrednost je enaka (java.lang.Object obj) | Preglasi enako () metoda razreda Object. |
getSize() | public abstract int getSize() | Vrne velikost tuple. |
getValue() | javni končni java.lang.Object getValue(int pos) | Pridobite vrednost na določenem mestu v tuple. Ta metoda mora vrniti objekt, zato boste z njeno uporabo izgubili tipsko varnost, ki jo dobite z getValueX() metode. |
hashCode() | javni končni int hashCode() | Vrne zgoščeno kodo za niz. Preglasi hashCode() metoda razreda Object. |
indeks() | public final int indexOf(java.lang.Object value) | Vrne indeks znotraj tega niza prve pojavitve podanega podniza. |
iterator() | javni končni java.util.Iterator iterator() | Vrne iterator nad elementi v tej tuple v pravilnem zaporedju. |
lastIndexOf() | public final int lastIndexOf(java.lang.Object value) | Vrne indeks znotraj tega niza zadnje pojavitve navedenega podniza. |
toArray() | javni končni java.lang.Object[] toArray() | Pretvori tuple v matriko. |
toString() | javni končni java.lang.String toString() | Vrne nizovno predstavitev predmeta. Preglasi metodo toString() razreda Object. |
našteti() | javni končni java.util.List toList() | Pretvori tuple v seznam. |
Neposredni znani podrazredi
Velikost Tuple | Ime razreda tuple | Primer |
---|---|---|
En element | Enota | Enota |
Dva elementa | Par | Par |
Trije elementi | Trojček | Trojček |
Štirje elementi | Kvartet | Kvartet |
Pet elementov | kvintet | kvintet |
Šest elementov | Sekstet | Sekstet |
Sedem elementov | sedem | sedem |
Osem elementov | Oktet | Oktet |
Devet elementov | Ennead | Ennead |
Deset elementov | desetletje | desetletje |
Poleg zgornjih razredov obstajata še dva dodatna razreda, ki jih nudi knjižnica javatuples, tj. KeyValue in LabelValue . Ta dva razreda sta podobna Par razreda in nudijo enako funkcionalnost, vendar v drugačni semantiki.
Vsak razred tuple implementira naslednje tri vmesnike:
- Ponovljivo
- Primerljivo
- Serializable
Implementacija Tuple
Implementacija tuple v Javi je zelo enostavna. Ustvariti moramo primerek razreda tuple, ki ustreza velikosti.
TupleExample.java
import org.javatuples.Quartet; public class TupleExample { public static void main(String args[]) { //create a pair tuple from the constructor Quartet quartet = new Quartet('Sophia', 'Female', 22, 'Marketing Manager'); //print the tuples objects System.out.println('The details of the employee are: ' + quartet); } }
Izhod:
The details of the employee are: [Sophia, Female, 22, Marketing Manager]
Tuple Operations
Naslednje operacije se lahko izvajajo na tuple:
- Ustvarjanje tuple
- Pridobivanje vrednosti
- Nastavitev vrednosti
- Dodajanje elementov
- Ponavljaj Tuple
- Pretvori Tuple v Seznam
- Iskanje v Tuple
Ustvarjanje Tuple
Obstajajo trije načini za ustvarjanje tuple:
- Z uporabo metode with().
- Z uporabo Konstruktorja
- Z uporabo zbirke
Oglejmo si zgornje tri načine za ustvarjanje tuple.
Z uporabo metode with().
Knjižnica javatuples zagotavlja z() metoda, ki ustvari torko s podanimi vrednostmi. Metoda spada med org.javatuples.Pair paket. Uporablja se za instanciranje predmetov z vrednostmi.
Sintaksa:
ClassName object = ClassName.with(value-1, value-2, ......, value-n);
primer:
Pair pair = Pair.with('iPhone 12', 112000.00);
Zgornji predmet razreda Pair ustvari torko z dvema vrednostma. Ustvarimo program Java za isto.
CreateTupleExample1.java
import org.javatuples.Pair; class CreateTupleExample1 { public static void main(String args[]) { Pair pair = Pair.with(9086651, 'Dell Laptop'); System.out.println(pair); } }
Izhod:
[9086651, Dell Laptop]
Z uporabo Konstruktorja
V tem primeru izdelamo konstruktor razreda, glede na zahtevo.
Sintaksa:
ClassName object = new ClassName (value-1, value-2, ……., value-n);
primer:
Quintet quintet = new Quintet (91237, 'Mac Book Air', 88490.00, '8-Core CPU', 4);
Ustvarimo program Java za ustvarjanje tuple z uporabo konstruktorja.
CreateTupleExample2.java
import org.javatuples.Quintet; class CreateTupleExample1 { public static void main(String args[]) { Quintet quintet = new Quintet (91237, 'Mac Book Air', 88490.00, '8-Core CPU', 4); System.out.println(quintet); } }
Izhod:
letomesec
[91237, Mac Book Air, 88490.0, 8-Core CPU, 4]
Z uporabo zbirke
Knjižnica javatuples nam omogoča ustvarjanje tuple iz zbirke z uporabo fromCollection() metoda. Omogoča nam tudi ustvarjanje tuple iz matrike z uporabo fromArray() metoda. Upoštevajte, da mora imeti zbirka/matrika enak tip in vrednosti kot tuple.
Zbirka/matrika mora imeti isti tip kot Tuple in število vrednosti v zbirki/matriki se mora ujemati z razredom Tuple.
Sintaksa:
ClassName object = ClassName.fromCollection(list); ClassName object = ClassName.fromArray(array);
primer:
Octet p1 = Octet.fromCollection(list); Sextet p2 = Sextet.fromArray(arr);
CreateTupleExample3.java
import java.util.ArrayList; import java.util.List; import org.javatuples.Sextet; import org.javatuples.Octet; class CreateTupleExample3 { public static void main(String args[]) { //creating a list List list = new ArrayList(); //adding elements to the list list.add('C'); list.add('C++'); list.add('Java'); list.add('Python'); list.add('Scala'); list.add('Ruby'); list.add('PHP'); list.add('COBOL'); //creating an object of Pair class and passing the list Octet p1 = Octet.fromCollection(list); //creating an Array String[] arr = {'One', 'Two', 'Three', 'Four', 'Five', 'Six'}; //creating an object of the Pair class and invoking the fromArray() method Sextet p2 = Sextet.fromArray(arr); //prints the tuple created using list System.out.println(p1); //prints the tuple using Array System.out.println(p2); } }
Izhod:
[C, C++, Java, Python, Scala, Ruby, PHP, COBOL] [One, Two, Three, Four, Five, Six]
Pridobite vrednosti
Knjižnica javatuples nam prav tako omogoča pridobivanje vrednosti iz tuple pri podanem indeksu z uporabo getValueX() metoda. Kjer X označuje vrednost indeksa predmeta. Indeksiranje se začne od 0.
primer:
Pair pair = new Pair(value-1, value-2); type1 val1 = pair.getValue0();
GetValueExample.java
import org.javatuples.Pair; class GetTupleValue { public static void main(String args[]) { //creating a tuple Pair pair = Pair.with(12, 'Andrew'); //getting values at index 1 System.out.println(pair.getValue1()); } }
Izhod:
[Andrew]
Nastavite vrednosti
Kot smo razpravljali zgoraj, so tuple nespremenljive. Zato jih ni mogoče spreminjati, ko so ustvarjeni. Za premagovanje težave nudi knjižnica javatuples setValueX() metoda. Kjer je X vrednost indeksa, pri kateri želimo nastaviti določeno vrednost. Metoda ustvari kopijo tuple z novo dodano vrednostjo pri podanem indeksu in vrne isto tuple.
primer:
Pair pair = new Pair(value-1, value-2); type1 val1 = pair.getValue0();
SetValueExample.java
import org.javatuples.Pair; class SetTupleValue { public static void main(String args[]) { //creating a tuple Pair p1 = Pair.with(67, 69); //setting tuple value at index 1 Pair p2 = p1.setAt1(68); System.out.println(p2); } }
Izhod:
[67, 68]
Dodajanje vrednosti
Obstajata dva načina za dodajanje vrednosti v tuple:
anonimna funkcija java
- Na koncu tuple
- Pri določenem indeksu
Na koncu Tuple
Knjižnica javatuples zagotavlja dodaj() metoda za dodajanje predmetov v torko. Doda objekt na koncu tuple in vrne novo tuple tako, da se ujema s številom elementov.
Recimo, da imamo zbirko z dvema elementoma in ji želimo dodati še en element. V takem primeru parna torka ne bo podpirala tretjega elementa. Zato, ko dodamo element v tuple Pair, se ta pretvori v tuple Triplet. Poglejmo primer.
AddElementInTuple.java
git rebase
import org.javatuples.Pair; import org.javatuples.Triplet; public class AddElementInTuple { public static void main(String args[]) { Pair pair = Pair.with('Jack', 46); Triplet triplet = pair.add('Finance Professional'); System.out.println(pair); System.out.println(triplet); } }
Izhod:
[Jack, 46] [Jack, 46, Finance Professional]
Prav tako lahko dodamo eno torko drugi torki. Poveča število elementov v novo ustvarjeni tuple. Zato vrne vrsto tuple na podlagi števila elementov, ki so prisotni po seštevanju.
AddTuplesExample.java
import org.javatuples.Quartet; import org.javatuples.Septet; import org.javatuples.Triplet; public class AddTuplesExample { public static void main(String args[]) { //creating a tuple with three elements Triplet triplet = Triplet.with('Mango', 'Grapes', 'Papaya'); //creating an object of quartet tuple and adding an elements at index-1 in triplet tuple Quartet quartet = triplet.addAt1('Banana'); //adding quartet and triplet tuple we get a septet tuple i.e. 3+4=7 //the following statement can be written as Septet septet = quartet.add(triplet); Septet septet = quartet.add(triplet); System.out.println(triplet); System.out.println(quartet); System.out.println(septet); } }
Izhod:
[Mango, Grapes, Papaya] [Mango, Banana, Grapes, Papaya] [Mango, Banana, Grapes, Papaya, Mango, Grapes, Papaya]
Pri določenem indeksu
Privzeto se novi elementi dodajo na konec tuple. Lahko pa dodamo elemente pri navedenem indeksu z uporabo addX() metoda.
AddAtIndexExample.java
import org.javatuples.Quartet; import org.javatuples.Triplet; public class AddAtIndexExample { public static void main(String args[]) { //creating a tuple with three elements Triplet triplet = Triplet.with('MCA', 'M.Sc.', 'MBBS'); //creating an object of quartet tuple and adding an element at index-2 in triplet tuple Quartet quartet = triplet.addAt2('M.Tech'); System.out.println(triplet); System.out.println(quartet); } }
Izhod:
[MCA, M.Sc., MBBS] [MCA, M.Sc., M.Tech, MBBS]
Iskanje elementa
Iščemo lahko tudi element, ki se nahaja v tuple. Za iskanje knjižnica javatuples ponuja vsebuje() metoda razreda Tuple. Vrne logično vrednost prav če je element prisoten, vrne else lažno . Poglejmo primer.
SearchingElementExample.java
import org.javatuples.Pair; class SearchingElementExample { public static void main(String args[]) { Pair pair = Pair.with(34, 'Jack'); //returns true because Jack is present in tuple boolean res1 = pair.contains('Jack'); //returns false because Andrew is not present in tuple boolean res2 = pair.contains('Andrew'); System.out.println(res1); System.out.println(res2); } }
Izhod:
true false
Pretvori Tuple v zbirko ali matriko
Vsak razred tuple ima metodi asList() in toArray(), ki vrneta List oziroma Array. Poglejmo primer.
TupleToCollection.java
import java.util.Arrays; import java.util.List; import org.javatuples.Quartet; public class TupleToCollection { public static void main(String args[]) { //Convert to list Quartet quartet = Quartet.with('Dog', 12,'German Shepherd', 23.89); //converts to list List list = quartet.toList(); //prints list System.out.println(list); //Converts to array Object[] quartletArr = quartet.toArray(); //prints array System.out.println(Arrays.toString(quartletArr)); } }
Izhod:
[Dog, 12, German Shepherd, 23.89] [Dog, 12, German Shepherd, 23.89]
Upoštevajte, da lahko tuple vsebuje heterogene tipe, tako da bo dobljeni tip Seznam oz predmet[] temu primerno.
Ponavljanje nad Tuple
Vsi tuple razredi izvajajo Ponovljivo vmesnik. Torej lahko iteriramo tuple na enak način kot zbirke ali nize.
IterateTuple.java
import org.javatuples.Quartet; class IterateTuple { public static void main(String args[]) { //creating a quartet tuple Quartet quartet = Quartet.with('Dell', 5600.00, 34, 'Digital Solutions'); //iterate over tuple for(Object obj : quartet) { //prints elements System.out.println(obj); } } }
Izhod:
Dell 5600.0 34 Digital Solutions
Tuple vs. Seznam/Matrika
Tuple | Seznam |
---|---|
Je niz vrednosti, ločenih z vejicami, ki so obdane z oklepaj . | Je niz vrednosti, ločenih z vejicami, ki so obdane z oglati oklepaji . |
Oklepaj je neobvezno . | Oglati oklepaji so obvezno . |
je nespremenljiv . | je spremenljiv . |
Zahteva manj spomin. | Zahteva več pomnilnika. |
Ima manj tovarniške metode. | Ima več tovarniške metode. |
Ima a fiksno dolžina. | Ima spremenljivka dolžine. |
Shranjuje heterogena podatke. | Shranjuje homogena podatke. |
Primeren je za velik količine podatkov. | Primeren je za a majhna količino podatkov. |
Lahko se shrani v a seznam . | Lahko se shrani znotraj a tuple . |
je hitreje v primerjavi s Listom. | je počasnejši v primerjavi s tuplem. |
Predstavljen je kot t1 = (1, 2, 3, 4, 5) | Predstavljen je kot l1 = [1, 2, 3, 4, 5] |