Jeśli spróbujemy wstawić zduplikowane wartości do „zestawu”, co się stanie? Czy otrzymujemy jakikolwiek błąd komputerów

Kiedy próbujemy wstawić zduplikowane wartości w „SET”, nie dodaje on duplikatów. Metoda „Dodaj” interfejsu Set zwraca wartość logiczną, wskazując, czy element został pomyślnie dodany, czy nie. Jeśli spróbujemy dodać duplikat wartości, metoda zwróci false. To zachowanie jest spójne w różnych językach programowania, takich jak Java i Swift.

Jak utworzyć zestaw z duplikatem elementów w Swift

W Swift, zestaw jest zbiorem unikalnych elementów bez duplikatów. Możliwe jest jednak utworzenie zestawu z zduplikowanymi elementami. Kiedy tworzymy zestaw z zduplikowanymi elementami w Swift, język rozpoznaje, że duplikaty należy usunąć. Stąd automatycznie usuwa wszystkie zduplikowane elementy. Ta funkcja sprawia, że ​​Swift Sets jest niezwykle przydatny do obsługi kolekcji unikalnych wartości.

Przegląd

Zestaw jest zbiorem unikalnych elementów, co oznacza, że ​​nie pozwala na duplikaty. Jednak w niektórych przypadkach możemy chcieć utworzyć zestaw zawierający zduplikowane elementy. Swift automatycznie rozpoznaje duplikaty w zestawach i usuwa je. W tym artykule bada sposób tworzenia zestawów z duplikatem elementów w Swift i pokazuje zachowanie zestawów, gdy dodaje się duplikaty wartości.

Składnia

Niech setName: set<Element> = [duplikaty]]

Składnia do tworzenia zestawu z zduplikowanymi elementami w Swift jest prosta. Po prostu zadeklaruj zmienną z typem zestawu, a następnie operatora przypisania i elementów zamkniętych w nawiasach kwadratowych. Typ zestawu można określić w celu dalszego ograniczenia elementów do określonego typu, takiego jak int lub ciąg.

Parametry

  • setName: To jest nazwa zestawu, który chcemy utworzyć.
  • Duplikaty: są to elementy, które chcemy dodać do zestawu. Te elementy mogą być duplikatami.
  • Typ: Jest to typ zestawu, takiego jak int, ciąg itp. Określa rodzaj elementów, które można przechowywać w zestawie.

Wartość zwracana

Po utworzeniu zestawu z zduplikowanymi elementami zwrócona wartość będzie zestawem, który odrzuca wszystkie duplikaty. Swift automatycznie usuwa dowolne zduplikowane elementy z zestawów, aby upewnić się, że pozostają one unikalnymi kolekcjami.

importować Swift
Niech Wykłada: Ustaw<Int> = [023, 023, 055, 034, 065, 065, 134]
Pozwól UserId: Ustaw<Strunowy> = [„24SD2”, „24SD2”, „24SD2”, „24SD2”]
Niech EvenNumbers: Ustaw<Int> = [2, 4, 6, 8, 10, 6, 2, 10]
Niech isstudentnice: set<Bool> = [Fałsz, prawda, prawda, fałsz, fałsz]
Niech ceny: Ustaw<Podwójnie> = [24.32, 45.32, 40.00, 1.45, 1.45, 24.32]
Niech nazwy: Ustaw<Strunowy> = [„Theodore”, „Theodore”, „Ruth”, „Chichi”, „Amaka”, „Theodore”]
Drukuj (Wykłady)
Drukuj (userID)
Drukuj (Even Numbers)
Drukuj (isstudentnice)
Drukuj (ceny)
Drukuj (nazwy)

Wyjaśnienie

  • Linie 4-9: Tworzymy zestawy za pomocą typu zestawu i określamy typy ich elementów. Każdy zestaw zawiera pewne zduplikowane elementy.
  • Linie 12-17: Drukujemy zestawy na konsoli, aby obserwować zachowanie zestawów z duplikatami.
  • Obserwujemy, że Swift automatycznie usuwa dowolne zduplikowane elementy z zestawów.

