배열이란 어떠한 물건을 담을 수 있는 상자들을 뜻한다.
예를 들어 1부터 10까지의 수를 담을 배열이라면 [1, 2, 3, 4, 5, ...] 처럼 여러 숫자를 하나의 배열에 담을 수 있다. 배열에서는 각 값들이 특정 인덱스(순서)를 가지고 있어 그 인덱스에 따라 값을 꺼내거나 넣을 수 있다.
import java.util.ArrayList;
ArrayList<String> name = new ArrayList<>();
name.add("철수");
name.add("영희");
컬렉션은 여러 가지 종류가 있는데 크게 List, Set, Map 세 가지로 나눌 수 있다.
#List (리스트)
순서가 있는 데이터의 모음이다. 리스트에 데이터를 넣는 순서가 그대로 유지되며, 중복된 데이터도 허용된다.
대표적인 클래스 : ArrayList, LinkedList, Vector
(ArrayList를 가장 많이 사용한다.)
활용 예시로는 학생 명단처럼 순서가 중요한 데이터나 같은 값이 여러 개 들어갈 수 있는 경우에 유용하다.
====================================================================
ArrayList - 데이터의 위치를 인덱스로 바로 접근할 수 있다.
import java.util.ArrayList;
ArrayList<String> name = new ArrayList<>();
name.add("철수");
name.add("영희");
name.add("영희"); // 중복 허용
System.out.println(name.get(0)); // 철수
System.out.println(name); // [철수, 영희, 영희]
Set 대표적인 클래스로 HashSet, LinkedHashSet, TreeSet 이 있다.
활용 예시로는 학생ID 처럼 중복을 허용하지 않고, 하나씩만 있어야 하는 데이터를 저장할 때 사용한다.
(example) - HashSet
import java.util.HashSet;
HashSet<String> subject = new HashSet<>();
subject.add("수학");
subject.add("영어");
subject.add("영어"); // 중복된 값 추가 시 무시됨
System.out.println(subject); // [수학, 영어] (순서가 일정하지 않음)
** HashSet은 순서가 없기 때문에 데이터를 저장한 순서대로 접근할 수 없다.
순서가 없는 Set에서 데이터를 가져오는 방법은 밑에 자세히 서술하도록 하겠다.
키와 값의 쌍으로 데이터를 저장한다. 키(Key)는 유일해야하며, 값(Value)은 중복될 수 있다.
특정 키로 값을 쉽게 찾을 수 있다.
활용 예시로는 학생ID와 이름을 짝지어 저장할 때처럼, 어떤 키에 대해 특정 값을 연결하고 싶을 때 사용한다.
(example) - HashMap
import java.util.HashMap;
HashMap<String, Integer> grade = new HashMap<>();
grade.put("철수", 90);
grade.put("영희", 85);
grade.put("영희", 95); // 키가 같으면 값을 덮어씀
System.out.println(grade.get("철수")); // 90
System.out.println(grade); // {철수=90, 영희=95}
** HashMap은 순서가 없다. 만약 데이터를 넣은 순서를 유지하고 싶다면 LinkedHashMap을 사용할 수 있다.
컬렉션 클래스의 공통 기능
add() : 데이터 추가
remove() : 특정 데이터를 삭제
contains() : 특정 데이터가 있는지 확인
size() : 데이터의 개수를 반환
isEmpty() : 컬렉션이 비어있는지 확인
요약 |
List : 순서가 있고, 중복 허용
Set : 순서가 없고, 중복 불가
Map : 키와 값으로 이루어진 쌍, 키는 중복 불가
컬렉션 중 순서가 없는 Set과 Map에서도 특정 값을 가져오는 방법이 있다.
순서는 없지만, 이들 컬렉션은 각자의 규칙에 따라 데이터를 찾아준다.
HashSet<String> subject = new HashSet<>();
subject.add("수학");
subject.add("영어");
// "영어"라는 과목이 있는지 확인
if (subject.contains("영어")) {
System.out.println("과목에 영어가 있습니다.");
}
하지만 Set에는 인덱스가 없기 때문에, 배열처럼 subject[1]처럼 위치를 지정해 가져오는 건 안 된다. Set은 보통 데이터의 존재 여부나 중복 제거가 필요할 때 사용한다.
HashMap<String, Integer> grade = new HashMap<>();
grade.put("철수", 90);
grade.put("영희", 85);
// "철수"의 점수 가져오기
int culsuGrade = grade.get("철수");
System.out.println("철수의 점수: " + culsuGrade);
여기서 철수가 키에 해당하고, 90이 값이다. 키를 알면 그 키에 대응하는 값을 바로 가져올 수 있는 것이 Map의 장점이다.
Set과 Map의 사용 목적 요약
Set : 순서와 인덱스가 없지만, 중복된 데이터를 넣지 않고 존재 여부를 빠르게 확인할 수 있다.
Map : 순서가 없지만 키로 값에 접근할 수 있어서, 데이터 검색 속도가 빠르다.