본문 바로가기
Java

[Java] 컬렉션 프레임워크 (List, Set, Map)

by 스응 2023. 2. 22.
728x90
728x90

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

  - 데이터를 표현/조작하는 데 사용되는 클래스와 인터페이스들의 집합

  - 프로그램 구현에 필요한 자료 구조를 구현해 놓은 JDK 라이브러리

  - 개발에 소요된 시간을 절약하면서 최적화된 알고리즘을 사용할 수 있음

  - 데이터를 저장하는 여러 가지 방법을 제공함

 

 


List 계열 인터페이스

  - 객체를 순서에 따라 저장함 (인덱스로 접근 가능)

  - 중복 값 가능

 

ArrayList 클래스

// 타입 미설정 시 (Object로 선언)
ArrayList 리스트명 = new ArrayList();

// 타입 설정 시 (제네릭 사용)
ArrayList<값자료형> 리스트명 = new ArrayList<>();

	// ex) 정수 자료형이 들어가는 ArrayList
	// ArrayList<Integer> list = new ArrayList<>();

// 선언과 동시에 값 추가
ArrayList<값자료형> 리스트명 = new ArrayList<값자료형>(Arrays.asList(값1, 값2, ...));

 

 

  - 배열과 달리, 선언 시 메모리 공간의 크기를 지정하지 않음

      → 값의 개수에 따라 크기가 유연하게 변함

  - 유의사항

      : 제네릭 내에는 객체 타입만 지정할 수 있음

          → 기본 자료형인 int는 들어갈 수 없어, 정수 타입을 넣으려면 Integer로 사용해야 함

          → Integer는 null 값도 입력할 수 있음

 

#  ArrayList - 값 추가

// 값만 지정할 경우 (인덱스에 순차적으로 값을 추가함)
리스트명.add(값);

// 인덱스와 값을 지정할 경우 (해당 인덱스에 값을 추가함)
리스트명.add(인덱스, 값);

 

  - 기존에 이미 값(null 포함)이 추가되어 있는 인덱스에 추가할 경우

      → 값이 덮어쓰기되는 것이 아니라, 끼워 넣어서 추가됨

      ex) 현재 index 1 : null, index 2 : 100일 때

            리스트.add(1, 20);을 하면 index 1 : 20, index 2 : null, index 3 : 100으로 밀려남

 

#  ArrayList - 모든 값 확인

System.out.println(리스트명.toString());

 

#  ArrayList - 특정 값 가져오기  (배열의 인덱스 연산과 유사)

리스트명.get(인덱스);

 

#  ArrayList - 리스트 크기  (배열의 length와 유사)

리스트명.size();

 

#  ArrayList - 값 삭제

// 특정 인덱스의 값 삭제
리스트명.remove(인덱스);

// 값 전체 삭제
리스트명.clear();

 

#  ArrayList - 해당 값이 있으면 true 반환

리스트.contains(값);

 

#  ArrayList - 해당 값이 있으면, 그 값의 인덱스 위치 반환

리스트명.indexOf(값);

// 값이 없는 경우, -1 반환

 

#  반복자 타입으로 형 변환

// 형 변환
Iterator<값자료형> 반복자명 = 리스트명.iterator();

// 요소가 있으면 true 반환
반복자명.hasNext();

// 반복자의 값 확인하기
while (반복자명.hasNext()) {
    System.out.println(반복자명.next());
}

 

 

for each 문

for (자료형 요소변수 : 리스트) {
	코드;
}

 

  - 리스트의 크기만큼 반복함

  - 반복 시, '요소변수'는 리스트의 요소를 순차적으로 가리킴 (변수명은 아무거나 무관)

 

 

반응형
728x90

Set 계열 인터페이스

  - 객체 간의 순서가 없음 (인덱스 X)

      → index for 문을 사용할 수 없음

  - 중복 값 불가능

      → 각 객체는 고유한 값을 가짐

  - 저장 순서와 출력 순서가 다를 수 있음 

 

HashSet 클래스

HashSet<값자료형> 셋명 = new HashSet<>();

 

#  HashSet - 값 추가

셋명.add(값);

 

#  HashSet - 값 삭제

// 특정 값 삭제
셋명.remove(값);

// 전체 값 삭제
셋명.clear();

 

#  HashSet - 셋 크기

셋명.size();

 

#  HashSet - 모든 값 확인

System.out.println(셋명.toString());

 

#  반복자로 반복문 처리

// 형 변환
Iterator<값자료형> 반복자명 = 셋명.iterator();

// 요소가 있으면 true 반환
반복자명.hasNext();

// 반복자의 값 확인하기
while (반복자명.hasNext()) {
    System.out.println(반복자명.next());
}

 

 


Map 계열 인터페이스

  - Key와 Value의 쌍으로 연관 배열 자료 구조를 구현한 인터페이스

  - Key는 중복 불가능

  - Key를 사용해서 Value를 검색할 수 있음

  - 하나의 Key에 대해 하나의 Value만 저장할 수 있음

  - 기본적으로 순서가 없음

      → Key 값을 인덱스 형식(0, 1, 2, ...)으로 지정하면 for문 활용 가능

 

HashMap 클래스

HashMap<Key자료형, Value자료형> 맵명 = new HashMap<>();

 

  - 빠른 검색 속도 제공

  - Value에 null 값도 저장할 수 있음  (↔ HashTable 클래스 : null 값 저장 불가)

 

#  HashMap - 값 추가

맵명.put(Key값, Value값);

 

#  HashMap - 전체 Key, Value 값 확인

System.out.println(맵명);  // 출력 : {key1 = value1, key2 = value2, ...}
// == System.out.println(맵명.toString());

 

#  HashMap - 특정 Value 값 가져오기

맵명.get(Key값);

 

  - 없는 Key 값을 입력하면 null 반환

 

#  HashMap - 맵 크기

맵명.size();

 

#  HashMap - 값 삭제

// 특정 값 삭제
맵명.remove(Key값);

// 전체 값 삭제
셋명.clear();

 

#  HashMap - 저장된 값이 없으면 true 반환

맵명.isEmpty();

 

#  HashMap - 해당 Key 값이 있으면 true 반환

맵명.containsKey(Key값);

 

#  HashMap - 해당 Value 값이 있으면 true 반환

맵명.containsValue(Value값);

 

 

Map 계열에 대해 for 문 활용하기

#  entrySet() 활용

for (Entry<Key자료형, Value자료형> 요소변수 : 맵명.entrySet()) {
    // Key 값 가져오기
    요소변수.getKey();
    // Value 값 가져오기
    요소변수.getValue();
}

 

#  keySet() 활용

// keySet() : Key 값만 모아서 Set 형식으로
for (Key자료형 요소변수 : 맵명.keySet()) { // 요소변수는 key로 설정하면 알아보기 쉬움
    // Key 값 가져오기
    요소변수;
    // 현재 반복 회차의 Key 값에 해당하는 Value 값 가져오기
    맵명.get(요소변수);
}

 

320x100
반응형

'Java' 카테고리의 다른 글

[Java] 소켓 통신  (0) 2023.03.03
[Java] 입출력 스트림 (I/O Stream)  (1) 2023.03.03
[Java] 자료 구조  (0) 2023.02.21
[Java] 쓰레드 (Thread)  (0) 2023.02.19
[Java] 제네릭 (Generic)  (0) 2023.02.17

댓글