컬렉션 (Collection) - 1

DONI·2021년 10월 5일
0

Java

목록 보기
41/46
post-thumbnail

🏹 컬렉션 (Collection)

자바에서 제공하는 자료구조를 담당하는 프레임워크 → 자료구조의 모음
추가, 삭제, 정렬 등의 기능을 간단하게 처리할 수 있어 알고리즘을 구현할 필요 X
java.util 패키지에 포함되어 있음

  • 자료구조 : 데이터를 메모리에서 구조적으로 처리하는 방법론

🏹 컬렉션의 장점

  • 배열의 문제점
    1) 한 번 지정한 크기는 변경할 수 없다.
    2) 배열에 기록된 중간 위치 데이터의 추가, 삭제가 불편하다.
    3) 여러 타입의 데이터를 저장할 수 없다.

    🔻 컬렉션의 장점
       1) 크기에 제약이 없다.
       2) 추가, 삭제, 정렬 등의 기능 처리를 간단하게 해결할 수 있다.
       3) 여러 타입의 데이터를 저장할 수 있다.

    ⭐ 컬렉션은 객체만 저장할 수 있기 때문에,
         기본 자료형을 저장해야 하는 경우에는 Wrapper 클래스를 사용한다!


🏹 컬렉션의 주요 인터페이스


🏹 List 인터페이스

자료들을 순차적으로 나열한 자료구조 (배열의 업그레이드 형태)
index를 통해 순서가 유지되며, 중복해서 객체를 저장할 수 있다.

  • ArrayList 클래스가장 많이 사용 !
    배열과 비슷한 형태의 리스트 (검색에 효율적)
    기본 생성자로 생성 시 초기 용량은 10으로 설정된다.

  • Vector 클래스
    Vector 클래스의 업그레이드 버전 → ArrayList 클래스
    List 객체들 중에서 가장 성능이 좋지 않다.

  • LinkedList 클래스
    요소 하나하나가 줄로 연결된 형태의 리스트 (추가, 삭제에 효율적)
    객체 추가, 삭제 시 인덱스 바로 앞/뒤 링크만 변경하면 되기 때문에
    추가, 삭제가 빈번하게 일어나면 ArrayList보다 성능이 좋다.


🏹 List 계열 주요 메서드

  • add(E e) : 리스트의 맨 끝에 객체 추가
    list.add(new Dancer("아이키", 89));

  • add(int index, E e) : 지정된 index 위치에 객체 추가
    list.add(3, new Dancer("허니제이", 87));

  • get(int index) : index 위치에 저장된 객체 반환
    list.get(0);

  • isEmpty( ) : 컬렉션이 비어있으면 true, 아니면 false 반환

  • size( ) : 리스트에 저장된 객체 수 반환

  • Object set(int index, E e) : index 위치에 저장된 객체를 e로 변경하고 기존 객체 반환
    Object obj = list.set(2, new Dancer("립제이", 88));

  • Object remove(int index) : index 위치에 저장된 객체를 삭제하고 기존 객체 반환
    Object obj = list.remove(1);

  • indexOf(Object o) : 매개변수와 같은 객체가 존재하는 index 위치 반환 (없으면 -1 반환)


🏹 향상된 for문 (for each문)

컬렉션이나 배열의 모든 요소를 처음부터 끝까지 순서대로 접근하는 용도의 for문
for (하나씩 꺼내서 담을 변수 선언 : 컬렉션 또는 배열명) { }

   예) list에 저장된 데이터를 모두 출력
       for (Object obj : list) { System.out.println(obj); }


🏹 제네릭 (Generic) : < E >

클래스, 메서드, 컬렉션 내부에 사용되는 클래스 타입을 한 종류로 제한하는 기능 → 타입 제한

  • 제네릭의 이점
    • 하나의 타입으로 제한되기 때문에 instanceof, 다운캐스팅 작업 불필요
    • 하나의 코드로 여러 타입 처리 가능 (다형성)

🚩 소스코드

list 리스트에서 Dancer 객체의 이름 출력

  • 첫 번째 방법 : 일반 for문
public void example1() {
	ArrayList list = new ArrayList();

	for (int i = 0; i < list.size(); i++) {
		if (list.get(i) instanceof Dancer) {
			// list의 i번째 요소가 Dancer 객체의 주소를 참조하고 있는 경우 (true)
			
			System.out.println(((Dancer)list.get(i)).getName());
			// Object -> Dancer 다운 캐스팅
			
		} else
			System.out.println(list.get(i));
	}
}
  • 두 번째 방법 : 향상된 for문
public void example2() {
	ArrayList<Dancer> list = new ArrayList<Dancer>();
	// Dancer 타입으로 제한된 ArrayList 객체 생성
	// 생성된 ArrayList에는 Dancer만 저장 가능하므로, 저장된 데이터는 모두 Dancer이다.

	// 향상된 for문으로 모두의 이름만 출력
	for (Dancer d : list) {
		// list가 Dancer 타입으로 제한되어 있기 때문에
		// 하나씩 순서대로 꺼내서 저장하는 변수의 타입도 Dancer이다. (instanceof 불필요)
		
		System.out.println(d.getName());
		// d가 Dancer 타입이기 때문에 다운캐스팅 불필요
	}
}
profile
틀린 내용이 있다면 댓글 또는 이메일로 알려주세요 ❤ꔛ❜

0개의 댓글