A násobný je dátová štruktúra, ktorá môže obsahovať objekty rôznych typov. Tieto objekty nie sú navzájom prepojené, ale majú význam, keď ich zvažujeme kolektívne. V tejto časti diskutujeme čo je tuple , vlastnosti, veľkosť, a operácií n-tic. Tiež budeme diskutovať o implementácia n-tice v jazyku Java .
Čo je to n-tica?
Vo všeobecnosti a násobný je usporiadaná zbierka predmetov. V n-tici sú dáta uložené ako objekt v samostatnom bajtovom poli. Má hodnoty oddelené čiarkou v hranatých zátvorkách []. Tuple sú nemenný, na rozdiel od dátovej štruktúry zoznamov. N-tica môže obsahovať viacero n-tic. Môže byť tiež považovaný za anonymný objekt.
Vlastnosti Tuple
Tuple má nasledujúce vlastnosti:
- to je typovo bezpečný, opakovateľný, nemenný, a serializovateľné .
- Implementuje toString(), rovná sa(), a hashCode()
- Tiež implementuje Porovnateľné (Porovnateľné n-tice)
Príklad tuple
Uvažujme o nasledujúcom príklade.
['Sophia', 'Female', 22, 'Marketing Manager']
Vyššie uvedená n-tica je a kvarteto tuple pretože má štyri prvky (predmety). Pozorujeme, že každý objekt je iného typu. Ale keď to zvážime kolektívne, má to špecifický význam. Vyššie uvedená n-tica predstavuje údaje zamestnanca, ako je meno, pohlavie, vek a označenie.
Pozrime sa na niektoré ďalšie príklady n-tic.
otázky java interview
['Java', 'Object-oriented', 14] ['John', 'Wick' 21, 'USA', false, '[email protected]'] [3, 'Samsung', 'Galaxy S2', 37000.00]
Tuple v Jave
V Jave je n-tica všeobecná dátová štruktúra, ktorá s každým prvkom zaobchádza ako s objektom a tieto objekty sa ukladajú do samostatného bajtového poľa. Inými slovami, môžeme tiež povedať, že tuple je an objednal zbierka predmetov rôznych typov.
Funkcionalitu n-tice možno implementovať pomocou dátovej štruktúry List a Array, ale tieto dátové štruktúry neobsahujú rôzne typy dátových typov podľa návrhu. Je teda jasné, že heterogénne n-tice pomocou štandardnej dátovej štruktúry (List/Array) nie je v Jave možné. Keďže sme požadovali násobný dátovú štruktúru na splnenie požiadavky držby homogénne dátová štruktúra.
Poznač si to dátová štruktúra n-tice nie je prítomná v programovaní Java , predvolene. Ale môžeme implementovať dátovú štruktúru n-tice pomocou knižnice tretej strany s názvom javatuples .
Pred prechodom na implementáciu si najskôr stiahneme súbor javatuples.jar súbor. A pridajte tento súbor do cesty k projektu.
Môžeme tiež použiť nasledujúcu závislosť v pom.xml na implementáciu dátovej štruktúry n-tic v jazyku Java.
org.javatuples javatuples 1.2
Implementujme n-ticu a vytvorme jednoduchý program Java tuple.
Knižnica Javatuples
The javatuples knižnica má triedy n-tice, ktoré zodpovedajú veľkosti n-tice. Tuple môžu mať rôznu veľkosť. N-tica môže obsahovať max 10 prvkov. Implementácia každej n-tice je iná. Hierarchia tried je nasledovná.
Java.lang.Object ↳ org.javatuples.Tuple ↳ org.javatuples.ClassName
Java Tuple Class
The Násobný je abstraktná základná trieda pre všetky n-ticové triedy, do ktorých patrí org.javatuples balík. Všetky metódy triedy n-tice sú verejné a konečné. Nasledujúca tabuľka sumarizuje metódy triedy n-tice. Implementuje iterovateľné a serializovateľné rozhrania.
Metóda | Syntax | Popis |
---|---|---|
obsahuje() | public final boolean obsahuje(java.lang.Object value) | Kontroluje, či má n-tica špecifický prvok alebo nie. |
obsahujeVšetko() | public final boolean obsahujeVšetko(kolekcia java.util.Collection) | Vráti hodnotu true, ak táto n-tica obsahuje všetky prvky zadanej kolekcie (List/Array). |
rovná sa() | verejné konečné boolovské rovná sa(java.lang.Object obj) | Prepíše rovná sa() metóda triedy Object. |
getSize() | verejný abstrakt int getSize() | Vráti veľkosť n-tice. |
getValue() | verejné konečné java.lang.Object getValue(int pos) | Získajte hodnotu na konkrétnej pozícii v n-tici. Táto metóda musí vrátiť objekt, takže jej použitím stratíte typovú bezpečnosť, ktorú získate s getValueX() metódy. |
hashCode() | public final int hashCode() | Vracia hash kód pre reťazec. Prepíše to hashCode() metóda triedy Object. |
indexOf() | public final int indexOf(java.lang.Object value) | Vráti index v rámci tohto reťazca prvého výskytu zadaného podreťazca. |
iterátor() | public final java.util.Iterator iterator() | Vracia iterátor nad prvkami v tejto n-tici v správnom poradí. |
lastIndexOf() | public final int lastIndexOf(java.lang.Object value) | Vráti index v rámci tohto reťazca posledného výskytu zadaného podreťazca. |
toArray() | verejné finále java.lang.Object[] toArray() | Konvertuje n-ticu na pole. |
natiahnuť() | verejné finále java.lang.String toString() | Vracia reťazcovú reprezentáciu objektu. Prepíše metódu toString() triedy Object. |
listovať() | public final java.util.List toList() | Skonvertuje n-ticu na zoznam. |
Priame známe podtriedy
Veľkosť Tuple | Názov triedy n-tice | Príklad |
---|---|---|
Jeden Element | Jednotka | Jednotka |
Dva prvky | Spárovať | Spárovať |
Tri prvky | Trojčatá | Trojčatá |
Štyri prvky | Kvarteto | Kvarteto |
Päť prvkov | Quintet | Quintet |
Šesť prvkov | Sextet | Sextet |
Sedem prvkov | sedem | sedem |
Osem prvkov | Oktet | Oktet |
Deväť prvkov | Ennead | Ennead |
Desať prvkov | desaťročie | desaťročie |
Okrem vyššie uvedených tried existujú dve ďalšie triedy poskytované knižnicou javatuples, t.j. KeyValue a LabelValue . Tieto dve triedy sú podobné Spárovať triedy a poskytujú rovnakú funkčnosť, ale v inej sémantike.
Každá trieda n-tice implementuje nasledujúce tri rozhrania:
- Iterovateľné
- Porovnateľné
- Serializovateľné
Implementácia Tuple
Implementácia n-tice v Jave je veľmi jednoduchá. Musíme vytvoriť inštanciu triedy tuple, ktorá zodpovedá veľkosti.
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ýkon:
The details of the employee are: [Sophia, Female, 22, Marketing Manager]
Tuple Operations
Na n-tici je možné vykonať nasledujúce operácie:
rozdiel medzi $ a $ $
- Vytvorenie Tuple
- Získavanie hodnôt
- Nastavenie hodnôt
- Pridávanie prvkov
- Iterujte cez Tuple
- Previesť tuple na zoznam
- Hľadá sa v Tuple
Vytváranie Tuple
Existujú tri spôsoby, ako vytvoriť n-ticu:
- Pomocou metódy with().
- Pomocou konštruktora
- Pomocou kolekcie
Pozrime sa na vyššie uvedené tri spôsoby vytvorenia n-tice.
Pomocou metódy with().
Knižnica javatuples poskytuje s () metóda, ktorá vytvorí n-ticu so zadanými hodnotami. Metóda patrí medzi org.javatuples.Pair balík. Používa sa na vytváranie inštancií objektov s hodnotami.
Syntax:
ClassName object = ClassName.with(value-1, value-2, ......, value-n);
Príklad:
Pair pair = Pair.with('iPhone 12', 112000.00);
Vyššie uvedený objekt triedy Pair vytvorí n-ticu s dvoma hodnotami. Vytvorme pre to Java program.
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ýkon:
[9086651, Dell Laptop]
Pomocou konštruktora
V tomto prípade vytvoríme konštruktor triedy podľa požiadavky.
Syntax:
ClassName object = new ClassName (value-1, value-2, ……., value-n);
Príklad:
anakonda vs pytónový had
Quintet quintet = new Quintet (91237, 'Mac Book Air', 88490.00, '8-Core CPU', 4);
Vytvorme Java program na vytvorenie n-tice pomocou konštruktora.
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ýkon:
[91237, Mac Book Air, 88490.0, 8-Core CPU, 4]
Pomocou kolekcie
Knižnica javatuples nám umožňuje vytvoriť n-ticu z kolekcie pomocou fromCollection() metóda. Umožňuje nám tiež vytvoriť n-ticu z poľa pomocou príkazu fromArray() metóda. Všimnite si, že kolekcia/pole musí mať rovnaký typ a hodnoty ako n-tica.
Kolekcia/pole musí mať rovnaký typ ako Tuple a počet hodnôt v kolekcii/pole sa musí zhodovať s triedou Tuple.
Syntax:
ClassName object = ClassName.fromCollection(list); ClassName object = ClassName.fromArray(array);
Prí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ýkon:
[C, C++, Java, Python, Scala, Ruby, PHP, COBOL] [One, Two, Three, Four, Five, Six]
Získajte hodnoty
Knižnica javatuples nám tiež umožňuje získať hodnoty z n-tice na zadanom indexe pomocou getValueX() metóda. Kde X označuje hodnotu indexu objektu. Indexovanie začína od 0.
Prí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ýkon:
[Andrew]
Nastavte hodnoty
Ako sme diskutovali vyššie, n-tice sú nemenné. Po vytvorení ich teda nemožno upravovať. Na prekonanie tohto problému poskytuje knižnica javatuples setValueX() metóda. Kde X je hodnota indexu, pri ktorej chceme nastaviť konkrétnu hodnotu. Metóda vytvorí kópiu n-tice s novo pridanou hodnotou pri zadanom indexe a vráti rovnakú n-ticu.
Prí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ýkon:
[67, 68]
Pridanie hodnoty
Existujú dva spôsoby, ako pridať hodnoty do n-tice:
- Na konci tuple
- Pri konkrétnom indexe
Na konci Tuple
Knižnica javatuples poskytuje pridať () metóda na pridávanie objektov do n-tice. Pridá objekt na koniec n-tice a vráti novú n-ticu podľa počtu prvkov.
Predpokladajme, že máme n-ticu s dvoma prvkami a chceme k n-tici pridať ďalší prvok. V takom prípade dvojica nebude podporovať tretí prvok. Preto, keď pridáme prvok do párovej n-tice, prevedie sa na trojitú n-ticu. Pozrime sa na príklad.
char to int java
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ýkon:
[Jack, 46] [Jack, 46, Finance Professional]
Môžeme tiež pridať jednu n-ticu k druhej n-tici. Zvyšuje počet prvkov v novo vygenerovanej n-tici. Preto vráti typ n-tice na základe počtu prvkov prítomných po pridaní.
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ýkon:
[Mango, Grapes, Papaya] [Mango, Banana, Grapes, Papaya] [Mango, Banana, Grapes, Papaya, Mango, Grapes, Papaya]
Pri špecifikovanom indexe
Štandardne sa nové prvky pridávajú na koniec n-tice. Ale môžeme pridať prvky v zadanom indexe pomocou addX() metóda.
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ýkon:
[MCA, M.Sc., MBBS] [MCA, M.Sc., M.Tech, MBBS]
Hľadanie prvku
Môžeme tiež hľadať prvok, ktorý sa nachádza v n-tici. Pre vyhľadávanie javatuples knižnica poskytuje obsahuje() metóda triedy Tuple. Vracia boolovskú hodnotu pravda ak je prvok prítomný, vráti sa else falošný . Pozrime sa na prí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ýkon:
true false
Konvertovať tuple na kolekciu alebo pole
Každá trieda n-tice má metódy asList() a toArray(), ktoré vrátia List a Array. Pozrime sa na prí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ýkon:
binárne vyhľadávanie
[Dog, 12, German Shepherd, 23.89] [Dog, 12, German Shepherd, 23.89]
Všimnite si, že tuple môže obsahovať heterogénne typy, takže výsledný typ bude z Zoznam alebo objekt[] podľa toho.
Iterácia cez Tuple
Všetky triedy tuple implementujú Iterovateľné rozhranie. Takže môžeme iterovať n-ticu rovnakým spôsobom ako kolekcie alebo polia.
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ýkon:
Dell 5600.0 34 Digital Solutions
Tuple vs. Zoznam/Pole
Násobný | Zoznam |
---|---|
Je to súbor hodnôt oddelených čiarkou, ktoré sú uzavreté v zátvorka . | Je to súbor hodnôt oddelených čiarkou, ktoré sú uzavreté v hranaté zátvorky . |
Zátvorka je voliteľné . | Hranaté zátvorky sú povinné . |
to je nemenný . | to je premenlivé . |
Vyžaduje to menej Pamäť. | Vyžaduje si to viac pamäte. |
Má menej továrenské metódy. | Má viac továrenské metódy. |
Má a pevné dĺžka. | Má premenlivý dĺžky. |
Ukladá heterogénne údajov. | Ukladá homogénne údajov. |
Je vhodný pre veľký množstvo údajov. | Je vhodný pre a malý množstvo dát. |
Môže byť uložený v a zoznam . | Môže byť uložený vo vnútri a násobný . |
to je rýchlejšie v porovnaní so Zoznamom. | to je pomalšie v porovnaní s tuple. |
Je reprezentovaný ako t1 = (1, 2, 3, 4, 5) | Je reprezentovaný ako l1 = [1, 2, 3, 4, 5] |