logo

Кортеж Java

А кортеж це структура даних, яка може містити об’єкти різних типів. Ці об’єкти не пов’язані один з одним, але мають значення, коли ми розглядаємо їх разом. У цьому розділі ми обговорюємо що таке кортеж , характеристики, розмір, і операції кортежів. Також ми обговоримо реалізація кортежу в Java .

Що таке кортеж?

Загалом, а кортеж це впорядкована сукупність об’єктів. У кортежі дані зберігаються як об'єкт в окремому масиві байтів. Він містить значення, розділені комами, у квадратних дужках []. Кортежі є незмінний, на відміну від структури даних Lists. Кортеж може містити кілька кортежів. Його також можна розглядати як анонімний об'єкт.

Особливості Tuple

Tuple має такі особливості:

  • Це є typesafe, iterable, 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 кортеж — це загальна структура даних, яка розглядає кожен елемент як об’єкт, і ці об’єкти зберігаються в окремому масиві байтів. Іншими словами, ми також можемо сказати, що кортеж є замовив колекція предметів різного типу.

Функціональність кортежу можна реалізувати за допомогою структури даних «Список» і «Масив», але ці структури даних не містять різних типів даних. Звідси зрозуміло, що неоднорідний кортеж із використанням стандартної структури даних (список/масив) неможливий у 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

The Кортеж є абстрактним базовим класом для всіх класів кортежів, до якого належить org.javatuples пакет. Усі методи класу 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() public final java.lang.Object getValue(int pos) Отримати значення в певній позиції в кортежі. Цей метод має повертати об’єкт, тому, використовуючи його, ви втратите безпеку типів, яку отримуєте з getValueX() методи.
hashCode() public final int hashCode() Він повертає хеш-код для рядка. Це перекриває hashCode() метод класу Object.
indexOf() public final int indexOf(java.lang.Object value) Він повертає індекс у цьому рядку першого входження вказаного підрядка.
ітератор() public final java.util.Iterator iterator() Він повертає ітератор для елементів цього кортежу в належній послідовності.
lastIndexOf() public final int lastIndexOf(java.lang.Object value) Він повертає індекс у цьому рядку останнього входження вказаного підрядка.
toArray() public final java.lang.Object[] toArray() Він перетворює кортеж на масив.
toString() public final java.lang.String toString() Він повертає рядкове представлення об’єкта. Замінює метод toString() класу Object.
toList() public final java.util.List toList() Він перетворює кортеж на список.

Прямі відомі підкласи

Розмір кортежу Назва класу кортежу приклад
Один елемент одиниця одиниця
Дві стихії Пара Пара
Три стихії Триплет Триплет
Чотири стихії Квартет Квартет
П'ять стихій Квінтет Квінтет
Шість стихій Секстет Секстет
Сім стихій сім сім
Вісім стихій Октет Октет
Дев'ять стихій Еннеад Еннеад
Десять стихій десятиліття десятиліття

Крім зазначених вище класів, є два додаткових класи, надані бібліотекою javatuples, тобто KeyValue і LabelValue . Ці два класи схожі на Пара класу та забезпечують однакову функціональність, але в іншій семантиці.

Кожен клас кортежу реалізує такі три інтерфейси:

  • Повторювані
  • Порівнянний
  • Серіалізований

Реалізація Tuple

Реалізація кортежу в Java дуже проста. Ми повинні створити екземпляр класу кортежу, який відповідає розміру.

TupleExample.java

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] 

Операції з кортежами

Над кортежем можна виконувати такі операції:

  • Створення кортежу
  • Отримання значень
  • Налаштування значень
  • Додавання елементів
  • Ітерація по кортежу
  • Перетворення кортежу на список
  • Пошук у кортежі

Створення кортежу

Існує три способи створення кортежу:

  • За допомогою методу 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

 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() метод. Зауважте, що колекція/масив має мати той самий тип і значення, що й кортеж.

Колекція/масив має мати той самий тип, що й кортеж, а кількість значень у колекції/масиві має відповідати класу кортежу.

Синтаксис:

 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 

Перетворення кортежу на колекцію або масив

Кожен клас кортежу має методи 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 

кортеж проти Список/Масив

Кортеж Java
Кортеж Список
Це набір значень, розділених комами, укладених у дужка . Це набір значень, розділених комами, укладених у квадратні дужки .
Дужка є необов'язковий . Квадратні дужки є обов'язковий .
Це є незмінний . Це є мінливий .
Це вимагає менше пам'ять. Це вимагає більше пам'яті.
Це має менше фабричні методи. Це має більше фабричні методи.
Він має a фіксований довжина. Це має змінна довжини.
Він зберігає неоднорідний даних. Він зберігає однорідний даних.
Він підходить для великий обсяги даних. Він підходить для a маленький кількість даних.
Його можна зберігати в a список . Його можна зберігати всередині a кортеж .
Це є швидше порівняно зі Списком. Це є повільніше порівняно з кортежем.
Він представлений як t1 = (1, 2, 3, 4, 5) Він представлений як l1 = [1, 2, 3, 4, 5]