Prosty program do zademonstrowania, co się stanie, jeśli dodasz duplikat elementów do zestawu.

Możemy tworzyć zestawy w różnych językach programowania, a nie tylko Swift. Na przykład w Java możemy tworzyć zestawy za pomocą klasy Hashset i przechowywać różne typy wartości. Poniższy program Java pokazuje, w jaki sposób zestawy obsługują duplikat elementów:

Importuj Java.Util.Hashset;
Importuj Java.Util.Ustawić;
Klasa publiczna canadduplicateValueInset {
    public static void main (string [] args) {
        Ustawić&lt;Strunowy&gt; UniqueColours = new Hashset <> ();
        Wyłączniki.Dodaj (&bdquo;czerwony&rdquo;);
        Wyłączniki.Dodaj (&bdquo;zielony&rdquo;);
        Wyłączniki.Dodaj (&bdquo;niebieski&rdquo;);
        Wyłączniki.Dodaj (&bdquo;niebieski&rdquo;); / * Dodanie tutaj zduplikowanej wartości, brak błędu kompilatora i kod działa dobrze, ale nie dodaje duplikatu wartości */
        dla (kolor strun: UniqueColours) {
            System.na zewnątrz.println (kolor);
        }
    }
}

W powyższym programie Java tworzymy zestaw o nazwie UniqueColours za pomocą klasy Hashset. Dodajemy różne kolory do zestawu, w tym zduplikowana wartość &bdquo;niebieska&rdquo;. Program nie rzuca żadnych błędów w czasie kompilacji ani czasu wykonawczego. Działa dobrze i nie przechowuje duplikatów wartości. Kiedy iterujemy zestaw i drukujemy jego wartości, obserwujemy, że duplikat &bdquo;niebieski&rdquo; nie jest obecny.

Jeśli spróbujemy wstawić duplikat wartości w &ldquo;Ustawić&rdquo;, co się stanie? Czy otrzymujemy jakikolwiek błąd komputerów

Tylko to nie&rsquo;T Dodaj duplikat wartości. Boolean dodać(E e) – dodaje określony element do tego ustawić Jeśli nie jest jeszcze obecny (opcjonalna operacja). Jak, dodać() Metoda zwraca boolean i dalej dodanie powiela się, że zwróci fałsz. Poniżej Jawa Przykład kodu źródłowego działa dobrze i JVM (maszyna wirtualna Java)&rsquo;T narzekaj.

Jak utworzyć zestaw z duplikatem elementów w Swift

Wielu kandydatów jest odrzuconych lub na złożeniu z powodu słabej wydajności w wywiadzie dla projektowania systemu. Wyróżnij się w wywiadach z projektowaniem systemu i zostań zatrudniony w 2023 roku dzięki temu popularnemu bezpłatnemu kursowi.

Zdobądź bezpłatny kurs

Zdobądź bezpłatny kurs

Przegląd

Zestaw to zbiór unikalnych elementów bez duplikatów. Możemy jednak stworzyć zestaw z duplikatem elementów. Ale magia polega na tym, że Swift będzie wiedział, że zduplikowane elementy powinny być jednym. Stąd usunie wszystkie duplikaty.

Składnia

Niech setName: set = [duplikateElements]
// poprzez określanie typu zestawu
Niech setName: set = [duplikateElements]

Składnia do tworzenia zduplikowanych elementów zestawu

Parametry

  • setName: To jest nazwa zestawu, który chcemy utworzyć.
  • duplikaty: reprezentuje elementy zestawów, które są duplikatami.
  • Typ: To jest typ zestawu. Może to być int, ciąg i tak dalej.

Wartość zwracana

Wartość zwrócona po utworzeniu zestawu z zduplikowanymi elementami będzie zestawem, który odrzuca wszystkie duplikaty.

