logo

Java Tuple'ı

A demet farklı türdeki nesneleri tutabilen bir veri yapısıdır. Bu nesneler birbirleriyle bağlantılı değildir ancak toplu olarak ele aldığımızda anlam kazanırlar. Bu bölümde tartışıyoruz tuple nedir , özellikler, boyut, Ve operasyonlar tuple'lardan. Ayrıca şunları tartışacağız Java'da tuple uygulaması .

Tuple nedir?

Genel olarak, bir demet nesnelerin sıralı bir koleksiyonudur. Tuple'da veriler ayrı bir bayt dizisinde bir nesne olarak depolanır. Bir çift köşeli parantez [] içine alınmış virgülle ayrılmış değerlere sahiptir. Tuple'lar değişmez, Listelerin veri yapısından farklı olarak. Bir demet birden fazla tuple tutabilir. Aynı zamanda anonim bir nesne olarak da düşünülebilir.

Tuple'ın Özellikleri

Tuple aşağıdaki özelliklere sahiptir:

  • Bu yazım açısından güvenli, yinelenebilir, değişmez, Ve serileştirilebilir .
  • Şunu uygular: toString(), eşittir(), Ve hashCode()
  • Aynı zamanda şunları da uygular: Karşılaştırılabilir (Tuple, Karşılaştırılabilir'i uygular)

Grup Örneği

Aşağıdaki örneği ele alalım.

 ['Sophia', 'Female', 22, 'Marketing Manager'] 

Yukarıdaki tuple bir dörtlü tuple çünkü var dört öğeler (nesneler). Her nesnenin farklı türde olduğunu gözlemliyoruz. Ama toplu olarak ele aldığımızda belli bir anlamı var. Yukarıdaki demet bir çalışanın adı, cinsiyeti, yaşı ve unvanı gibi verilerini temsil eder.

Diğer bazı tuple örneklerini görelim.

 ['Java', 'Object-oriented', 14] ['John', 'Wick' 21, 'USA', false, '[email protected]'] [3, 'Samsung', 'Galaxy S2', 37000.00] 

Java'da Tuple

Java'da tuple, her öğeyi bir nesne olarak ele alan genel bir veri yapısıdır ve bu nesneler ayrı bir bayt dizisinde depolanır. Başka bir deyişle Tuple'ın bir olduğunu da söyleyebiliriz. sipariş edildi farklı türdeki nesnelerin toplanması.

Bir demetin işlevselliği, Liste ve Dizi veri yapısı kullanılarak uygulanabilir, ancak bu veri yapıları, tasarım gereği farklı türdeki veri türlerini tutmaz. Dolayısıyla açıktır ki heterojen Standart bir veri yapısı (Liste/Dizi) kullanan tuple Java'da mümkün değildir. Biz gerekli olduğundan demet tutma gerekliliğini yerine getirecek veri yapısı homojen veri yapısı.

Dikkat Java programlamada tuple veri yapısı mevcut değil , varsayılan olarak. Ancak tuple veri yapısını adlı üçüncü taraf kütüphanesini kullanarak uygulayabiliriz. java tuple'lar .

Uygulamaya geçmeden önce öncelikle aşağıdaki dosyayı indireceğiz. javatuples.jar dosya. Ve bu dosyayı projenin yoluna ekleyin.

Aşağıdaki bağımlılığı da kullanabiliriz. pom.xml Java'da tuples veri yapısını uygulamak için dosya.

 org.javatuples javatuples 1.2 

Bir Tuple uygulayalım ve basit bir Java Tuple programı oluşturalım.

java koleksiyonları

Javatuples Kütüphanesi

java tuple'lar kütüphane, bir demet boyutuna karşılık gelen demet sınıflarına sahiptir. Tuple'ların boyutları farklı olabilir. Bir demet maksimum tutabilir 10 elementler. Her tuple'ın uygulanması farklıdır. Sınıf hiyerarşisi aşağıdaki gibidir.

 Java.lang.Object ↳ org.javatuples.Tuple ↳ org.javatuples.ClassName 

Java Tuple Sınıfı

Grup ait olan tüm demet sınıfları için soyut bir temel sınıftır. org.javatuples paket. Tuple sınıfının tüm yöntemleri genel ve nihaidir. Aşağıdaki tabloda Tuple sınıfının yöntemleri özetlenmektedir. Yinelenebilir ve Serileştirilebilir arayüzleri uygular.

Yöntem Sözdizimi Tanım
içerir() genel final boolean içerir(Java.lang.Object değeri) Tuple'ın belirli bir öğeye sahip olup olmadığını kontrol eder.
Tümünü içerir() genel final boolean includeAll(java.util.Collection koleksiyonu) Bu demet belirtilen koleksiyonun (Liste/Dizi) tüm öğelerini içeriyorsa true değerini döndürür.
eşittir() genel son boole eşittir (Java.lang.Object obj) geçersiz kılar eşittir() Object sınıfının yöntemi.
getSize() genel özet int getSize() Tuple boyutunu döndürür.
Değer elde etmek() genel final Java.lang.Object getValue(int pos) Değeri tanımlama grubu içindeki belirli bir konumda alın. Bu yöntemin nesneyi döndürmesi gerekir, bu nedenle onu kullanarak elde ettiğiniz tür güvenliğini kaybedersiniz. getValueX() yöntemler.
hash kodu() genel final int hashCode() Dize için bir karma kodu döndürür. geçersiz kılar hash kodu() Object sınıfının yöntemi.
indeksi() public final int indexOf(Java.lang.Object value) Belirtilen alt dizenin ilk oluşumuna ilişkin bu dize içindeki dizini döndürür.
yineleyici() genel final java.util.Iterator iterator() Bu demetteki öğeler üzerinde uygun sırayla bir yineleyici döndürür.
lastIndexOf() public final int lastIndexOf(java.lang.Object value) Belirtilen alt dizenin son oluşumunun bu dize içindeki dizini döndürür.
sıralamak() genel final Java.lang.Object[] toArray() Tuple'ı bir diziye dönüştürür.
toString() genel final Java.lang.String toString() Nesnenin dize temsilini döndürür. Object sınıfının toString() yöntemini geçersiz kılar.
Listeye() genel final Java.util.List toList() Tuple'ı bir listeye dönüştürür.

Doğrudan Bilinen Alt Sınıflar

Tuple Boyutu Tuple Sınıf Adı Örnek
Tek Eleman Birim Birim
İki Unsur Çift Çift
Üç Unsur Üçlü Üçlü
Dört element Dörtlü Dörtlü
Beş element Beşli Beşli
Altı Element Altılı Altılı
Yedi Element Yedi Yedi
Sekiz Element sekizli sekizli
Dokuz Element Ennead Ennead
On Element On yıl On yıl

Yukarıdaki sınıfların yanı sıra javatuples kütüphanesi tarafından sağlanan iki ek sınıf daha vardır; AnahtarDeğeri Ve Etiket Değeri . Bu iki sınıf birbirine benzer Çift sınıf ve aynı işlevselliği ancak farklı anlamlarda sağlar.

Her tuple sınıfı aşağıdaki üç arayüzü uygular:

  • Tekrarlanabilir
  • Karşılaştırılabilir
  • Serileştirilebilir

Tuple'ın Uygulanması

Java'da bir Tuple'ın uygulanması çok kolaydır. Boyuta karşılık gelen bir tuple sınıfı örneği oluşturmalıyız.

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); } } 

