Set yinelenen değerleri kabul ediyor mu?
Bir “kümeye” yinelenen değerler eklemeye çalışırsak, ne olacak? Herhangi bir şikayetçi hata alıyor muyuz
Bir “kümeye” yinelenen değerler eklemeye çalıştığımızda, yinelenen değerleri eklemez. Set arayüzünün “Ekle” yöntemi, öğenin başarıyla eklenip eklenmediğini belirten bir boole değeri döndürür. Yinelenen bir değer eklemeye çalışırsak, yöntem yanlış döndürür. Bu davranış, Java ve Swift gibi farklı programlama dillerinde tutarlıdır.
Swift’te yinelenen öğelerle bir set nasıl oluşturulur
Swift’te, bir set, kopyasız benzersiz unsurların bir koleksiyonudur. Ancak, yinelenen öğelerle bir set oluşturmak mümkündür. Swift’te yinelenen öğeler içeren bir set oluşturduğumuzda, dil kopyaların kaldırılması gerektiğini kabul eder. Dolayısıyla, tüm yinelenen öğeleri otomatik olarak kaldırır. Bu özellik, Swift setlerini benzersiz değerlerin koleksiyonlarını işlemek için inanılmaz derecede kullanışlı hale getirir.
Genel bakış
Set, benzersiz öğelerin bir koleksiyonudur, yani kopyalara izin vermez. Ancak, bazı durumlarda, yinelenen öğeler içeren bir set oluşturmak isteyebiliriz. Swift, kümelerdeki kopyaları otomatik olarak tanır ve bunları kaldırır. Bu makalede, Swift’te yinelenen öğelerle setlerin nasıl oluşturulacağı ve yinelenen değerler eklendiğinde kümelerin davranışını gösterir.
Sözdizimi
Setname: Ayarla<Eleman> = [yinelenen elementler]
Swift’te yinelenen öğeler içeren bir set oluşturma sözdizimi basittir. Set tipi ile bir değişken bildirin, ardından atama operatörü ve kare parantez halinde çevrili elemanlar. Set türü, öğeleri int veya dize gibi belirli bir türle daha da kısıtlamak için belirtilebilir.
Parametreler
- SetName: Bu oluşturmak istediğimiz setin adı.
- Duplicatements: Bunlar, sete eklemek istediğimiz unsurlardır. Bu unsurlar kopyalar olabilir.
- Tür: Bu, int, dize, vb. Gibi set türüdür. Sette depolanabilecek öğelerin türünü belirtir.
Geri dönüş değeri
Yinelenen öğeler içeren bir set oluşturduktan sonra, döndürülen değer tüm kopyaları atan bir küme olacaktır. Swift, benzersiz koleksiyonlar olarak kaldıklarından emin olmak için setlerden yinelenen öğeleri otomatik olarak kaldırır.
Swift'i içe aktar Bırak ders: set<İnt> = [023, 023, 055, 034, 065, 065, 134] Kullanıcı kimliği olsun: ayarlayın<Sicim> = ["24SD2", "24SD2", "24SD2", "24SD2"] Bırakın Eşitlik: Set<İnt> = [2, 4, 6, 8, 10, 6, 2, 10] LetSstudentnice: Set<Bool> = [Yanlış, Doğru, Doğru, Yanlış, Yanlış] Let Fiyatları: Ayarla<Çift> = [24.32, 45.32, 40.00, 1.45, 1.45, 24.32] İsimler: Set<Sicim> = ["Theodore", "Theodore", "Ruth", "Chichi", "Amaka", "Theodore"] Baskı (DersiD) Yazdır (USERID) Baskı (Evernumbers) baskı (isstudentnice) Baskı (Fiyatlar) Baskı (İsimler)
Açıklama
- Satır 4-9: Ayarlı türü kullanarak kümeler oluşturuyoruz ve öğelerinin türlerini belirtiyoruz. Her set bazı yinelenen öğeler içerir.
- 12-17 satırları: Kopyalarla setlerin davranışını gözlemlemek için setleri konsola yazdırıyoruz.
- Swift’in setlerden yinelenen öğeleri otomatik olarak kaldırdığını gözlemliyoruz.
Göstermek için basit bir program, bir kümeye yinelenen öğeler eklerseniz ne olur.
Sadece hızlı değil, çeşitli programlama dillerinde setler oluşturabiliriz. Örneğin, Java’da, Hashset sınıfını kullanarak setler oluşturabilir ve farklı değer türlerini saklayabiliriz. Aşağıdaki Java programı, setlerin yinelenen öğeleri nasıl işlediğini göstermektedir:
Java İçe Aktar.ümit.Hashset; Java İçe Aktar.ümit.Ayarlamak; public class canaddduplicateValueinset { genel statik void ana (String [] args) { Ayarlamak<Sicim> uniqueColours = yeni Hashset <> (); uniqueColours.ADD ("Kırmızı"); uniqueColours.ADD ("Yeşil"); uniqueColours.ekle ("mavi"); uniqueColours.ekle ("mavi"); / * Buraya yinelenen değer eklemek, derleyici hatası ve kod iyi çalışmaz, ancak yinelenen değer eklemez */ için (dize rengi: uniqueColours) { Sistem.dışarı.println (renk); } } }
Yukarıdaki Java programında, Hashset sınıfını kullanarak UnqueCours adlı bir set oluşturuyoruz. “Mavi” yineli bir değer de dahil olmak üzere sete farklı renkler ekliyoruz. Program herhangi bir derleme zamanı veya çalışma zamanı hatası atmaz. İyi çalışıyor ve yinelenen değerleri saklamıyor. Setin üzerinden tekrarladığımızda ve değerlerini yazdırdığımızda, yinelenen “mavi” değerinin mevcut olmadığını gözlemliyoruz.
Bir yinelenen değerleri bir “Ayarlamak”, ne olacak? Herhangi bir şikayetçi hata alıyor muyuz
Sadece değil’T yinelenen ekle değer. Boole eklemek(E E) – Belirtilenleri ekler eleman buna ayarlamak Zaten mevcut değilse (isteğe bağlı işlem). Gibi, eklemek() Yöntem boolean ve açık döner ekleme çoğalır, yanlış döndürür. Altında java Kaynak kodu örneği iyi çalışıyor ve JVM (Java Sanal Makine)’şikayet et.
Swift’te yinelenen öğelerle bir set nasıl oluşturulur
Birçok aday, sistem tasarım görüşmesindeki düşük performans nedeniyle reddedilir veya aşağı seviyelidir. Sistem tasarımı röportajlarında öne çıkın ve bu popüler ücretsiz kursla 2023’te işe alın.
Ücretsiz kurs alın
Ücretsiz kurs alın
Genel bakış
Set, kopyasız benzersiz unsurların bir koleksiyonudur. Ancak, yinelenen öğelerle bir set oluşturabiliriz. Ama sihir, Swift’in yinelenen unsurların bir olması gerektiğini bileceğidir. Dolayısıyla, tüm kopyaları kaldıracaktır.
Sözdizimi
SetName: set = [duplicatements]// küme türünü belirleyerekSetName: set = [duplicatements]
Bir setin yinelenen öğelerini oluşturmak için sözdizimi
Parametreler
- SetName: Bu oluşturmak istediğimiz setin adı.
- Duplicatements: Bu, kümelerin kopya olan unsurlarını temsil eder.
- Tür: Bu setin türüdür. Int, String vb. Olabilir.
Geri dönüş değeri
Yinelenen öğelerle bir set oluşturduktan sonra döndürülen değer, tüm kopyaları atan bir set olacaktır.
Swift'i içe aktar// yinelenen set koleksiyonları oluşturLet DersiD: set = [023, 023, 055, 034, 065,065, 134]Kullanıcı kimliği: set = ["24SD2", "24SD2", "24SD2", "24SD2"]Bırakın Eşitlik: Set = [2, 4, 6, 8, 10, 6, 2, 10]Let Isstudentnice: set = [Yanlış, Doğru, Doğru, Yanlış, Yanlış]Fiyatlar: Set = [24.32, 45.32, 40.00, 1.45, 1.45, 24.32]İsimler: Set = ["Theodore", "Theodore", "Ruth", "Chichi", "Amaka", "Theodore"]// Setleri konsola yazdırınBaskı (DersiD)Yazdır (USERID)Baskı (Evernumbers)baskı (isstudentnice)Baskı (Fiyatlar)Baskı (İsimler)
Swift’te yinelenen öğelerle ayarlanan nesneler oluşturmak
Açıklama
- Satır 4–9: Bazı setler oluşturuyoruz. Her set bazı kopyalar içerir.
- 12-17 satırları: Setleri konsola yazdırıyoruz.
- Swift’in herhangi bir kopyayı attığını gözlemliyoruz.
Bir yinelenen değerleri bir “Ayarlamak”, ne olacak? Herhangi bir şikayetçi hata alıyor muyuz?
Sadece değil’T yinelenen ekle değer. Boole eklemek(E E) – Belirtilenleri ekler eleman buna ayarlamak Zaten mevcut değilse (isteğe bağlı işlem). Gibi, eklemek() Yöntem boolean ve açık döner ekleme çoğalır, yanlış döndürür. Altında java Kaynak kodu örneği iyi çalışıyor ve JVM (Java Sanal Makine)’şikayet et.
Sete yinelenen değerler eklersek,’t Herhangi bir derleme zamanı veya çalıştırma süresi hatası alın. Değil’t Sette yinelenen değerler ekleyin.
Aşağıda, Java koleksiyonundaki set arayüzünün, boolean değerini doğru veya false döndüren sette zaten mevcut olduğunda,.
[Boolean ekle (e e) – Zaten mevcut değilse belirtilen öğeyi bu sete ekler . İade: Boolean Değer Doğru/Yanlış.]
Göstermek için basit bir program, bir kümeye yinelenen öğeler eklerseniz ne olur.
Farklı renk türlerini kullanarak bir set oluşturduk Hashset sınıfı nesnesi ile arayüz referansını ayarlayın. Farklı renk türleri ekliyoruz e.G. Kırmızı, yeşil ve mavi vb. Sette ve Loop için seti yineleyerek konsol ekranındaki renkleri görüntüleme.
Kasıtlı olarak, Hashset kopyalarının kabulünü kontrol etmek için tekrar mavi bir renk ekledik. Java programının iyi çalışacağına ve herhangi bir derleyici veya çalışma süresi hatası atmadığına dikkat edin. Ancak, yinelenen değerleri saklamayacak.
Kaynak Kodu Örneği: Kontrol etmek için Java ayarını aynı öğeyi ekleyin veya eklemiyorsa
Java İçe Aktar.ümit.Hashset; Java İçe Aktar.ümit.Ayarlamak; genel sınıf canaddduplicateValueinset < public static void main(String[] args) < Set uniqueColours = new HashSet(); uniqueColours.add("Red"); uniqueColours.add("Green"); uniqueColours.add("Blue"); uniqueColours.add("Blue"); /*Adding duplicate value here, No compiler error and code works fine but doesn't add duplicate value */ System.out.println("Colours available in set are:"); for (String c : uniqueColours)< System.out.println(c); >>>
Çıktı:
Sette mevcut renkler:
Mavi
Kırmızı
Yeşil
Java setindeki hızlı ferahlık soruları ve cevapları yinelenen ekle.
- S) Can Hashset’in yinelenen değerleri var?
- A) Hayır, Hashset’in yinelenen değerleri olamaz.
- A) Boolean değeri, ekle () yöntemi I ile döndürülür.e. Nesnede doğru değil, sette zaten mevcutsa yanlış.
- A) Program herhangi bir derleyici hatası veya çalışma süresi hatası göstermez ve kopyalara izin vermez.
Bir yinelenen değerleri bir “Ayarlamak”, ne olacak? Herhangi bir şikayetçi hata alıyor muyuz?
- Java’da Arraylist öğelerini yazdırmanın 4 yolu
- Gerçek zamanlı uygulama örneği ile Java Öncelik Kuyruğu Nedir??
- Java’da karşılaştırılabilir ve karşılaştırıcı nedir?
- Vektörü, zaman karmaşıklığını ve vektörün java’da nasıl büyüdüğünü açıklayın
- Java Koleksiyonları Kısa Röportaj SSS’leri Cevaplarla – Gerçek
Gruplandırılmış konular
Java Röportaj Soruları
- Çekirdek Java Soruları
- Java Koleksiyonları Soruları
- Java çok işlevli sorular
- Java öğreticileri
- Java Egzersizleri
C/C ++ Röportaj Soruları
- C Programlama
- C ++ Temel Sorular
- C ++ İlerleme Soruları
- C ++ Programlama Soruları
- C ++ Programlama Örnekleri
C# Röportaj Soruları
- C# Temel Sorular
- C# İlerleme Soruları
- C# Çoklu İşleme Soruları
- C# Programlama Soruları
- C# Programlama Egzersizleri
- C# kodlama örnekleri
- C# öğreticiler
Çoktan seçmeli sorular
- Özyineleme ve özyineleme kullanılarak Java’da Fibonacci Serisi
- Loop Kullanarak Java’da Fibonacci Serisi – Clear Logic
- Tasarım Desenlerini Neden Kullanır – En İyi Nedenler
- Gerçek Hikaye: 5 ay içinde tüm CSE Freshers nasıl iş buldu
- 50 Zor Java MCQ’ları – Cevaplanıp cevap veremeyeceğinizi kontrol edin
- C
- C Programlama Örnekleri
- C# Gelişmiş
- C# Temel
- C# çoklu iş parçacığı
- C# Program Alıştırmaları
- C# Programlama
- C# Programlama Örnekleri
- C# öğreticiler
- C ++ Gelişmiş
- C ++ Temel
- C ++ Programlama
- C ++ Programlama Örnekleri
- Kodlama
- Çekirdek java
- Tasarım desenleri
- Tasarım kalıpları ve ilkeleri
- DS & Algo
- e-yazar
- İK görüşmeleri
- Röportaj Başarı Hikayesi
- Java Kodlama
- Java koleksiyonları
- Java Koleksiyon Örnekleri
- Java Egzersizleri
- Java çok işlevli
- Java Notları
- Java öğreticisi
- Matematiksel bulmacalar
- MCQ-C++
- MCQ-Java
- MCQ-SQL
- MCQS algoritmaları ve veri yapısı
- Ağ General
- Oracle PL SQL
- Diğerleri
- Yazılım işleri
- SQL
- SQL Veritabanı
- zaman karmaşıklığı
- UML Diyagramı
- Kategorize edilmemiş
Java: Neden bir set yinelenen öğeler içerebilir?
Dzone topluluğuna katılın ve tüm üye deneyimini alın.
Düşük gecikme uygulamalarında, bellek basıncını ve dolayısıyla çöp toplayıcı üzerindeki yükü azaltmak için değiştirilebilir nesnelerin yeniden kullanılması gereksiz nesnelerin oluşturulmasından kaçınılır. Bu, uygulamanın çok daha belirleyici ve çok daha az titreme ile çalışmasını sağlar. Bununla birlikte, bu yeniden kullanılan nesnelerin nasıl kullanıldığına dikkat edilmelidir, yoksa beklenmedik sonuçlar, örneğin [b, b] gibi yinelenen öğeler içeren bir set şeklinde kendini gösterebilir.
Hashcode ve eşittir
Java’S yerleşik bytebuffer, 32 bit adresleme kullanarak yığın ve yerel belleğe doğrudan erişim sağlar. Chronicle Bytes, çok daha büyük bellek segmentlerinin ele alınmasına izin veren açık kaynaklı bırakma değiştirme 64 bit bir adrestir. Her iki tür de bir hashcode () ve nesnelerin bayt içeriğine bağlı bir eşit () yöntemi sağlar’ Altta yatan bellek segmenti. Bu birçok durumda yararlı olsa da, bunlar gibi değiştirilebilir nesneler Java’nın çoğunda kullanılmamalıdır’s yerleşik set türleri ve çoğu yerleşik harita türlerinde anahtar olarak değil.
Not: Gerçekte, etkili bir adres ofseti olarak sadece 31 ve 63 bit kullanılabilir (e.G. int ve uzun ofset parametrelerini kullanma)
Değiştirilebilir anahtarlar
Aşağıda, yeniden kullanılan değiştirilebilir nesnelerle ilgili sorunu gösteren küçük bir kod örneği sunulmaktadır. Kod bayt kullanımını gösteriyor, ancak aynı sorun Bytebuffer için de var.
Set set = yeni Hashset <> (); Bayt >bayt = bayt.("a"); ayarlamak.Ekle (bayt); // baytları yeniden kullanın.yazma (0); // Bu, mevcut nesneyi zaten ayarlayın // set baytlarda.yazma ("B"); // aynı bayt nesnesini tekrar ekliyor ama şimdi // başka bir hashcode () seti altına ekliyor.Ekle (bayt); Sistem.dışarı.println (“set = “ + ayarlamak);
Yukarıdaki kod önce bir nesne ekleyecektir “A” içerik olarak, setin [a] içerdiği anlamına gelir. O zaman mevcut nesnenin içeriği, “B”, Setin [B] içerecek şekilde değiştirilmesinin yan etkisi olan ancak eski karma kod değerini ve karşılık gelen karma kovasını değişmeden bırakacak (etkili bir şekilde bayat olacak). Son olarak, değiştirilmiş nesne tekrar kümeye eklenir, ancak şimdi o aynı nesne için önceki girişe yol açan başka bir karma kodu altında kalacaktır!
Sonuç olarak, belki de beklenen [a, b] yerine, bu aşağıdaki çıktıyı üretecektir:
Düz metin
set = [b, b]
Bytebuffer ve bayt nesneleri haritalarda anahtar olarak
Java kullanırken’S Bytebuffer Nesneleri veya Bayt Nesneleri Haritalarda anahtar olarak veya kümelerdeki öğeler olarak, bir çözüm kimlikhashmap veya koleksiyonlar kullanıyor.Yukarıda açıklanan değiştirilebilir nesne özelliklerine karşı korunmak için newsetfrommap (yeni IdentityHashmap <> ()). Bu, nesnelerin karmaşasını gerçek bayt içeriğine agnostik yapar ve bunun yerine sistemi kullanır.nesnenin ömrü boyunca asla değişmeyen kimlikhashcode ().
Başka bir alternatif, nesnelerin salt okunur bir sürümünü kullanmaktır (örneğin ByTebuffer’ı çağırarak.asReadonlyBuffer ()) ve sözde salt okunan nesneyi değiştirmek için bir arka kapı sağlayabilecek orijinal değiştirilebilir nesneye herhangi bir referans tutmaktan kaçının’S içeriği.
Chronicle Haritası ve Chronicle kuyruğu
Chronicle Map, yerleşik Java haritası uygulamalarından biraz farklı çalışan bir açık kaynak kütüphanesidir, nesnelerin serileştirilmesi ve heap dışı belleğe koyulması, JVM’ye tahsis edilen RAM belleğinden daha büyük olabilen ultra büyük haritalar için açılması ve bu haritaların çok daha açık yeniden başlatılabilmesine izin verebilecek, bu haritaların bellek haritalandırılmış dosyalara devam edebilmesi için.
Serileştirme sürecinin, nesnenin içeriği kopyalandığı ve haritaya her yeni ilişkilendirildiğinde etkili bir şekilde dondurulduğundan, yeniden kullanılabilir değiştirilebilir nesneleri anahtar olarak yeniden kullanılabilir hale getirme biçiminde daha az bilinen bir avantajı vardır. Değişken nesnenin sonraki değişiklikleri, sınırsız nesnenin yeniden kullanılmasına izin veren dondurulmuş serileştirilmiş içeriği etkilemez.
Açık kaynaklı Chronicle kuyruğu benzer bir şekilde çalışır ve ikincil depolamaya devam eden terabaytları tutabilen ve Chronicle haritası ile aynı nedenden ötürü, değiştirilebilir elemanların nesnenin yeniden kullanılmasına izin verebilecek kuyruklar sağlayabilir.
Sonuç
Hashcode () ‘nın nesnenin içeriğine bağlı olduğu bayt ve baytbuffer gibi değiştirilebilir nesneler kullanmak tehlikelidir, bazı haritalarda ve uygulamaları ayarlayın.
Bir IdentityHashmap, nesne mutasyonu nedeniyle haritaların ve setlerin yolsuzluğuna karşı korur, ancak bu yapıları gerçek bayt içeriğine agnostik hale getirir.
Önceden değiştirilmiş bellek segmenti nesnelerinin salt okunur sürümleri alternatif bir çözüm sağlayabilir.
Chronicle Map ve Chronicle kuyruğu, deterministik düşük gecikmeli operasyonlara giden yolu açarak değiştirilebilir nesnelerin sınırsız kullanılmasına izin verir.
Set yinelenen değerleri kabul ediyor mu?
Hashset, yinelenen değere izin vermeyen set arayüzünün bir uygulamasıdır. Ana şey, Hashset’te depolanan nesnelerin eşitlik kontrolü için Equals () ‘yı geçersiz kılması gerektiğidir ve yinelenen değer için hashcode () yöntemleri setimizde saklanmaz. HashMap, bir anahtarın değere sahip bir anahtarla eşleşen bir uygulamasıdır. Bir haritada yinelenen anahtarlara izin verilmez. Temel olarak, harita arabiriminin iki uygulama sınıfı hashmap ve Treemap temel farkı Treemap nesnelerin sırasını korur, ancak HashMap. Hashmap, boş değerlere ve null tuşlarına izin verir. Hem Hashset hem de HashMap senkronize değil.
Şimdi aşağıdaki gibi tablo olarak sağlandığı gibi HashMap ve Hashset arasındaki farkı formüle edelim:
Temel Karma Haşal Uygulamalar Arayüzü ayarlayın Harita arayüzü Kopyalar HAYIR Evet çoğaltma değerlerine izin verilir, ancak yinelenen anahtara izin verilmez Kukla değerler Evet HAYIR Bir ekleme işlemi sırasında gerekli nesneler 1 2 Mekanizma ekleme ve depolama Hashmap nesnesi Karma tekniği Hız Hashmap’tan nispeten daha yavaş Hashing tekniği burada kullanıldığı için hashset’ten nispeten daha hızlıdır. Hükümsüz Tek bir null değeri var Tek null anahtar ve herhangi bir sayıda boş değer Ekleme yöntemi Ekleme işlemi için yalnızca bir değer gereklidir. Ekleme için ekle () işlevi kullanılır Ekleme işlemi için iki değer gereklidir. Put () işlevi ekleme için kullanılır. Veri depolama Veriler nesne olarak saklanır. Veriler anahtar-değer çifti olarak saklanır. Karmaşıklık Açık) O (1) Temiz Java programlarının yardımıyla iç çalışmaya bakarak anlayışı kavrayalım.
Örnek 1: Karma