importować Swift
// Utwórz zduplikowane kolekcje zestawu
Niech Wykłada: Set = [023, 023, 055, 034, 065,065, 134]
Let UserId: set = [&bdquo;24SD2&rdquo;, &bdquo;24SD2&rdquo;, &bdquo;24SD2&rdquo;, &bdquo;24SD2&rdquo;]
Niech EvenNumbers: Set = [2, 4, 6, 8, 10, 6, 2, 10]
Niech isStudentnice: set = [false, true, true, false, false]
Niech ceny: set = [24.32, 45.32, 40.00, 1.45, 1.45, 24.32]
Let Names: set = [&bdquo;Theodore&rdquo;, &bdquo;Theodore&rdquo;, &bdquo;Ruth&rdquo;, &bdquo;Chichi&rdquo;, &bdquo;Amaka&rdquo;, &bdquo;Theodore&rdquo;]
// Wydrukuj zestawy na konsoli
Drukuj (Wykłady)
Drukuj (userID)
Drukuj (Even Numbers)
Drukuj (isstudentnice)
Drukuj (ceny)
Drukuj (nazwy)

Tworzenie ustalonych obiektów z zduplikowanymi elementami w Swift

Wyjaśnienie

  • Linie 4–9: tworzymy niektóre zestawy. Każdy zestaw zawiera niektóre duplikaty.
  • Linie 12–17: Drukujemy zestawy na konsoli.
  • Obserwujemy, że Swift odrzuca wszelkie duplikaty.

Jeśli spróbujemy wstawić duplikat wartości w &ldquo;Ustawić&rdquo;, co się stanie? Czy otrzymujemy jakikolwiek błąd komputerów?

Tylko to nie&rsquo;T Dodaj duplikat wartości. Boolean dodać(E e) – dodaje określony element do tego ustawić Jeśli nie jest jeszcze obecny (opcjonalna operacja). Jak, dodać() Metoda zwraca boolean i dalej dodanie powiela się, że zwróci fałsz. Poniżej Jawa Przykład kodu źródłowego działa dobrze i JVM (maszyna wirtualna Java)&rsquo;T narzekaj.

Jeśli wstawiamy duplikat wartości do zestawu, nie&rsquo;Nie otrzymuj wszelkich błędów w czasie kompilacji lub czasu wykonywania. To nie&rsquo;T Dodaj zduplikowane wartości w zestawie.

Poniżej znajduje się metoda add () interfejsu zestawu w kolekcji Java, która zwraca wartość logiczną albo prawdziwą lub false, gdy obiekt jest już obecny w zestawie.

[Boolean Add (e e) – Dodaje określony element do tego zestawu, jeśli jeszcze nie jest obecny . Zwraca: wartość booletowa Prawda/Fałsz.]

Prosty program do zademonstrowania, co się stanie, jeśli dodasz duplikat elementów do zestawu.

Stworzyliśmy zestaw do przechowywania różnych rodzajów kolorów za pomocą Ustaw referencje interfejsu z obiektem klasy Hashset. Dodajemy różne rodzaje kolorów e.G. Czerwony, zielony i niebieski itp. w zestawie i wyświetlanie kolorów na ekranie konsoli poprzez iterowanie zestawu do pętli.

Celowo, ponownie dodaliśmy niebieski kolor, aby sprawdzić akceptację Hashset duplikat. Zauważ, że program Java będzie działał dobrze i nie rzuca żadnego kompilatora ani błędu czasu wykonywania. Ale nie będzie przechowywać duplikatów wartości.

Przykład kodu źródłowego: Aby sprawdzić Jeśli set Java dodaj ten sam element, czy nie

Importuj Java.Util.Hashset; Importuj Java.Util.Ustawić; Klasa publiczna canadduplicateValueInset < 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); >>> 

Wyjście:
Kolory dostępne w zestawie to:
Niebieski
Czerwony
Zielony

