“세트”에 중복 값을 삽입하려고하면 어떻게 될지? 상환 오류가 발생합니까?

“세트”에 중복 값을 삽입하려고 할 때 중복 값을 추가하지 않습니다. 설정 인터페이스의 “추가”메소드는 부울 값을 반환하여 요소가 성공적으로 추가되었는지 여부를 나타냅니다. 중복 값을 추가하려고하면 메소드가 False를 반환합니다. 이 동작은 Java 및 Swift와 같은 다양한 프로그래밍 언어에서 일관됩니다.

Swift에서 중복 요소가있는 세트를 만드는 방법

Swift에서 세트는 중복없는 고유 한 요소 모음입니다. 그러나 중복 요소가있는 세트를 만들 수 있습니다. Swift에서 중복 요소가있는 세트를 만들 때 언어는 복제물을 제거해야한다는 것을 인식합니다. 따라서 모든 중복 요소를 자동으로 제거합니다. 이 기능은 Swift 세트가 고유 한 가치의 컬렉션을 처리하는 데 매우 유용하게 만듭니다.

개요

세트는 고유 한 요소 모음이므로 복제물을 허용하지 않습니다. 그러나 경우에 따라 중복 요소가 포함 된 세트를 만들 수 있습니다. Swift는 세트의 중복을 자동으로 인식하고 제거합니다. 이 기사는 Swift에서 중복 요소가있는 세트를 만드는 방법을 탐구하고 중복 값이 ​​추가 될 때 세트의 동작을 보여줍니다.

통사론

setName : set을하자<요소> = [DuplicationElements]

Swift에서 중복 요소가있는 세트를 작성하기위한 구문은 간단합니다. 세트 유형으로 변수를 선언 한 다음 할당 연산자와 정사각형 괄호로 둘러싸인 요소를 선언합니다. 세트 유형을 지정하여 요소를 int 또는 문자열과 같은 특정 유형으로 제한 할 수 있습니다.

매개 변수

  • setName : 이것은 우리가 만들고 싶은 세트의 이름입니다.
  • Duplicatelements : 세트에 추가하려는 요소입니다. 이러한 요소는 중복 될 수 있습니다.
  • 유형 : int, String 등과 같은 세트의 유형입니다. 세트에 저장할 수있는 요소 유형을 지정합니다.

반환 값

중복 요소가있는 세트를 작성한 후 리턴 값은 모든 복제물을 폐기하는 세트가됩니다. Swift는 세트에서 중복 요소를 자동으로 제거하여 고유 한 컬렉션을 유지합니다.

신속한 수입
강의를하자 : 설정하십시오<int> = [023, 023, 055, 034, 065, 065, 134]
userID를 설정하십시오<끈> = [ "24SD2", "24SD2", "24SD2", "24SD2"]
심지어 내버려 두십시오 : 설정<int> = [2, 4, 6, 8, 10, 6, 2, 10]
isstudentnice : set<부> = [false, true, true, false, false]
가격을 설정하십시오<더블> = [24.32, 45.32, 40.00, 1.45, 1.45, 24.32]
이름을 표시하십시오<끈> = [ "Theodore", "Theodore", "Ruth", "Chichi", "Amaka", "Theodore"]
인쇄 (강의)
인쇄 (userId)
인쇄 (심지어)
인쇄 (isstudentnice)
인쇄 (가격)
인쇄 (이름)

설명

  • 4-9 행 : 세트 유형을 사용하여 세트를 생성하고 요소의 유형을 지정합니다. 각 세트에는 중복 요소가 포함되어 있습니다.
  • 12-17 행 : 우리는 세트를 콘솔에 인쇄하여 복제물로 세트의 동작을 관찰합니다.
  • 우리는 Swift가 세트에서 중복 요소를 자동으로 제거하는 것을 관찰합니다.

시연 할 간단한 프로그램, 세트에 중복 요소를 추가하면 어떻게됩니까?.

Swift뿐만 아니라 다양한 프로그래밍 언어로 세트를 만들 수 있습니다. 예를 들어, Java에서는 해시 세트 클래스를 사용하여 세트를 만들고 다른 유형의 값을 저장할 수 있습니다. 아래 Java 프로그램은 세트가 중복 요소를 처리하는 방법을 보여줍니다