Çıktı:

 The details of the employee are: [Sophia, Female, 22, Marketing Manager] 

Grup İşlemleri

Bir tuple üzerinde aşağıdaki işlemler gerçekleştirilebilir:

  • Bir Tuple Oluşturma
  • Değerleri Alma
  • Değerlerin Ayarlanması
  • Öğe Ekleme
  • Tuple üzerinde yineleme
  • Tuple'ı Listeye Dönüştür
  • Tuple'da arama

Tuple Oluşturma

Bir demet oluşturmanın üç yolu vardır:

  • with() Yöntemini Kullanarak
  • Yapıcı Kullanarak
  • Koleksiyonu Kullanarak

Bir demet oluşturmanın yukarıdaki üç yolunu görelim.

with() Yöntemini Kullanarak

javatuples kütüphanesi şunları sağlar: ile() Belirtilen değerlere sahip bir tuple oluşturan yöntem. Yöntem şuraya aittir: org.javatuples.Pair paket. Nesneleri değerlerle somutlaştırmak için kullanılır.

Sözdizimi:

 ClassName object = ClassName.with(value-1, value-2, ......, value-n); 

Örnek:

 Pair pair = Pair.with('iPhone 12', 112000.00); 

Yukarıdaki Pair sınıfı nesnesi iki değere sahip bir tanımlama grubu oluşturur. Bunun için bir Java programı oluşturalım.

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); } } 

