А кортеж е структура от данни, която може да съдържа обекти от различни типове. Тези обекти не са свързани един с друг, но имат значение, когато ги разглеждаме колективно. В този раздел обсъждаме какво е кортеж , характеристики, размер, и операции от кортежи. Освен това ще обсъдим реализация на кортежи в Java .
Какво е кортеж?
Като цяло, а кортеж е подредена колекция от обекти. В кортеж данните се съхраняват като обект в отделен байтов масив. Има стойности, разделени със запетая, оградени в двойка квадратни скоби []. Кортежите са неизменен, за разлика от структурата на данните Lists. Един кортеж може да съдържа множество кортежи. Може да се разглежда и като анонимен обект.
Характеристики на Tuple
Tuple има следните характеристики:
- то е typesafe, итерируем, immutable, и може да се сериализира .
- Той прилага toString(), равно на(), и hashCode()
- Той също така прилага Сравними (Tuple реализира Comparable)
Пример за кортеж
Нека разгледаме следния пример.
['Sophia', 'Female', 22, 'Marketing Manager']
Горният кортеж е a квартет кортеж, защото има четири елементи (обекти). Забелязваме, че всеки обект е от различен тип. Но когато го разглеждаме колективно, то има конкретно значение. Горният кортеж представлява данните на служител като име, пол, възраст и длъжност.
Нека видим някои други примери за кортежи.
['Java', 'Object-oriented', 14] ['John', 'Wick' 21, 'USA', false, '[email protected]'] [3, 'Samsung', 'Galaxy S2', 37000.00]
Кортеж в Java
В Java кортежът е обща структура от данни, която третира всеки елемент като обект и тези обекти се съхраняват в отделен байтов масив. С други думи, можем също да кажем, че tuple е an поръчан колекция от предмети от различен тип.
Функционалността на кортеж може да бъде реализирана с помощта на структурата от данни List и Array, но тези структури от данни не съдържат различни типове типове данни по дизайн. Следователно е ясно, че разнородни кортеж, използващ стандартна структура от данни (списък/масив), не е възможен в Java. Тъй като изисквахме кортеж структура на данните, за да изпълни изискването за държане хомогенен структура на данни.
Забележи, че структура от кортежни данни не присъства в програмирането на Java , по подразбиране. Но ние можем да внедрим структурата от кортежни данни, като използваме библиотеката на трета страна, наречена javatuples .
Преди да преминем към изпълнението, първо ще изтеглим javatuples.jar файл. И добавете този файл към пътя на проекта.
Можем също да използваме следната зависимост в pom.xml файл за внедряване на структурата от данни на кортежи в Java.
org.javatuples javatuples 1.2
Нека внедрим кортеж и създадем проста програма с кортежи на Java.
Библиотека Javatuples
The javatuples библиотеката има класове кортежи, които съответстват на размера на кортеж. Кортежите могат да бъдат различни по размер. Един кортеж може да съдържа максимум 10 елементи. Реализацията на всеки кортеж е различна. Класовата йерархия е следната.
Java.lang.Object ↳ org.javatuples.Tuple ↳ org.javatuples.ClassName
Java Tuple клас
The Кортеж е абстрактен базов клас за всички класове от кортежи, към които принадлежи org.javatuples пакет. Всички методи на класа tuple са публични и окончателни. Следната таблица обобщава методите на класа tuple. Той реализира итерируеми и сериализируеми интерфейси.
Метод | Синтаксис | Описание |
---|---|---|
съдържа() | public final boolean съдържа (java.lang.Object стойност) | Той проверява дали кортежът има конкретен елемент или не. |
съдържа Всички() | public final boolean containsAll(java.util.Collection collection) | Връща true, ако този кортеж съдържа всички елементи от посочената колекция (списък/масив). |
равно на() | public final boolean equals(java.lang.Object obj) | Заменя равно на() метод на класа Object. |
getSize() | public abstract int getSize() | Връща размера на кортежа. |
getValue() | публичен окончателен java.lang.Object getValue(int pos) | Вземете стойността на конкретна позиция в кортежа. Този метод трябва да върне обект, така че с него ще загубите безопасността на типа, която получавате с getValueX() методи. |
хеш код() | public final int hashCode() | Той връща хеш код за низа. Той отменя хеш код() метод на класа Object. |
индекс на() | public final int indexOf(java.lang.Object value) | Той връща индекса в рамките на този низ на първото срещане на посочения подниз. |
итератор() | публичен окончателен java.util.Iterator iterator() | Той връща итератор върху елементите в този кортеж в правилна последователност. |
lastIndexOf() | public final int lastIndexOf(java.lang.Object value) | Той връща индекса в този низ на последното срещане на посочения подниз. |
toArray() | публичен окончателен java.lang.Object[] toArray() | Той преобразува кортежа в масив. |
toString() | публичен финал java.lang.String toString() | Връща низово представяне на обекта. Заменя метода toString() на класа Object. |
toList() | публичен окончателен java.util.List toList() | Той преобразува кортежа в списък. |
Директни известни подкласове
Размер на Tuple | Име на клас кортеж | Пример |
---|---|---|
Един елемент | Мерна единица | Мерна единица |
Два елемента | чифт | чифт |
Три елемента | Триплет | Триплет |
Четири елемента | Квартет | Квартет |
Пет елемента | квинтет | квинтет |
Шест елемента | Секстет | Секстет |
Седем елемента | седем | седем |
Осем елемента | Октет | Октет |
Девет елемента | Ennead | Ennead |
Десет елемента | Десетилетие | Десетилетие |
Освен горните класове, има два допълнителни класа, предоставени от библиотеката на javatuples, т.е. KeyValue и LabelValue . Тези два класа са подобни на чифт клас и осигуряват същата функционалност, но в различна семантика.
Всеки клас от кортежи имплементира следните три интерфейса:
- Итерируем
- Сравними
- Може да се сериализира
Внедряване на Tuple
Имплементирането на кортеж в Java е много лесно. Трябва да създадем екземпляр на клас кортеж, който съответства на размера.
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); } }
Изход:
The details of the employee are: [Sophia, Female, 22, Marketing Manager]
Операции с кортежи
Следните операции могат да бъдат извършени върху кортеж:
- Създаване на кортеж
- Получаване на стойности
- Задаване на стойности
- Добавяне на елементи
- Итерация върху Tuple
- Преобразуване на кортеж в списък
- Търсене в Tuple
Създаване на Tuple
Има три начина за създаване на кортеж:
- Чрез използване на метода with().
- С помощта на Конструктор
- Чрез използване на колекция
Нека видим горните три начина за създаване на кортеж.
Чрез използване на метода with().
Библиотеката javatuples предоставя с() метод, който създава кортеж с посочените стойности. Методът принадлежи към org.javatuples.Pair пакет. Използва се за инстанциране на обекти със стойности.
Синтаксис:
ClassName object = ClassName.with(value-1, value-2, ......, value-n);
Пример:
Pair pair = Pair.with('iPhone 12', 112000.00);
Горният обект от клас Pair създава кортеж с две стойности. Нека създадем Java програма за същото.
CreateTupleExample1.java
как да конвертирате низ в int
import org.javatuples.Pair; class CreateTupleExample1 { public static void main(String args[]) { Pair pair = Pair.with(9086651, 'Dell Laptop'); System.out.println(pair); } }
Изход:
[9086651, Dell Laptop]
С помощта на Конструктор
В този случай създаваме конструктор на класа, според изискването.
Синтаксис:
ClassName object = new ClassName (value-1, value-2, ……., value-n);
Пример:
Quintet quintet = new Quintet (91237, 'Mac Book Air', 88490.00, '8-Core CPU', 4);
Нека създадем Java програма за създаване на кортеж с помощта на конструктор.
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); } }
Изход:
[91237, Mac Book Air, 88490.0, 8-Core CPU, 4]
Чрез използване на колекция
Библиотеката javatuples ни позволява да създадем кортеж от колекцията, като използваме fromCollection() метод. Също така ни позволява да създадем кортеж от масив, като използваме fromArray() метод. Имайте предвид, че колекцията/масивът трябва да има същия тип и стойности като кортежа.
Колекцията/масивът трябва да има същия тип като Tuple и броят на стойностите в колекцията/масива трябва да съответства на класа Tuple.
Синтаксис:
ClassName object = ClassName.fromCollection(list); ClassName object = ClassName.fromArray(array);
Пример:
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); } }
Изход:
[C, C++, Java, Python, Scala, Ruby, PHP, COBOL] [One, Two, Three, Four, Five, Six]
Вземете стойности
Библиотеката javatuples също ни позволява да извличаме стойности от кортежа при посочения индекс, като използваме getValueX() метод. Където X означава стойността на индекса на обекта. Индексирането започва от 0.
Пример:
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()); } }
Изход:
[Andrew]
Задайте стойности
Както обсъдихме по-горе, кортежите са неизменни. Следователно те не могат да бъдат модифицирани, след като бъдат създадени. За да преодолее проблема, библиотеката javatuples предоставя setValueX() метод. Където X е стойността на индекса, на която искаме да зададем конкретната стойност. Методът създава копие на кортежа с новодобавената стойност при посочения индекс и връща същия кортеж.
Пример:
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); } }
Изход:
[67, 68]
Добавяне на стойност
Има два начина за добавяне на стойности в кортеж:
- В края на кортежа
- При конкретен индекс
В края на Кортежа
Библиотеката javatuples предоставя добави () метод за добавяне на обекти към кортежа. Той добавя обекта в края на кортежа и връща нов кортеж, като съответства на броя на елементите.
Да предположим, че имаме кортеж с два елемента и искаме да добавим още един елемент към кортежа. В такъв случай кортежът Pair няма да поддържа третия елемент. Следователно, когато добавим елемент към кортеж Pair, той се преобразува в кортеж Triplet. Да видим един пример.
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); } }
Изход:
[Jack, 46] [Jack, 46, Finance Professional]
Можем също да добавим един кортеж към друг кортеж. Той увеличава броя на елементите в новогенерирания кортеж. Следователно, той връща типа на кортежа въз основа на броя на присъстващите елементи след добавянето.
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); } }
Изход:
[Mango, Grapes, Papaya] [Mango, Banana, Grapes, Papaya] [Mango, Banana, Grapes, Papaya, Mango, Grapes, Papaya]
На посочения индекс
По подразбиране нови елементи се добавят в края на кортежа. Но можем да добавим елементи към посочения индекс, като използваме addX() метод.
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); } }
Изход:
[MCA, M.Sc., MBBS] [MCA, M.Sc., M.Tech, MBBS]
Търсене на елемент
Можем също да търсим елемент, който се намира в кортежа. За търсене библиотеката на javatuples предоставя съдържа() метод на класа Tuple. Връща булева стойност вярно ако елемент присъства, else се връща невярно . Да видим един пример.
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); } }
Изход:
true false
Преобразувайте Tuple в колекция или масив
Всеки клас от кортежи има методи asList() и toArray(), които връщат съответно List и Array. Да видим един пример.
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)); } }
Изход:
[Dog, 12, German Shepherd, 23.89] [Dog, 12, German Shepherd, 23.89]
Обърнете внимание, че кортежът може да съдържа разнородни типове, така че полученият тип ще бъде от списък или Обект[] съответно.
Итерация върху кортеж
Всички класове на кортежи изпълняват Итерируем интерфейс. Така че можем да итерираме кортеж по същия начин като колекции или масиви.
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); } } }
Изход:
Dell 5600.0 34 Digital Solutions
Tuple Vs. Списък/Масив
Кортеж | списък |
---|---|
Това е набор от стойности, разделени със запетая, които са затворени в скоба . | Това е набор от стойности, разделени със запетая, които са затворени в квадратни скоби . |
Скоби е по желание . | Квадратните скоби са задължителен . |
то е неизменен . | то е променлив . |
То изисква по-малко памет. | Изисква повече памет. |
То има по-малко фабрични методи. | То има Повече ▼ фабрични методи. |
Има фиксирани дължина. | То има променлива дължини. |
Съхранява разнородни данни. | Съхранява хомогенен данни. |
Подходящ е за голям количества данни. | Подходящ е за а малък количество данни. |
Може да се съхранява в a списък . | Може да се съхранява вътре в a кортеж . |
то е по-бързо в сравнение с List. | то е по-бавно в сравнение с кортежа. |
Представен е като t1 = (1, 2, 3, 4, 5) | Представен е като l1 = [1, 2, 3, 4, 5] |