Java 수입.유도.해시 세트;
Java 수입.유도.세트;
공개 클래스 CanaddDuplicatevalueinset {
    public static void main (String [] args) {
        세트&lt;끈&gt; iriquecolours = new Hashset <> ();
        고유 한.추가 ( "빨간색");
        고유 한.추가 ( "녹색");
        고유 한.추가 ( "파란색");
        고유 한.추가 ( "파란색"); / * 중복 값 추가 여기에 컴파일러 오류 및 코드가 잘 작동하지만 중복 값을 추가하지 않습니다 */
        for (문자열 색상 : iriquecolours) {
            체계.밖으로.println (색);
        }
    }
}

위의 Java 프로그램에서는 Hashset 클래스를 사용하여 Iliquecolours라는 세트를 만듭니다. 중복 값 “Blue”를 포함하여 세트에 다른 색상을 추가합니다. 프로그램은 컴파일 타임 또는 런타임 오류를 던지지 않습니다. 잘 작동하며 중복 값을 저장하지 않습니다. 세트를 반복하고 그 값을 인쇄 할 때, 우리는 중복 값 “blue”가 존재하지 않는 것을 관찰합니다.

우리가 a에 중복 값을 삽입하려고한다면 &ldquo;세트&rdquo;, 무슨 일이 일어날 것? 상환 오류가 발생합니까?

그냥 그다&rsquo;티 복제본을 추가하십시오 값. 부울 추가하다(E E) – 지정된 것을 추가합니다 요소 이에 세트 아직 존재하지 않는 경우 (선택적 작동). 처럼, 추가하다() 메소드는 부울을 반환합니다 첨가 복제가 거짓을 반환합니다. 아래에 자바 소스 코드 예제는 잘 작동하며 JVM (Java Virtual Machine)&rsquo;t 불평.

Swift에서 중복 요소가있는 세트를 만드는 방법

시스템 설계 인터뷰에서 성능 저하로 인해 많은 후보자가 거부되거나 다운 레벨이 있습니다. 시스템 디자인 인터뷰에서 눈에 띄고이 인기있는 무료 코스와 함께 2023 년에 고용.

무료 코스를 받으십시오

무료 코스를 받으십시오

개요

세트는 복제가없는 고유 요소 모음입니다. 그러나 중복 요소가있는 세트를 만들 수 있습니다. 그러나 마술은 Swift가 중복 요소가 하나 여야한다는 것을 알게 될 것입니다. 따라서 모든 복제물을 제거합니다.

통사론

setName : set = [DuplicateLements]
// 세트 유형을 지정하여
setName : set = [DuplicateLements]

세트의 중복 요소를 생성하기위한 구문

매개 변수

  • setName : 이것은 우리가 만들고 싶은 세트의 이름입니다.
  • Duplicatelements : 이것은 복제 된 세트의 요소를 나타냅니다.
  • 유형 : 이것은 세트의 유형입니다. int, string 등이 될 수 있습니다.

반환 값

중복 요소가있는 세트를 작성한 후 반환 된 값은 모든 복제물을 폐기하는 세트가됩니다.

신속한 수입
// 중복 세트 컬렉션을 만듭니다
강의를하자 : set = [023, 023, 055, 034, 065,065, 134]
userId : set = [ "24SD2", "24SD2", "24SD2", "24SD2"를하자
짝수 : set = [2, 4, 6, 8, 10, 6, 2, 10]
isstudentnice를하자 : set = [false, true, true, false, false]
가격 : set = [24.32, 45.32, 40.00, 1.45, 1.45, 24.32]
Let Names : set = [ "Theodore", "Theodore", "Ruth", "Chichi", "Amaka", "Theodore"]
// 세트를 콘솔에 인쇄합니다
인쇄 (강의)
인쇄 (userId)
인쇄 (심지어)
인쇄 (isstudentnice)
인쇄 (가격)
인쇄 (이름)

Swift에서 중복 요소가있는 세트 객체 생성

설명

  • 4 ~ 9 행 : 세트를 만듭니다. 각 세트에는 일부 중복이 포함되어 있습니다.
  • 12-17 행 : 세트를 콘솔에 인쇄합니다.
  • 우리는 신속한 사람이 복제물을 폐기하는 것을 관찰합니다.

우리가 a에 중복 값을 삽입하려고한다면 &ldquo;세트&rdquo;, 무슨 일이 일어날 것? 상환 오류가 발생합니까??

그냥 그다&rsquo;티 복제본을 추가하십시오 값. 부울 추가하다(E E) – 지정된 것을 추가합니다 요소 이에 세트 아직 존재하지 않는 경우 (선택적 작동). 처럼, 추가하다() 메소드는 부울을 반환합니다 첨가 복제가 거짓을 반환합니다. 아래에 자바 소스 코드 예제는 잘 작동하며 JVM (Java Virtual Machine)&rsquo;t 불평.

세트에 중복 값을 삽입하면&rsquo;t 컴파일 시간을 얻거나 시간 오류를 실행하십시오. 그것은 그렇습니다&rsquo;t 세트에 중복 값을 추가하십시오.

아래는 객체가 이미 세트에있을 때 부울 값을 true 또는 false를 반환하는 Java 컬렉션의 세트 인터페이스의 add () 메소드입니다.

[부울 추가 (E E) – 아직 존재하지 않는 경우 지정된 요소를이 세트에 추가합니다 . 반환 : 부울 가치 참/거짓.]]