Çıktı:

 [9086651, Dell Laptop] 

Yapıcı Kullanarak

Bu durumda ihtiyaca göre sınıfın bir yapıcısını oluşturuyoruz.

Sözdizimi:

 ClassName object = new ClassName (value-1, value-2, ……., value-n); 

Örnek:

 Quintet quintet = new Quintet (91237, 'Mac Book Air', 88490.00, '8-Core CPU', 4); 

Yapıcıyı kullanarak bir tuple oluşturmak için bir Java programı oluşturalım.

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); } } 

Çıktı:

 [91237, Mac Book Air, 88490.0, 8-Core CPU, 4] 

Koleksiyonu Kullanarak

Javatuples kütüphanesi, koleksiyondan bir Tuple oluşturmamızı sağlar. fromCollection() yöntem. Ayrıca, kullanarak bir diziden bir demet oluşturmamıza da olanak tanır. fromArray() yöntem. Koleksiyon/dizinin tuple ile aynı tip ve değerlere sahip olması gerektiğini unutmayın.

Koleksiyon/dizi Tuple ile aynı türde olmalı ve koleksiyon/dizideki değerlerin sayısı Tuple sınıfıyla eşleşmelidir.

Sözdizimi:

 ClassName object = ClassName.fromCollection(list); ClassName object = ClassName.fromArray(array); 

Örnek:

 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); } } 

Çıktı:

 [C, C++, Java, Python, Scala, Ruby, PHP, COBOL] [One, Two, Three, Four, Five, Six] 

Değerleri al

javatuples kütüphanesi aynı zamanda belirtilen dizindeki tuple'dan değerleri aşağıdakileri kullanarak almamıza da olanak tanır: getValueX() yöntem. Burada X, nesnenin indeks değerini belirtir. İndeksleme 0'dan başlar.

Örnek:

 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()); } } 

Çıktı:

 [Andrew] 

Değerleri ayarlayın

Yukarıda tartıştığımız gibi demetler değişmezdir. Bu nedenle oluşturulduktan sonra değiştirilemezler. Sorunun üstesinden gelmek için javatuples kütüphanesi şunları sağlar: setValueX() yöntem. Burada X, belirli bir değeri ayarlamak istediğimiz dizin değeridir. Yöntem, belirtilen dizinde yeni eklenen değere sahip tuple'ın bir kopyasını oluşturur ve aynı tuple'ı döndürür.

Örnek:

 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); } } 

Çıktı:

 [67, 68] 

Değer Katmak

Bir tanımlama grubuna değer eklemenin iki yolu vardır:

  • Tuple'ın sonunda
  • Belirli bir Dizinde

Tuple'ın sonunda

