본문 바로가기

BackEnd/Java

1031 JAVA - Collection Framework

728x90
반응형

Collection Framework (컬렉션 프레임워크)

컴퓨터 시스템에서 데이터를 효율적으로 관리하는 방법
자료구조(Data Structure) 라고 함

 

자료 구조를 자바에서 구현하여 제공하는 클래스들의 모음 => set, list, map 인터페이스 계열로 구분됨
set, list 는 공통적으로 collection(-List-ArrayList) 인터페이스를 상속받으므로 제공되는 메서드가 거의 동일함 
각 인터페이스들의 구현체 클래스를 사용하여 데이터를 관리함 
-java.util 패키지에 컬렉션 프레임워크 API 들이 제공, toString() 메서드가 오버라이딩 되어있음 
-모든 데이터는 객체 형태로 관리되며, 기본 데이터타입을 사용할 경우 Wrapper 클래스 타입으로 오토박싱 일어남.

1. set 계열 

 저장 순서 유지 x, 데이터 중복 허용 x 
=> 주머니에 공을 무작위로 집어넣은 것과 유사한 구조로 데이터의 저장되는 순서 유지 및 중복이 불가능한 구조
=> 매우 효율적인 중복 제거 수단으로 사용 가능 

 인덱스를 사용하지 않음  - 구현체 클래스 : HashSet, treeSet

//	HashSet<E set = new HashSet();

Set set = new HashSet();

//Set 계열 메서드 사용
//1.boolean isEmpty() : 컬렉션 객체가 비어있는지 여부 리턴
System.out.println("set 객체가 비어있는가?" + set.isEmpty());

//2.int size() : 컬렉션 객체에 저장된 요소 (데이터, 객체) 개수 리턴
System.out.println("set 객체의 저장된 요소 개수 : " + set.size());

//3.boolean add(Object o) : 컬렉션 객체에 요소 (o, 데이터) 를 추가
//=> 파라미터 Object 타입이므로 모든 타입 데이터 추가 가능(기본형, 객체)
//=> 리턴타입이 boolean 이므로 요소 추가 성공 여부 리턴(중복 시 추가 x)
set.add(1); //int 형 -> Integer -> Object 로 변환되어 저장 됨 
set.add("TWO"); //String -> Object 로 변환 
set.add(3.14); //double -> Double -> Object 변환 

System.out.println("set 객체가 비어있는가?" + set.isEmpty());
System.out.println("set 객체의 저장된 요소 개수 :" + set.size());

//toString() 메서드가 오버라이딩 되어 있으므로 출력문에 사용 가능(생략 가능) 
System.out.println("set 객체의 모든 요소 출력 : " + set);

System.out.println("실수 3.14 추가 가능한가?" + set.add(3.14));
// 기존에 3.14 가 저장되어 있으므로 중복이 불가능하여 저장되지 않고 중복되어 저장이 실패했다는 의미로 false 리턴됨
System.out.println("set 객체의 모든 요소 출력 " + set);

System.out.println("문자 '4'추가 가능한가? " + set.add('4'));
System.out.println("set 객체의 모든 요소 출력 : " + set);

//boolean contains(Object o) : 컬렉션 객체 내의 요소 o 포함 여부 리턴 
System.out.println("실수 3.14 삭제 :" + set.remove(3.14));
System.out.println("set 객체의 모든 요소 출력 : " + set);
System.out.println("실수 3.14 삭제 : " + set.remove(3.14));

//void clear() : 컬렉션 요소 초기화 
set.clear();
System.out.println("set 객체의 모든 요소 출력 : " + set);
System.out.println("set 객체의 저장된 요소 개수 : " + set.size());

//Object[] toArray() :컬렉션을 배열로 변환 
	Object[] oArr =  set.toArray();
	for(int i = 0; i<oArr.length; i++) {
			System.out.print(oArr[i]);
		}
		
		System.out.println();
		System.out.println(Arrays.toString(oArr));
		//배열의 내용을 문자열로 변환

 

 

//set 또는 list 계열 생성 시 기존 객체 데이터 이전(복사) 가능
    Set set2 = new HashSet(set);
    //=> set 객체를 set2 객체에 전달(= 요소 전체 복사)
    System.out.println("set2 객체의 모든 요소 출력 : " + set2);

    set2.remove(5);
    //복사된 객체의 요소를 삭제하더라도 다른 객체의 요소에 영향이 없다
    System.out.println("set 객체의 모든 요소 출력 : " + set);
    System.out.println("set2 객체의 모든 요소 출력 : " + set2);

    System.out.println("------------------------------");

    Set set3 = new HashSet();
    set3.add(10);
    set3.add(5);
    System.out.println("set3 객체의 모든 요소 출력 : " + set3);

    set3.addAll(set3);
    set3.add(5);

    //객체 생성 후 addAll() 메서드를 통해 


    Set set4 = new HashSet();
    set4.add(300);
    set4.add(1);
    set4.add(5);
    set4.add(30);
    //set4.add("200"); //같은 데이터 타입만 정렬 가능 
    // => [300,1,5,30]

    System.out.println("set4 객체의 모든 요소 출력 " + set4);

    //TreeSet 객체를 활용하면 같은 타입 데이터가 저장된 Set 객체 정렬 가능
    // => 단, 같은 데이터만 정렬 가능하며 다른 타입일 경우 예외 발생
    // => 수치데이터는 숫자 크기 순으로 오름차순 정렬되며 문자는 문자 코드값 기준으로 오름차순 정렬됨 (문자열 은 첫번째 문자부터 차례로 비교 )

    TreeSet treeSet = new TreeSet(set4);
    System.out.println("set4 객체의 모든 요소 출력 : " + treeSet);

 

 

문제


Set 계열 객체를 활용하여 로또 번호 생성기 작성 
1. Set 타입 객체 myLotto 생성
2. 1 ~ 45 사이의 중복되지 않은 난수 (로또번호) 6개를 Set 객체에 저장
               ex) "나의 로또 번호 : 1 10 11 15 23 41 43" 출력


3. 이번주 로또 1등 당첨 번호를 Set 객체 thisWeekLotto에 저장
               => "이번주 1등 당첨번호 : 7 8 11 13 15 23" 출력
4. 기존의 myLotto 에 저장된 번호와 1등 당첨번호를 비교하여 일치하는 번호 개수와 등수 출력
               => ex) 번호가 3개(11 13 23)일치 시 "일치하는 번호 개수 : 3개 (4등)"
=> 번호가 6개 일치 시 "일치하는 번호 개수 : 1개 (1등)"
               => 5개 -> 2등
                    4개 -> 3등
                    3개 -> 4등
                   나머지-> 꽝

Set 객체 (myLotto, thisWeekLotto) 생성. 만약, 정렬까지 수행하려면 TreeSet 객체 생성
                => 제네릭 타입은 Integer으로 지정 //thisWeekLotto 생성

 

728x90
반응형

'BackEnd > Java' 카테고리의 다른 글

1102 JAVA - 로또 생성  (0) 2022.11.02
1026 JAVA - Generics  (0) 2022.10.26
1026 JAVA - Enum_type  (0) 2022.10.26
1024 JAVA - java.util.Random  (0) 2022.10.24
1020 JAVA - Exception ~ java_util_package  (0) 2022.10.20