Programming Language/JAVA 2020. 11. 3. 제너릭을 이용하는 대표적인 사례 >> Collection Framework 컬렉션이란? 컬렉션 프레임워크가 필요한 이유 자바의 컬렉션 프레임워크 장점 코어 콜렉션 인터페이스 - 계층 구조를 통해 공통부를 슈퍼로 올리고 구체화되는 상속 구조를 가진다. ① Collection <Interface> : 가장 상위의 클래스 (메소드 종류) (기능) - 변환 생성자 : 모든 컬렉션 c에서 다른 구체 타입으로 변환 가능 - 벌크 연산 : containsAll(), addAll(), removeAll(), retainAll(), clear() // 여러 개를 한번에 처리하는 메소드(true와 false 반환) ② Set <Interface> : Collection과 비교하여, 중복된 요소를 제외하고, 객체를 추가 기능을 가진다. (구체 클래스 구현) (메소드 종류) - add() - addAll() : 합집합 (예제) Set<Integer> randSet = new HashSet<>(); Collection<Integer> c = new ArrayList<>(); int n=0; for(int i=0; i<30; i++){ n = rand.nextInt(30); randSet.add(n); // randSet - 난수집합(중복 X) c.add(i); // c - 제외집합 } c.removeAll(randSet);③ List <Interface> : 콜렉션과 비교하여 위치 기반으로 접근할 수 있다. (구체 클래스 구현) (메소드 종류) (예제) 두 번째 예제에서 <?>에 무엇이 나오든 간에 list의 자료형으로 컴파일되기 때문에 swap 함수를 사용할 때 list의 자료형을 따로 써주지 않아도 처음에 list에 선언된 자료형으로 알아서 변환하도록 한다. ④ Map <Interface> (구체 클래스) (메소드) (예제) HashMap<Integer, Student> stMap = new HashMap<>(); // HashMap<키, 값> for(Student st: stList) stMap.put(st.id, st); // 학번으로 학생을 넣어두겠다. int id = s.nextInt(); Student st1 = stMap.get(id);public class Freq{ // 빈도조사 public static void main(String[] args){ Map<String, Integer> m = new HashMap<String, Integer>(); // MAP<글자, 횟수> for(String a: args){ Integer freq = m.get(a); m.put(a, (freq == null)? 1: freq+1); } // m.size는 단어 개수 } }(컬렉션 뷰) // 컬렉션 뷰에서 요소를 삭제하면 맵에서도 삭제된다, 컬렉션 뷰에서 추가는 불가능하다. - keySet : Map의 키 Set을 나타냄 |