logo

Java Tuple

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

Java Tuple
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]