A tuple je datová struktura, která může obsahovat objekty různých typů. Tyto objekty nejsou vzájemně propojeny, ale mají význam, když je zvažujeme společně. V této části diskutujeme co je tuple , vlastnosti, velikost, a operace n-tic. Také budeme diskutovat o implementace n-tice v Javě .
Co je to n-tice?
Obecně platí, že a tuple je uspořádaná sbírka předmětů. V n-tici jsou data uložena jako objekt v samostatném poli bajtů. Má hodnoty oddělené čárkami uzavřené v hranatých závorkách []. N-tice jsou neměnný, na rozdíl od datové struktury Seznamů. N-tice může obsahovat více n-tic. Může být také považován za anonymní objekt.
Vlastnosti Tuple
Tuple má následující vlastnosti:
- to je typově bezpečný, opakovatelný, neměnný, a serializovatelný .
- Implementuje toString(), rovná se(), a hashCode()
- Také implementuje Srovnatelný (Nice srovnatelné nástroje)
Příklad n-tice
Podívejme se na následující příklad.
['Sophia', 'Female', 22, 'Marketing Manager']
Výše uvedená n-tice je a kvartet tuple protože má čtyři prvky (předměty). Pozorujeme, že každý objekt je jiného typu. Ale když to vezmeme společně, má to konkrétní význam. Výše uvedená n-tice představuje data zaměstnance, jako je jméno, pohlaví, věk a označení.
Podívejme se na některé další příklady n-tic.
['Java', 'Object-oriented', 14] ['John', 'Wick' 21, 'USA', false, '[email protected]'] [3, 'Samsung', 'Galaxy S2', 37000.00]
Tuple v Javě
V Javě je n-tice generická datová struktura, která zachází s každým prvkem jako s objektem a tyto objekty se ukládají do samostatného bajtového pole. Jinými slovy, můžeme také říci, že n-tice je an objednal sbírka předmětů různých typů.
Funkčnost n-tice lze implementovat pomocí datové struktury List a Array, ale tyto datové struktury neobsahují různé typy datových typů podle návrhu. Je tedy jasné, že heterogenní n-tice pomocí standardní datové struktury (List/Array) není v Javě možné. Protože jsme požadovali tuple datová struktura ke splnění požadavku držení homogenní datová struktura.
Všimněte si, že datová struktura n-tice není v programování Java přítomna , ve výchozím stavu. Ale můžeme implementovat datovou strukturu n-tice pomocí knihovny třetí strany s názvem javatuples .
Než přejdeme k implementaci, nejprve si stáhneme soubor javatuples.jar soubor. A přidejte tento soubor do cesty k projektu.
Můžeme také použít následující závislost v pom.xml k implementaci datové struktury n-tic v Javě.
vyčistit mezipaměť npm
org.javatuples javatuples 1.2
Pojďme implementovat n-tici a vytvořit jednoduchý program Java n-tice.
Knihovna Javatuples
The javatuples knihovna má třídy n-tice, které odpovídají velikosti n-tice. N-tice mohou mít různou velikost. N-tice může pojmout maximálně 10 Prvky. Implementace každé n-tice je jiná. Hierarchie tříd je následující.
Java.lang.Object ↳ org.javatuples.Tuple ↳ org.javatuples.ClassName
Třída Java Tuple
The Tuple je abstraktní základní třída pro všechny třídy n-tice, které patří org.javatuples balík. Všechny metody třídy n-tice jsou veřejné a konečné. Následující tabulka shrnuje metody třídy n-tice. Implementuje iterovatelná a serializovatelná rozhraní.
Metoda | Syntax | Popis |
---|---|---|
obsahuje() | public final boolean obsahuje(hodnota java.lang.Object) | Zkontroluje, zda má n-tice konkrétní prvek nebo ne. |
obsahujeVše() | public final boolean obsahujeVše(java.util.Collection collection) | Vrací hodnotu true, pokud tato n-tice obsahuje všechny prvky zadané kolekce (List/Array). |
rovná se() | veřejné konečné booleovské rovná se(java.lang.Object obj) | Přepíše rovná se() metoda třídy Object. |
getSize() | veřejný abstrakt int getSize() | Vrátí velikost n-tice. |
getValue() | veřejné konečné java.lang.Object getValue(int pos) | Získejte hodnotu na konkrétní pozici v n-tici. Tato metoda musí vrátit objekt, takže jejím použitím ztratíte typovou bezpečnost, kterou získáte s getValueX() metody. |
hashCode() | public final int hashCode() | Vrací hash kód pro řetězec. Přepíše hashCode() metoda třídy Object. |
indexOf() | public final int indexOf(java.lang.Object value) | Vrátí index v rámci tohoto řetězce prvního výskytu zadaného podřetězce. |
iterátor() | public final java.util.Iterator iterator() | Vrací iterátor nad prvky v této n-tice ve správném pořadí. |
lastIndexOf() | public final int lastIndexOf(java.lang.Object value) | Vrátí index v rámci tohoto řetězce posledního výskytu zadaného podřetězce. |
toArray() | veřejné finále java.lang.Object[] toArray() | Převede n-tici na pole. |
toString() | veřejné finále java.lang.String toString() | Vrací řetězcovou reprezentaci objektu. Přepíše metodu toString() třídy Object. |
toList() | public final java.util.List toList() | Převede n-tici na seznam. |
Přímé známé podtřídy
Velikost Tuple | Název třídy n-tice | Příklad |
---|---|---|
Jeden Element | Jednotka | Jednotka |
Dva prvky | Pár | Pár |
Tři prvky | Trojice | Trojice |
Čtyři prvky | Kvartet | Kvartet |
Pět prvků | Kvintet | Kvintet |
Šest prvků | Sextet | Sextet |
Sedm prvků | sedm | sedm |
Osm prvků | Oktet | Oktet |
Devět prvků | Ennead | Ennead |
Deset prvků | Desetiletí | Desetiletí |
Kromě výše uvedených tříd existují dvě další třídy poskytované knihovnou javatuples, tj. KeyValue a LabelValue . Tyto dvě třídy jsou podobné Pár třídy a poskytují stejnou funkčnost, ale v jiné sémantice.
Každá třída n-tice implementuje následující tři rozhraní:
- Iterovatelné
- Srovnatelný
- Serializovatelné
Implementace Tuple
Implementace n-tice v Javě je velmi snadná. Musíme vytvořit instanci třídy n-tice, která odpovídá 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); } }
Výstup:
The details of the employee are: [Sophia, Female, 22, Marketing Manager]
Tuple Operations
Na n-tici lze provádět následující operace:
- Vytvoření Tuple
- Získávání hodnot
- Nastavení hodnot
- Přidávání prvků
- Iterujte přes Tuple
- Převést n-tice na seznam
- Hledání v Tuple
Vytváření Tuple
Existují tři způsoby, jak vytvořit n-tici:
- Pomocí metody with().
- Pomocí konstruktoru
- Pomocí kolekce
Podívejme se na výše uvedené tři způsoby, jak vytvořit n-tici.
Pomocí metody with().
Knihovna javauples poskytuje s() metoda, která vytvoří n-tici se zadanými hodnotami. Metoda patří k org.javatuples.Pair balík. Používá se k vytváření instance objektů s hodnotami.
Syntax:
ClassName object = ClassName.with(value-1, value-2, ......, value-n);
Příklad:
Pair pair = Pair.with('iPhone 12', 112000.00);
Výše uvedený objekt třídy Pair vytvoří n-tici se dvěma hodnotami. Vytvořme pro to Java program.
třídit haldy
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); } }
Výstup:
[9086651, Dell Laptop]
Pomocí konstruktoru
V tomto případě vytvoříme konstruktor třídy podle požadavku.
Syntax:
ClassName object = new ClassName (value-1, value-2, ……., value-n);
Příklad:
Quintet quintet = new Quintet (91237, 'Mac Book Air', 88490.00, '8-Core CPU', 4);
Vytvořme Java program pro vytvoření n-tice pomocí konstruktoru.
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); } }
Výstup:
[91237, Mac Book Air, 88490.0, 8-Core CPU, 4]
Pomocí kolekce
Knihovna javatuples nám umožňuje vytvořit n-tici z kolekce pomocí fromCollection() metoda. To nám také umožňuje vytvořit n-tici z pole pomocí fromArray() metoda. Všimněte si, že kolekce/pole musí mít stejný typ a hodnoty jako n-tice.
Kolekce/pole musí mít stejný typ jako Tuple a počet hodnot v kolekci/pole musí odpovídat třídě Tuple.
Syntax:
ClassName object = ClassName.fromCollection(list); ClassName object = ClassName.fromArray(array);
Příklad:
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); } }
Výstup:
[C, C++, Java, Python, Scala, Ruby, PHP, COBOL] [One, Two, Three, Four, Five, Six]
Získejte hodnoty
Knihovna javatuples nám také umožňuje načítat hodnoty z n-tice na zadaném indexu pomocí getValueX() metoda. Kde X označuje hodnotu indexu objektu. Indexování začíná od 0.
Příklad:
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()); } }
Výstup:
[Andrew]
Nastavte hodnoty
Jak jsme diskutovali výše, n-tice jsou neměnné. Po vytvoření je tedy nelze upravovat. K překonání tohoto problému poskytuje knihovna javatuples setValueX() metoda. Kde X je hodnota indexu, na kterou chceme nastavit konkrétní hodnotu. Metoda vytvoří kopii n-tice s nově přidanou hodnotou na zadaném indexu a vrátí stejnou n-tice.
Příklad:
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); } }
Výstup:
[67, 68]
Přidání hodnoty
Existují dva způsoby, jak přidat hodnoty do n-tice:
- Na konci n-tice
- Na konkrétním indexu
Na konci Tuple
Knihovna javauples poskytuje přidat() metoda pro přidání objektů do n-tice. Přidá objekt na konec n-tice a vrátí novou n-tici odpovídajícím počtem prvků.
Předpokládejme, že máme n-tici se dvěma prvky a chceme k n-tice přidat další prvek. V takovém případě n-tice Pair nebude podporovat třetí prvek. Když tedy přidáme prvek do párové n-tice, převede se na trojici. Podívejme se na příklad.
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); } }
Výstup:
[Jack, 46] [Jack, 46, Finance Professional]
Můžeme také přidat jednu n-tici k druhé n-tice. Zvyšuje počet prvků v nově vygenerované n-tice. Proto vrací typ n-tice na základě počtu prvků přítomných po přidání.
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); } }
Výstup:
[Mango, Grapes, Papaya] [Mango, Banana, Grapes, Papaya] [Mango, Banana, Grapes, Papaya, Mango, Grapes, Papaya]
Na zadaném indexu
Ve výchozím nastavení se nové prvky přidávají na konec n-tice. Ale můžeme přidat prvky na zadaný index pomocí 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); } }
Výstup:
[MCA, M.Sc., MBBS] [MCA, M.Sc., M.Tech, MBBS]
Hledání prvku
Můžeme také hledat prvek, který se nachází v n-tici. Pro vyhledávání javauples poskytuje knihovna obsahuje() metoda třídy Tuple. Vrací booleovskou hodnotu skutečný je-li prvek přítomen, vrací se else Nepravdivé . Podívejme se na příklad.
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); } }
Výstup:
true false
Převést n-tice na kolekci nebo pole
Každá třída n-tice má metody asList() a toArray(), které vrací List a Array. Podívejme se na příklad.
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)); } }
Výstup:
[Dog, 12, German Shepherd, 23.89] [Dog, 12, German Shepherd, 23.89]
Všimněte si, že n-tice může obsahovat heterogenní typy, takže výsledný typ bude z Seznam nebo Objekt[] podle toho.
vrací pole java
Iterace přes Tuple
Všechny třídy n-tic implementují Iterovatelné rozhraní. Můžeme tedy iterovat n-tici stejným způsobem jako kolekce nebo pole.
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); } } }
Výstup:
Dell 5600.0 34 Digital Solutions
Tuple vs. Seznam/Pole
Tuple | Seznam |
---|---|
Je to sada hodnot oddělených čárkami, které jsou uzavřeny v závorka . | Je to sada hodnot oddělených čárkami, které jsou uzavřeny v hranaté závorky . |
Závorka je volitelný . | Hranaté závorky jsou povinné . |
to je neměnný . | to je proměnlivý . |
To vyžaduje méně Paměť. | Vyžaduje více paměti. |
Má to méně tovární metody. | Má to více tovární metody. |
Má to pevný délka. | Má to variabilní délky. |
Ukládá se heterogenní data. | Ukládá se homogenní data. |
Je vhodný pro velký množství dat. | Je vhodný pro a malý množství dat. |
Může být uložen v a seznam . | Může být uložen uvnitř a tuple . |
to je rychlejší ve srovnání se Seznamem. | to je pomalejší ve srovnání s n-tice. |
Je reprezentován jako t1 = (1, 2, 3, 4, 5) | Je reprezentován jako l1 = [1, 2, 3, 4, 5] |