javatuples kütüphanesi şunları sağlar: eklemek() Tuple'a nesne ekleme yöntemi. Nesneyi demetin sonuna ekler ve öğe sayısını eşleştirerek yeni bir demet döndürür.

Diyelim ki iki öğeli bir demetimiz var ve bu demet'e başka bir öğe eklemek istiyoruz. Böyle bir durumda Pair tuple üçüncü elemanı desteklemeyecektir. Bu nedenle, Pair tuple'a bir öğe eklediğimizde, bu bir Triplet tuple'a dönüştürülür. Bir örnek görelim.

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); } } 

Çıktı:

 [Jack, 46] [Jack, 46, Finance Professional] 

Ayrıca bir tuple'ı başka bir tuple'a da ekleyebiliriz. Yeni oluşturulan demetteki öğe sayısını artırır. Dolayısıyla, eklemeden sonra mevcut olan öğe sayısına bağlı olarak demet türünü döndürür.

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); } } 

Çıktı:

 [Mango, Grapes, Papaya] [Mango, Banana, Grapes, Papaya] [Mango, Banana, Grapes, Papaya, Mango, Grapes, Papaya] 

Belirtilen Dizinde

Varsayılan olarak yeni öğeler tuple'ın sonuna eklenir. Ancak belirtilen dizindeki öğeleri aşağıdakileri kullanarak ekleyebiliriz: addX() yöntem.

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); } } 

Çıktı:

 [MCA, M.Sc., MBBS] [MCA, M.Sc., M.Tech, MBBS] 

Bir Eleman Aramak

Tuple'da bulunan bir öğeyi de arayabiliriz. Javatuples kütüphanesini aramak için şunları sağlar: içerir() Tuple sınıfının yöntemi. Bir Boolean değeri döndürür doğru eğer bir eleman mevcutsa, aksi takdirde geri döner YANLIŞ . Bir örnek görelim.

ArananElementExample.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); } } 

Çıktı:

 true false 

Tuple'ı Koleksiyona veya Diziye Dönüştür

Her bir demet sınıfı, sırasıyla List ve Array değerini döndüren asList() ve toArray() yöntemlerine sahiptir. Bir örnek görelim.

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)); } } 

Çıktı:

 [Dog, 12, German Shepherd, 23.89] [Dog, 12, German Shepherd, 23.89] 

Tuple'ın heterojen türler içerebileceğini ve dolayısıyla ortaya çıkan türün şu şekilde olacağını unutmayın: Liste veya Nesne[] buna göre.

Tuple Üzerinden Yineleme

Tüm Tuple sınıfları bunu uygular Tekrarlanabilir arayüz. Böylece bir tuple'ı koleksiyonlar veya dizilerle aynı şekilde yineleyebiliriz.

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); } } } 

Çıktı:

 Dell 5600.0 34 Digital Solutions 

Tuple Vs. Liste/Dizi

Java Tuple'ı
Grup Liste
İçine alınmış virgülle ayrılmış değerler kümesidir. parantez . İçine alınmış virgülle ayrılmış değerler kümesidir. köşeli parantez .
Parantez: isteğe bağlı . Köşeli parantezler zorunlu .
Bu değişmez . Bu değişken .
Gerektirir az hafıza. Daha fazla hafıza gerektirir.
Var daha az fabrika yöntemleri. Var Daha fabrika yöntemleri.
Bir sabit uzunluk. Var değişken uzunluklar.
Depolar heterojen veri. Depolar homojen veri.
Şunlar için uygundur: büyük miktarda veri. Bir için uygundur küçük data miktarı.
Bir yerde saklanabilir liste . Bir içinde saklanabilir demet .
Bu Daha hızlı Listeyle karşılaştırıldığında. Bu Yavaş Tuple ile karşılaştırıldığında.
Olarak temsil edilir t1 = (1, 2, 3, 4, 5) Olarak temsil edilir l1 = [1, 2, 3, 4, 5]