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