JAVA_11_컬렉션1

송지윤·2024년 2월 19일

Java

목록 보기
17/22

컬렉션 (Collection)

수집, 모집, 모음...

메모리상에서 자료를 구조적으로 처리하는 방법을 자료구조라 일컫는데
컬렉션(Collection)은 자바에서 제공하는 자료구조를 담당하는 프레임워크
(자바에서 제공하는 자료구조 모음)

추가, 삭제, 정렬 등의 기능처리가 간단하게 해결 되어 자료구조적 알고리즘을 구현할 필요 없음

java.util 패키지에 포함되며, 인터페이스를 통해 정형화된 방법으로 다양한 컬렉션 클래스 이용 가능

컬렉션 안에 List, Set, Map 다 제공하고 있음
=> 배열보다 진화된 형태, 여러 데이터를 관리하기 위함

자료구조

데이터(자료)를 메모리에서 구조적으로 처리하는 방법론이다.

선형구조, 비선형구조 알고 있어야함

배열의 문제점 & 컬렉션의 장점

배열의 문제점

  1. 한 번 크기를 지정하면 변경할 수 없다.
    • 공간 크기가 부족하면 에러가 발생 -> 할당 시 넉넉한 크기로 할당하게 됨(메모리 낭비)
    • 필요에 따라 공간을 늘리거나 줄일 수 없음
  2. 배열에 기록된 데이터에 대한 중간 위치의 추가, 삭제가 불편하다.
    • 추가, 삭제할 데이터부터 마지막 기록된 데이터까지 하나씩 뒤로 밀어내고 추가해야 함(복잡한 알고리즘)
  3. 한 타입의 데이터만 저장 가능하다.

컬렉션의 장점

  1. 저장하는 크기의 제약이 없다.
  2. 추가, 삭제, 정렬 등의 기능 처리가 간단하게 해결된다.
    • 자료를 구조적으로 처리 하는 자료구조가 내장되어 있어 알고리즘 구현이 필요 없음
  3. 여러 타입의 데이터가 저장 가능하다.
    • 객체만 저장할 수 있기 때문에 필요에 따라 기본 자료형을 저장해야 하는 경우 Wrapper클래스 사용(기본 자료형을 객체화 해줘야함)

Wrapper Class == 포장용 클래스
기본 자료형을 객체 형태로 업그레이드

Wrapper 클래스 8가지
Boolean, Byte, Short, Long, Float, Double
Integer, Character

컬렉션의 주요 인터페이스

자바에서 List Set Map 인터페이스로 만들어놓고 제공함

List Set 은 add() 로 추가
add() remove() 추상메서드
각각 안에서 다르게 정의해 둠
Map 은 put() 으로 추가
(계열이 조금 다름)

List(나열) - 기본적으로 배열 모양을 가짐
중복 허용

Set(집합) - 주머니 모양의 집함
중복 제거 (순서가 없어서 언제 들어온 애인지 모름 그래서 중복을 제거해버림)
하나의 Set에는 똑같은 값이 있을 수 없음

Map(지도) - Key : value
좌표 검색하면 주소 문구 나옴
자바스크립트 객체가 Map임
출석부라고 생각하면 좋음
번호(Key) 이름(Value)
1 철수
2 영희
3 짱구
4 철수
value 값의 중복은 허용함 (철수 2명 허용)
Key 중복은 안됨 (고유값임)

List

인터페이스
자료들을 순차적으로 나열한 자료구조로 인덱스로 관리되며, 중복해서 객체 저장 가능
인터페이스 상속 받아서 구현한 클래스로 ArrayList와 Vector, LinkedList가 있음

List 계열 주요 메소드

ArrayList

검색
List의 후손으로 초기 저장 용량은 10으로 자동 설정되며 따로 지정도 가능
저장 용량을 초과한 객체들이 들어오면 자동으로 늘어나며 고정도 가능
동기화(Synchronized)를 제공하지 않음
(Vector는 동기화 제공)

사용 예

학생 정보를 저장할 List 생성

java.util.List 인터페이스 : List 에 반드시 필요한 필수 기능을 모아둔 인터페이스
인터페이스 객체 생성 X, 부모 참조변수 O
인터페이스는 미완성 클래스 객체 생성 안됨 ( List(); 안됨 )

java.util.ArrayList : 배열 형태 List (가장 대표적인 List 자식 클래스)

검색(조회)에 효율적
studentList 컬렉션 명
private List studentList = new ArrayList();
ArrayList() 기본생성자 : 기본 크기가 10짜리 리스트 생성
-> 하지만 리스트는 크기가 늘었다 줄었다 하기 때문에 큰 의미 없음.

ArrayList(용량) : 용량만큼의 리스트 생성
-> 너무 큰 값을 작성하면 메모리를 많이 소모함.

제네릭스 (Generics)
-> 컬렉션에 저장되는 객체 타입을 한가지로 제한할 때 씀
표기법 <>

private List<Student> studentList = new ArrayList<Student>();

public void ex() {
	studentList.add(new Student());
}

List.add(Object e) : 리스트에 객체를 추가
매개변수 타입이 Object == 모든 객체를 매개변수로 전달할 수 있음

컬렉션 특징 : 여러 타입의 데이터를 저장할 수 있음
Object List.get(index i); : 반환형이 Object 리스트에서 i 번째 인덱스에 있는 객체를 반환
반환형이 Object == 모든 객체를 반환할 수 있다.

System.out.println(studentList.get(0).getName());
The method getName() is undefined for the type Object

반환형이 Object 타입 Student 타입에 있는 getName 못 가져옴
사용하려면 강제 형변환 해줘야함

System.out.println(((Student)studentList.get(0)).getName());

Vector

List의 후손
ArrayList와 동등하지만 동기화(Synchronized)를 제공한다는 점이 ArrayList와 차이점
🡪 List 객체들 중에서 가장 성능이 좋지 않음

LinkedList

List의 후손으로, 인접 참조를 링크해 체인처럼 관리
특정 인덱스에서 객체를 제거하거나 추가하게 되면 바로 앞/뒤 링크만 변경하면 되기 때문에 객체 삭제와 삽입이 빈번하게 일어나는 곳에서는 ArrayList보다 성능이 좋음

private List studentList = new LinkedList();

Comparable, Comparator

Collections.sort()

Collections.sort(List<T> list) 🡪 T객체에 Comparable을 상속받아 compareTo 메소드 재정의를 통해 정렬 구현 (단 한 개의 정렬)

Collections.sort(List<T> list, Comparator<T> c) 🡪 지정한 Comparator클래스에 의한 정렬 (여러 개의 정렬)

0개의 댓글