시연 할 간단한 프로그램, 세트에 중복 요소를 추가하면 어떻게됩니까?.

우리는 사용하여 다양한 유형의 색상을 저장하는 세트를 만들었습니다 해시 세트 클래스 객체로 인터페이스 참조를 설정하십시오. 우리는 다양한 유형의 색상을 추가하고 있습니다. e.g. 빨간색, 녹색 및 파란색 등. 세트에서 세트를 반복하여 콘솔 화면에 색상을 표시합니다.

의도적으로 해시 세트 복제 수락을 확인하기 위해 파란색을 다시 추가했습니다. Java 프로그램은 제대로 작동하며 컴파일러 또는 실행 시간 오류를 던지지 않습니다. 그러나 중복 값을 저장하지 않습니다.

소스 코드 예제 : 확인합니다 Java 세트가 동일한 요소를 추가하는 경우

Java 수입.유도.해시 세트; Java 수입.유도.세트; 공개 클래스 Canaddduplicationvalueinset < 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); >>> 

산출:
세트에서 사용할 수있는 색상은 다음과 같습니다
파란색
빨간색
녹색

Java 세트의 빠른 새로 고침 질문 및 답변 추가 추가.

  • Q) 해시 세트는 중복 값을 가질 수 있습니다?
    • a) 아니오, 해시 세트는 중복 값을 가질 수 없습니다.
    • a) 부울 값은 add () 메소드 I에 의해 반환됩니다.이자형. 객체가 존재하지 않고 이미 세트에 존재하는 경우 false가 없습니다.
    • a) 프로그램은 컴파일러 오류 또는 실행 시간 오류가 표시되지 않으며 복제물을 허용하지 않습니다.

    우리가 a에 중복 값을 삽입하려고한다면 &ldquo;세트&rdquo;, 무슨 일이 일어날 것? 상환 오류가 발생합니까??

    • Java에서 Arraylist 요소를 인쇄하는 4 가지 방법은 다음과 같습니다
    • 실시간 응용 프로그램 예제의 Java Priority 대기열이란??
    • Java의 비교 및 ​​비교기는 무엇입니까??
    • 벡터, 시간 복잡성 및 Java에서 벡터가 자라는 방법을 설명
    • Java Collections 답변이있는 짧은 인터뷰 FAQ – Real

    그룹화 된 주제

    Java 인터뷰 질문

    • 핵심 자바 질문
    • 자바 컬렉션 질문
    • Java 멀티 스레딩 질문
    • 자바 튜토리얼
    • 자바 운동

    C/C ++ 인터뷰 질문

    • C 프로그래밍
    • C ++ 기본 질문
    • C ++ 사전 질문
    • C ++ 프로그래밍 질문
    • C ++ 프로그래밍 예

    C# 인터뷰 질문

    Java MCQ

    • C# 기본 질문
    • C# 사전 질문
    • C# 멀티 스레딩 질문
    • C# 프로그래밍 질문
    • C# 프로그래밍 연습
    • C# 코딩 예제
    • C# 튜토리얼

    객관식 질문

    • 재귀 및 비 재귀를 사용하여 Java의 Fibonacci 시리즈
    • 루프를 사용하여 Java의 Fibonacci 시리즈 – 명확한 로직
    • 디자인 패턴을 사용해야하는 이유 – 가장 좋은 이유
    • 진짜 이야기 : 모든 CSE 신입생이 5 개월 안에 어떻게 일을했는지
    • 50 건의 까다로운 Java MCQ – 대답 할 수 있는지 확인하십시오
    • C 프로그래밍 예
    • C# 고급
    • C# 기본
    • C# 멀티 스레딩
    • C# 프로그램 연습
    • C# 프로그래밍
    • C# 프로그래밍 예
    • C# 튜토리얼
    • C ++ 고급
    • C ++ 기본
    • C ++ 프로그래밍
    • C ++ 프로그래밍 예
    • 코딩
    • 핵심 자바
    • 디자인 패턴
    • 디자인 패턴과 원리
    • DS & ALGO
    • 전자 저자
    • HR 인터뷰
    • 인터뷰 성공 사례
    • 자바 코딩
    • 자바 컬렉션
    • Java 컬렉션 예제
    • 자바 운동
    • 자바 멀티 스레딩
    • 자바 노트
    • 자바 튜토리얼
    • 수학 퍼즐
    • MCQ-C++
    • MCQ-Java
    • MCQ-SQL
    • MCQS 알고리즘 및 데이터 구조
    • 네트워킹 장군
    • Oracle PL SQL
    • 기타
    • 소프트웨어 작업
    • SQL
    • SQL 데이터베이스
    • 시간 복잡성
    • UML 다이어그램
    • 분류되지 않은

    Java : 세트에 중복 요소가 포함될 수있는 이유

    DZONE 커뮤니티에 가입하고 정식 경험을 얻으십시오.

    부담이 적은 응용 분야에서, 불필요한 물체의 생성은 종종 메모리 압력을 줄이고 가비지 수집기의 하중을 줄이기 위해 돌연변이 가능한 물체를 재사용함으로써 피하는 경우가 많습니다. 이것은 응용 프로그램이 훨씬 더 결정적으로 실행되고 훨씬 적은 지터로 실행됩니다. 그러나 이러한 재사용 된 객체가 어떻게 사용되는지에 대해주의를 기울여야합니다. 예를 들어 [B, B]와 같은 중복 요소를 포함하는 세트의 형태로 예상치 못한 결과가 나타날 수 있습니다.

    해시 코드 및 동등합니다

    자바&rsquo;S 내장 바이트 버퍼는 32 비트 주소 지정을 사용하여 힙 및 기본 메모리에 직접 액세스 할 수 있습니다. Chronicle Bytes는 64 비트 주소 오픈 소스 드롭 인 교체품으로 훨씬 더 큰 메모리 세그먼트를 해결할 수 있습니다. 이 두 유형은 객체의 바이트 내용에 따라 hashcode ()와 equals () 메소드를 제공합니다&rsquo; 기본 메모리 세그먼트. 이것은 많은 상황에서 유용 할 수 있지만, 이와 같은 변이 가능한 물체는 대부분의 자바에서 사용해서는 안됩니다&rsquo;대부분의 내장 맵 유형에서 키가 아닌 내장 세트 유형.

    참고 : 실제로 31 및 63 비트 만 유효 주소 오프셋으로 사용될 수 있습니다 (E.g. int 및 긴 오프셋 매개 변수 사용)

    변한 키

    아래에는 재사용 된 돌연변이 객체의 문제를 나타내는 작은 코드 예제가 제시됩니다. 코드는 바이트 사용을 보여 주지만 바이트 버퍼에 대해서도 동일한 문제가 있습니다.

    set set = new Hashset <> (); 바이트 바이트 = 바이트.( "A")에서; 세트.추가 (바이트); // 재사용 바이트.writeposition (0); // 이것은 이미 설정된 바이트에서 기존 객체를 돌연변이합니다.쓰기 ( "b"); // 동일한 바이트 객체를 다시 추가하지만 이제 // 다른 hashcode () 세트 아래에 있습니다.추가 (바이트); 체계.밖으로.println (&ldquo;set = &ldquo; + 세트);

    위의 코드는 먼저 객체를 추가합니다 &ldquo;ㅏ&rdquo; 세트에 [a]가 포함되어 있음을 의미하는 내용으로. 그러면 기존 객체의 내용이 수정됩니다 &ldquo;비&rdquo;, 세트를 [B]로 변경하는 데있어 부작용이 있지만 이전 해시 코드 값과 해당 해시 버킷이 변경되지 않은 상태입니다 (효과적으로 부실 해짐). 마지막으로, 수정 된 객체는 세트에 다시 추가되지만 이제는 다른 해시 코드 아래에서 이전 항목으로 이어지는 바로 그 객체가 남아 있습니다!

    결과적으로, 아마도 예상되는 [a, b]보다는 다음과 같은 출력이 생성됩니다

    일반 텍스트

    set = [b, b]

    바이트 버퍼 및 바이트 객체를 맵의 키로 키로 사용합니다

    Java를 사용할 때&rsquo;s 바이 테 버퍼 객체 또는 바이트 객체를 맵의 키로 또는 세트의 요소로서 하나의 솔루션은 IdentityHashMap 또는 컬렉션을 사용하고 있습니다.Newsetfrommap (New IdentityHashMap <> ()) 위에서 설명한 변이 가능한 물체 특성으로부터 보호합니다. 이것은 실제 바이트 컨텐츠에 대한 객체의 해싱을 만들고 대신 시스템을 사용합니다.물체의 수명 동안 결코 변하지 않는 IdentityHashCode ().

    또 다른 대안.AsReadonLyBuffer ()) 및 read 전용 객체를 수정하기위한 백도어를 제공 할 수있는 원래 변동성 객체에 대한 참조를 보유하지 마십시오&rsquo;S 컨텐츠.

    크로니클 맵 및 연대기 대기열

    Chronicle Map is an open-source library that works a bit differently than the built-in Java Map implementations in the way that objects are serialized and put in off-heap memory, opening up for ultra-large maps that can be larger than the RAM memory allocated to the JVM and allows these maps to be persisted to memory-mapped files so that applications can restart much faster.

    직렬화 프로세스는 객체의 내용이 복사되고 새로운 연관성을지도에 넣을 때마다 효과적으로 동결되기 때문에 실제로 재사용 가능한 돌연변이 가능한 객체를 키로 재사용 할 수있는 방식으로 알려진 또 다른 이점이 있습니다. 따라서 돌연변이 가능한 물체의 후속 수정은 제한되지 않은 객체 재사용을 허용하는 냉동 직렬화 된 컨텐츠에 영향을 미치지 않습니다.

    오픈 소스 크로니클 대기열은 비슷한 방식으로 작동하며 2 차 스토리지에 테라 바이트의 데이터를 유지할 수있는 대기열을 제공 할 수 있으며, 크로니클 맵과 같은 이유로 변이 가능한 요소의 객체 재사용을 허용합니다.

    결론

    hashcode ()가 객체의 내용, 일부 맵 및 설정 구현에서 의존하는 바이트 및 바이트 버퍼와 같은 변이 가능한 객체를 사용하는 것은 위험합니다.

    IdentityHashMap은 객체 돌연변이로 인한지도 및 세트의 손상을 방지하지만 이러한 구조를 실제 바이트 내용물에 비례 적으로 만듭니다.

    이전에 수정 된 메모리 세그먼트 객체의 읽기 전용 버전은 대체 솔루션을 제공 할 수 있습니다.

    크로니클 맵 및 크로니클 대기열은 변이성 대상을 무제한으로 사용할 수있게하여 결정 론적 저도 조작으로가는 경로를 열어줍니다.

    수락 된 중복 값을 설정합니다?

    Hashset은 중복 값을 허용하지 않는 세트 인터페이스의 구현입니다. 가장 중요한 것은 Hashset에 저장된 객체가 평등을 확인하려면 equals ()를 재정의해야하며, 중복 값에 대한 hashcode () 메소드는 세트에 저장됩니다. Hashmap. 맵에는 중복 키가 허용되지 않습니다. 기본적으로 Map Interface에는 두 개의 구현 클래스 Hashmap과 Treemap이 주요 차이점은 Treemap에 객체의 순서를 유지하지만 해시 맵에는 그렇지 않습니다. 해시 맵을 사용하면 널 값과 널 키를 허용합니다. 해시 세트와 해시 맵은 동기화되지 않습니다.

    이제 다음과 같이 아래의 표 방식으로 제공된대로 해시 맵과 해시 세트의 차이를 공식화합시다

    기초적인 해시 세트 해시 맵
    구현 인터페이스를 설정하십시오 맵 인터페이스
    복제 아니요 예 복제 값은 허용되지만 중복 키는 허용되지 않습니다
    더미 값 아니요
    추가 작업 중에 필요한 객체 1 2
    메커니즘 추가 및 저장 해시 맵 객체 해싱 기술
    속도 해시 맵보다 비교적 느립니다 해싱 기술로 인해 해시 세트보다 비교적 빠릅니다.
    없는 단일 널 값이 있습니다 단일 널 키 및 모든 널 값
    삽입 방법 삽입 프로세스에는 하나의 값 만 필요합니다. add () 함수는 삽입에 사용됩니다 삽입 프로세스에는 두 가지 값이 필요합니다. put () 함수는 삽입에 사용됩니다.
    데이터 저장고 데이터는 객체로 저장됩니다. 데이터는 키 값 쌍으로 저장됩니다.
    복잡성 에) o (1)

    깨끗한 Java 프로그램의 도움으로 내부 작업을 엿볼 수있어 이해를 파악합시다.

    Example 1: 해시 세트