Pytania i odpowiedzi szybkiego odświeżenia na zestawie Java Dodaj duplikat.

  • Q) Czy Hashset może mieć zduplikowane wartości?
    • A) Nie, skrót nie może mieć duplikatów wartości.
    • A) wartość logiczna jest zwracana metodą add () i.mi. Prawda w obiekcie nie jest obecna i fałszywa, jeśli jest już obecna w zestawie.
    • A).

    Jeśli spróbujemy wstawić duplikat wartości w &ldquo;Ustawić&rdquo;, co się stanie? Czy otrzymujemy jakikolwiek błąd komputerów?

    • Oto 4 sposoby wydrukowania elementów arraylist w Javie
    • Czym jest kolejka Java priorytetowa z przykładem aplikacji w czasie rzeczywistym?
    • Co jest porównywalne i komparatorów w Javie?
    • Wyjaśnij wektor, złożoność czasu i sposób, w jaki wektor rośnie w Javie
    • Kolekcje Java Krótki wywiad z odpowiedziami z odpowiedziami – Real

    Pogrupowane tematy

    Pytania do wywiadu Java

    • Podstawowe pytania Java
    • Pytania z kolekcji Java
    • Pytania o wielowa tematy Java
    • Samouczki Java
    • Ćwiczenia Java

    C/C ++ Pytania dotyczące wywiadu

    • Programowanie C
    • Podstawowe pytania C ++
    • Pytania z wyprzedzeniem C ++
    • Pytania dotyczące programowania C ++
    • Przykłady programowania C ++

    C# Pytania dotyczące wywiadu

    Java McQ

    • C# Podstawowe pytania
    • C# Pytania z wyprzedzeniem
    • C# Pytania wielowy
    • C# Pytania dotyczące programowania
    • # Ćwiczenia programowania
    • Przykłady kodowania C#
    • C# samouczki

    Pytania wielokrotnego wyboru

    • Seria Fibonacciego w Javie za pomocą rekurencji i nie rekurencji
    • Seria Fibonacciego w Javie za pomocą pętli – wyraźna logika
    • Po co korzystać z wzorów projektowych – najlepsze powody
    • Prawdziwa historia: jak wszyscy CSE Freshers dostali go w 5 miesięcy
    • 50 trudnych Java MCQS – Sprawdź, czy możesz odpowiedzieć
    • C
    • C Przykłady programowania
    • C# Advanced
    • C# Basic
    • C# Multi-Threading
    • C# Ćwiczenia programowe
    • C# Programowanie
    • C# Przykłady programowania
    • C# samouczki
    • C ++ Advanced
    • C ++ Basic
    • Programowanie C ++
    • Przykłady programowania C ++
    • Kodowanie
    • Core Java
    • Wzorce projektowe
    • Wzory i zasady projektowania
    • DS & Algo
    • E-autoutor
    • Wywiady HR
    • Wywiad historia sukcesu
    • Kodowanie Java
    • Kolekcje Java
    • Przykłady kolekcji Java
    • Ćwiczenia Java
    • Java Multithreading
    • Notatki Java
    • Samouczek Java
    • Puzzle matematyczne
    • MCQ-C++
    • MCQ-Java
    • MCQ-SQL
    • Algorytmy i struktura danych MCQS
    • Generał sieci
    • Oracle PL SQL
    • Inni
    • Zadania oprogramowania
    • SQL
    • Baza danych SQL
    • Złożoność czasu
    • Diagram UML
    • Bez kategorii

    Java: Dlaczego zestaw może zawierać duplikaty elementów

    Dołącz do społeczności Dzone i uzyskaj pełne doświadczenie członków.

    W zastosowaniach o niskiej opóźnieniu często utworzono tworzenie niepotrzebnych obiektów. To sprawia, że ​​aplikacja działa znacznie bardziej deterministycznie i przy znacznie mniejszej drganiu. Należy jednak zachować ostrożność co do tego, w jaki sposób używane są ponownie używane obiekty, w przeciwnym razie nieoczekiwane wyniki mogą się objawiać, na przykład w formie zestawu zawierającego zduplikowane elementy, takie jak [B, B].

    Kod hashkodowy i równy

    Jawa&rsquo;wbudowana bajtowa bajtowa S zapewnia bezpośredni dostęp do sterty i natywnej pamięci za pomocą 32-bitowych adresów. Chronicle Bajtes to 64-bitowy zastępca open source, który umożliwia rozwiązanie znacznie większych segmentów pamięci. Oba te typy zapewniają metodę hashcode () i equals (), która zależy od zawartości bajtów obiektów&rsquo; U podstaw segmentu pamięci. Chociaż może to być przydatne w wielu sytuacjach, takie obiekty, takie jak te, nie powinny być używane w większości Java&rsquo;S wbudowane typy zestawu, a nie jako klucz w najbardziej wbudowanych typach map.

    Uwaga: W rzeczywistości tylko 31 i 63 bity mogą być używane jako skuteczne przesunięcie adresu (e.G. Korzystanie z parametrów int i długiego przesunięcia)

    Zmienione klucze

    Poniżej przedstawiono mały przykład kodu ilustrujący problem z ponownie używanymi obiektami zmieniaczonymi. Kod pokazuje użycie bajtów, ale ten sam problem istnieje dla bajt.

    Set set = new Hashset <> (); Bajty bajty = bajty.od"); ustawić.Dodaj (bajty); // Ponowne wykorzystanie bajtów.składanie (0); // To zmubia już istniejący obiekt // w ustawionych bajtach.Write (&bdquo;B&rdquo;); // ponownie dodaje ten sam obiekt bajtów, ale teraz pod // inny zestaw hashcode ().Dodaj (bajty); System.na zewnątrz.println (&ldquo;zestaw = &ldquo; + ustawić);

    Powyższy kod najpierw doda obiekt z &ldquo;A&rdquo; jako treść oznacza, że ​​zestaw zawiera [a]. Wówczas treść tego istniejącego obiektu zostanie zmodyfikowana &ldquo;B&rdquo;, który ma efekt uboczny zmiany zestawu na [B], ale pozostawi starego kodu skrótu i ​​odpowiadające mu wiadro skrótów (skutecznie staje się nieaktualne). Na koniec zmodyfikowany obiekt jest ponownie dodawany do zestawu, ale teraz pod innym kodem skrótu prowadzącym do poprzedniego wpisu dla tego samego obiektu pozostanie!

    W rezultacie, a nie być może przewidywanego [a, b], da to następujące dane wyjściowe:

    Zwykły tekst

    set = [b, b]

    Bajty i bajty obiekty jako klucze w mapach

    Podczas korzystania z Java&rsquo;S BYTEBUFFER Obiekty lub obiekty bajtów jako klucze w mapach lub jako elementy w zestawach, jednym rozwiązaniem jest użycie tożsamości lub kolekcji.NewsetFommap (New IdentityHashmap <> ()) w celu ochrony przed opisanymi osobowościami obiektów opisanych powyżej. To sprawia, że ​​mieszanie obiektów jest agnostyczne do rzeczywistej zawartości bajtów i zamiast tego użyje systemu.IdentityHashcode (), który nigdy nie zmienia się w życiu obiektu.

    Inną alternatywą jest użycie wersji obiektów tylko do odczytu (na przykład poprzez wywołując bajt.asreadonlyBuffer ()) i powstrzymaj się od utrzymywania odniesienia do oryginalnego obiektu, który mógłby zapewnić tylne drzwi do modyfikacji rzekomego obiektu tylko do odczytu&rsquo;treść s.

    Mapa kronika i kolejka kronika

    Mapa Chronicle to biblioteka typu open source, która działa nieco inaczej niż wbudowane implementacje mapy Java w sposób, w jaki obiekty są serializowane i umieszczane w pamięci poza heree, otwierając się na ultra duże mapy, które mogą być większe niż pamięć pamięci RAM przydzielona do JVM i umożliwia utrzymanie tych map na mapy pamięci, aby aplikacje mogły być ponownie szybciej uruchamiane.

    Proces serializacji ma kolejną mniej znaną przewagę w sposobie, w jaki pozwala na zmienne obiekty wielokrotnego użytku jako klucze, ponieważ zawartość obiektu jest kopiowana i skutecznie zamrożona za każdym razem, gdy nowe powiązanie jest umieszczane na mapie. Późniejsze modyfikacje zmiennego obiektu nie wpłyną zatem na zamrożoną zawartość serializowaną umożliwiając ponowne użycie obiektu nieograniczonego.

    Kolejka kroniki typu open source działa w podobny sposób i może dostarczać kolejki, które mogą pomieścić terabajty danych utrzymywane do wtórnego przechowywania i, z tego samego powodu, co mapa kronika, umożliwia ponowne wykorzystanie obiektów zmiennych elementów.

    Wnioski

    Niebezpieczne jest użycie zmiennych obiektów, takich jak bajty i bajty, w których hashcode () zależy od zawartości obiektu, w niektórych implementacjach map i ustawionych.

    Tożsamość -asza chroni przed uszkodzeniem map i zestawów z powodu mutacji obiektu, ale czyni te struktury agnostyczne do rzeczywistej zawartości bajt.

    Wersje wcześniej zmodyfikowanych obiektów segmentu pamięci mogą stanowić alternatywne rozwiązanie.

    Mapa kronika i kolejka kronika umożliwiają nieograniczone użycie zmiennych obiektów, otwierając ścieżkę do deterministycznych operacji o niskiej opóźnieniu.

    Ustawia akceptację duplikatów?

    Hashset to implementacja zestawu SET, który nie pozwala na duplikat wartości. Najważniejsze jest to, że obiekty przechowywane w skrócie muszą zastąpić równe () w celu sprawdzenia równości, a metody Hashcode () dla nie ma wartości zduplikowanej, są przechowywane w naszym zestawie. Hashmap to implementacja interfejsu MAP, która mapuje klucz do wartości. Duplikaty kluczy nie są dozwolone na mapie. Zasadniczo interfejs MAP ma dwie klasy implementacyjne Hashmap i Treemap Główną różnicą jest Treemap utrzymuje kolejność obiektów, ale Hashmap nie. Hashmap pozwala na wartości zerowe i klawisze zerowe. Zarówno hashset, jak i hashmap nie są synchronizowane.

    Teraz sformułujmy różnicę między hashmapem a hashsetem, jak podano w sposób tabelaryczny poniżej w następujący sposób:

    Podstawowy Hashset Hashmap
    Przybory Ustaw interfejs Interfejs mapy
    Duplikaty NIE Tak, wartości duplikaty są dozwolone, ale żaden zduplikowany klucz nie jest dozwolony
    Wartości manekina Tak NIE
    Obiekty wymagane podczas operacji dodawania 1 2
    Dodanie i przechowywanie mechanizmu Obiekt hashmap Technika mieszania
    Prędkość Jest stosunkowo wolniejszy niż hashmap Jest stosunkowo szybszy niż hashset z powodu techniki mieszania.
    Zero Mieć jedną wartość zerową Pojedynczy klawisz zerowy i dowolna liczba wartości zerowych
    Metoda wstawiania W przypadku procesu wstawiania wymagana jest tylko jedna wartość. Do insercji używana jest funkcja add () Do procesu wstawiania wymagane są dwie wartości. Put () funkcja jest używana do wstawienia.
    Przechowywanie danych Dane są przechowywane jako obiekty. Dane są przechowywane jako para wartości kluczowej.
    Złożoność NA) O (1)

    Rozumiemy zrozumienie, zerkając na wewnętrzną pracę z pomocą czystych programów Java.

    Przykład 1: Hashset