A tuplu este o structură de date care poate conține obiecte de diferite tipuri. Aceste obiecte nu sunt legate între ele, ci au sens atunci când le considerăm colectiv. În această secțiune, discutăm ce este tuplu , caracteristici, dimensiune, și operațiuni de tupluri. De asemenea, vom discuta despre implementarea tuplelor în Java .
Ce este un tuplu?
În general, a tuplu este o colecție ordonată de obiecte. În tuple, datele sunt stocate ca obiect într-o matrice separată de octeți. Are valori separate prin virgulă, cuprinse într-o pereche de paranteze drepte []. Tuplurile sunt imuabil, spre deosebire de structura de date Lists. Un tuplu poate conține mai multe tupluri. Poate fi considerat și ca un obiect anonim.
Caracteristicile lui Tuple
Tuple are următoarele caracteristici:
- Este tip sigur, iterabil, imuabil, și serializabil .
- Acesta implementează toString(), este egal(), și codul hash()
- De asemenea, implementează Comparabil (Implementări duble comparabile)
Exemplu de tuplu
Să luăm în considerare următorul exemplu.
cum se convertesc șir în int
['Sophia', 'Female', 22, 'Marketing Manager']
Tuplu de mai sus este a cvartet tuplu pentru că are patru elemente (obiecte). Observăm că fiecare obiect este de un tip diferit. Dar când îl considerăm colectiv, are o semnificație specifică. Tuplul de mai sus reprezintă datele unui angajat, cum ar fi numele, sexul, vârsta și desemnarea.
Să vedem alte exemple de tupluri.
['Java', 'Object-oriented', 14] ['John', 'Wick' 21, 'USA', false, '[email protected]'] [3, 'Samsung', 'Galaxy S2', 37000.00]
Tuplu în Java
În Java, un tuplu este o structură de date generică care tratează fiecare element ca pe un obiect, iar aceste obiecte sunt stocate într-o matrice separată de octeți. Cu alte cuvinte, putem spune și că tuplu este un ordonat colecție de obiecte de diferite tipuri.
Funcționalitatea unui tuplu poate fi implementată folosind structura de date List și Array, dar aceste structuri de date nu dețin diferite tipuri de tipuri de date prin proiectare. Prin urmare, este clar că eterogen tuplu folosind o structură de date standard (List/ Array) nu este posibil în Java. Din moment ce am cerut tuplu structura de date pentru a îndeplini cerința de deținere omogen structură de date.
Rețineți că Structura de date tuple nu este prezentă în programarea Java , în mod implicit. Dar putem implementa structura de date tuple folosind biblioteca terță parte numită javatuples .
Înainte de a trece la implementare, mai întâi, vom descărca javatuples.jar fişier. Și adăugați acest fișier la calea proiectului.
De asemenea, putem folosi următoarea dependență în pom.xml fișier pentru a implementa structura de date tuple în Java.
org.javatuples javatuples 1.2
Să implementăm un tuplu și să creăm un program simplu de tuplu Java.
Biblioteca Javatuples
The javatuples biblioteca are clasele de tuplu care corespund mărimii unui tuplu. Tuplurile pot avea dimensiuni diferite. Un tuplu poate conține maximum 10 elemente. Implementarea fiecărui tuplu este diferită. Ierarhia claselor este următoarea.
Java.lang.Object ↳ org.javatuples.Tuple ↳ org.javatuples.ClassName
Clasa Java Tuple
The Tuplu este o clasă de bază abstractă pentru toate clasele de tuplu cărora le aparține org.javatuples pachet. Toate metodele clasei tuple sunt publice și finale. Următorul tabel rezumă metodele clasei de tuplu. Implementează interfețe iterabile și serializabile.
mese din latex
Metodă | Sintaxă | Descriere |
---|---|---|
conține() | public final boolean conține (java.lang.Object value) | Verifică dacă tuplu are un anumit element sau nu. |
conţineAll() | public final boolean containsAll(java.util.Collection collection) | Returnează adevărat dacă acest tuplu conține toate elementele colecției specificate (List/Array). |
este egal() | public final boolean equals(java.lang.Object obj) | Ignoră pe este egal() metoda clasei Object. |
getSize() | public abstract int getSize() | Returnează dimensiunea tuplului. |
getValue() | public final java.lang.Object getValue(int pos) | Obțineți valoarea la o anumită poziție în tuplu. Această metodă trebuie să returneze obiectul, așa că folosind-o veți pierde siguranța de tip pe care o obțineți cu getValueX() metode. |
hashCode() | public final int hashCode() | Returnează un cod hash pentru șir. Ea trece peste hashCode() metoda clasei Object. |
Index de() | public final int indexOf(java.lang.Object value) | Returnează indexul din acest șir al primei apariții a subșirului specificat. |
iterator() | public final java.util.Iterator iterator() | Returnează un iterator peste elementele din acest tuplu într-o secvență adecvată. |
lastIndexOf() | public final int lastIndexOf(java.lang.Object value) | Returnează indexul din acest șir al ultimei apariții a subșirului specificat. |
toArray() | public final java.lang.Object[] toArray() | Acesta convertește tuplu într-o matrice. |
toString() | public final java.lang.String toString() | Returnează o reprezentare șir a obiectului. Suprascrie metoda toString() a clasei Object. |
a lista() | public final java.util.List toList() | Acesta convertește tuplu într-o listă. |
Subclase cunoscute directe
Dimensiunea tuplului | Numele clasei tuple | Exemplu |
---|---|---|
Un element | Unitate | Unitate |
Două Elemente | Pereche | Pereche |
Trei Elemente | Triplet | Triplet |
Patru Elemente | Cvartet | Cvartet |
Cinci Elemente | Cvintet | Cvintet |
Şase Elemente | Sextet | Sextet |
Șapte Elemente | Șapte | Șapte |
Opt Elemente | Octet | Octet |
Nouă Elemente | Enneadă | Enneadă |
Zece Elemente | Deceniu | Deceniu |
Pe lângă clasele de mai sus, există două clase suplimentare oferite de biblioteca javatuples, de exemplu. Valoare cheie și LabelValue . Aceste două clase sunt similare cu Pereche clasă și oferă aceeași funcționalitate, dar în semantică diferită.
Fiecare clasă de tuplu implementează următoarele trei interfețe:
- Iterabil
- Comparabil
- Serializabil
Implementarea lui Tuple
Implementarea unui tuplu în Java este foarte ușoară. Trebuie să creăm o instanță de clasă tuple care să corespundă mărimii.
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); } }
Ieșire:
The details of the employee are: [Sophia, Female, 22, Marketing Manager]
Operații cu tupli
Pe un tuplu pot fi efectuate următoarele operații:
- Crearea unui tuplu
- Obținerea de valori
- Setarea Valorilor
- Adăugarea de elemente
- Iterați peste Tuple
- Convertiți tuplu în listă
- Căutând în Tuple
Crearea unui tuplu
Există trei moduri de a crea un tuplu:
- Folosind metoda with().
- Folosind Constructor
- Prin utilizarea Colecției
Să vedem cele trei moduri de mai sus de a crea un tuplu.
Folosind metoda with().
Biblioteca javatuples oferă cu() metodă care creează un tuplu cu valorile specificate. Metoda aparține org.javatuples.Pereche pachet. Este folosit pentru a instanția obiecte cu valori.
Sintaxă:
ClassName object = ClassName.with(value-1, value-2, ......, value-n);
Exemplu:
Pair pair = Pair.with('iPhone 12', 112000.00);
Obiectul de clasă Pair de mai sus creează un tuplu cu două valori. Să creăm un program Java pentru același lucru.
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); } }
Ieșire:
[9086651, Dell Laptop]
Folosind Constructor
În acest caz, creăm un constructor al clasei, conform cerințelor.
Sintaxă:
ClassName object = new ClassName (value-1, value-2, ……., value-n);
Exemplu:
Powershell comentariu multilinie
Quintet quintet = new Quintet (91237, 'Mac Book Air', 88490.00, '8-Core CPU', 4);
Să creăm un program Java pentru a crea un tuplu folosind constructorul.
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); } }
Ieșire:
[91237, Mac Book Air, 88490.0, 8-Core CPU, 4]
Prin utilizarea Colecției
Biblioteca javatuples ne permite să creăm un tuplu din colecție folosind din colecție() metodă. De asemenea, ne permite să creăm un tuplu dintr-o matrice utilizând fromArray() metodă. Rețineți că colecția/matricea trebuie să aibă același tip și valori ca tuplu.
Colecția/matricea trebuie să aibă același tip ca și tuplul, iar numărul de valori din colecție/matrice trebuie să se potrivească cu clasa Tuple.
Sintaxă:
ClassName object = ClassName.fromCollection(list); ClassName object = ClassName.fromArray(array);
Exemplu:
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); } }
Ieșire:
[C, C++, Java, Python, Scala, Ruby, PHP, COBOL] [One, Two, Three, Four, Five, Six]
Obțineți valori
Biblioteca javatuples ne permite, de asemenea, să obținem valori din tuplu la indexul specificat, folosind getValueX() metodă. Unde X denotă valoarea indexului obiectului. Indexarea începe de la 0.
Exemplu:
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()); } }
Ieșire:
[Andrew]
Setați valori
După cum am discutat mai sus, tuplurile sunt imuabile. Prin urmare, nu pot fi modificate odată ce au fost create. Pentru a depăși problema, biblioteca javatuples oferă setValueX() metodă. Unde X este valoarea indexului la care dorim să setăm valoarea specifică. Metoda creează o copie a tuplului cu noua valoare adăugată la indexul specificat și returnează același tuplu.
manager de sarcini linux
Exemplu:
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); } }
Ieșire:
[67, 68]
Adăugarea unei valori
Există două moduri de a adăuga valori într-un tuplu:
- La sfârșitul tuplului
- La Index specific
La sfârşitul tuplului
Biblioteca javatuples oferă adăuga() metodă de a adăuga obiecte la tuplu. Acesta adaugă obiectul la sfârșitul tuplului și returnează un nou tuplu prin potrivirea numărului de elemente.
Să presupunem că avem un tuplu care are două elemente și vrem să adăugăm un alt element la tuplu. Într-un astfel de caz, tuplul Pair nu va suporta al treilea element. Prin urmare, atunci când adăugăm un element la un tuplu Pair, acesta este convertit într-un tuplu Triplet. Să vedem un exemplu.
AddElementInTuple.java
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); } }
Ieșire:
[Jack, 46] [Jack, 46, Finance Professional]
De asemenea, putem adăuga un tuplu la altul. Mărește numărul de elemente din tuplul nou generat. Prin urmare, returnează tipul de tuplu pe baza numărului de elemente prezente după adăugare.
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); } }
Ieșire:
[Mango, Grapes, Papaya] [Mango, Banana, Grapes, Papaya] [Mango, Banana, Grapes, Papaya, Mango, Grapes, Papaya]
La Indexul specificat
În mod implicit, elemente noi sunt adăugate la sfârșitul tuplului. Dar putem adăuga elemente la indexul specificat utilizând addX() metodă.
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); } }
Ieșire:
[MCA, M.Sc., MBBS] [MCA, M.Sc., M.Tech, MBBS]
Căutarea unui element
De asemenea, putem căuta un element care se află în tuplu. Pentru căutarea bibliotecii javatuples oferă conține() metoda clasei Tuple. Returnează o valoare booleană Adevărat dacă un element este prezent, altfel revine fals . Să vedem un exemplu.
SearchingElementExample.java
arbore binar vs arbore binar de căutare
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); } }
Ieșire:
true false
Convertiți tuplu în colecție sau matrice
Fiecare clasă tuplu are metodele asList() și toArray() care returnează List și, respectiv, Array. Să vedem un exemplu.
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)); } }
Ieșire:
[Dog, 12, German Shepherd, 23.89] [Dog, 12, German Shepherd, 23.89]
Rețineți că tuplu poate conține tipuri eterogene, astfel încât tipul rezultat va fi de Listă sau Obiect[] în consecinţă.
Iterație peste tuplu
Toate clasele de tuplu implementează Iterabil interfata. Deci, putem itera un tuplu în același mod ca colecțiile sau matricele.
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); } } }
Ieșire:
Dell 5600.0 34 Digital Solutions
Tuple vs. Listă/Matrice
Tuplu | Listă |
---|---|
Este un set de valori separate prin virgulă care sunt incluse în paranteze . | Este un set de valori separate prin virgulă care sunt incluse în paranteza patrata . |
Paranteza este opțional . | Parantezele pătrate sunt obligatoriu . |
Este imuabil . | Este mutabil . |
Necesita Mai puțin memorie. | Necesită mai multă memorie. |
Are mai putine metode din fabrică. | Are Mai mult metode din fabrică. |
Are o fix lungime. | Are variabil lungimi. |
Se stochează eterogen date. | Se stochează omogen date. |
Este potrivit pentru mare cantități de date. | Este potrivit pentru a mic cantitatea de date. |
Poate fi stocat într-un listă . | Poate fi depozitat în interiorul unui tuplu . |
Este Mai repede în comparație cu List. | Este Mai lent în comparaţie cu tuplu. |
Este reprezentat ca t1 = (1, 2, 3, 4, 5) | Este reprezentat ca l1 = [1, 2, 3, 4, 5] |