JAVA Study

chloe·2024년 11월 1일

자바 기초

목록 보기
4/6
post-thumbnail

제 4장 배열

배열이란 어떠한 물건을 담을 수 있는 상자들을 뜻한다.
예를 들어 1부터 10까지의 수를 담을 배열이라면 [1, 2, 3, 4, 5, ...] 처럼 여러 숫자를 하나의 배열에 담을 수 있다. 배열에서는 각 값들이 특정 인덱스(순서)를 가지고 있어 그 인덱스에 따라 값을 꺼내거나 넣을 수 있다.

배열을 만들 때에는 크기를 지정하고, 데이터를 하나씩 넣을 수 있다.

import java.util.ArrayList;

ArrayList<String> name = new ArrayList<>();
name.add("철수");
name.add("영희");
  1. 컬렉션 (Collection)
  • 배열은 크기가 고정되어 있지만, 컬렉션은 데이터 개수가 늘어나거나 줄어들 때 유연하게 대응할 수 있다. [ 예를 들어, 사람 수를 미리 모를 때 사용하기 좋다. ]

컬렉션은 여러 가지 종류가 있는데 크게 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에서 데이터를 가져오는 방법은 밑에 자세히 서술하도록 하겠다.

3. Map

키와 값의 쌍으로 데이터를 저장한다. 키(Key)는 유일해야하며, 값(Value)은 중복될 수 있다.
특정 키로 값을 쉽게 찾을 수 있다.

  • 대표적인 클래스 : "HashMap", LinkedHashMap, TreeMap

활용 예시로는 학생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에서도 특정 값을 가져오는 방법이 있다.
순서는 없지만, 이들 컬렉션은 각자의 규칙에 따라 데이터를 찾아준다.

  1. Set에서 원하는 값 찾기
  • Set은 순서가 없지만, 특정 값이 존재하는지 확인할 수 있다. 예를 들어, 어떤 과목이 Set 안에 있는지 확인하려면 contains() 메서드를 사용할 수 있다.
HashSet<String> subject = new HashSet<>();
subject.add("수학");
subject.add("영어");

// "영어"라는 과목이 있는지 확인
if (subject.contains("영어")) {
    System.out.println("과목에 영어가 있습니다.");
}

하지만 Set에는 인덱스가 없기 때문에, 배열처럼 subject[1]처럼 위치를 지정해 가져오는 건 안 된다. Set은 보통 데이터의 존재 여부나 중복 제거가 필요할 때 사용한다.

  1. Map 에서 원하는 값 찾기
  • Map은 키를 이용해 원하는 값을 빠르게 찾을 수 있는 구조라서 순서가 없어도 특정 값을 쉽게 가져올 수 있다. get() 메서드를 사용해 키를 이용해 값을 가져오는 방식이다.
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 : 순서가 없지만 키로 값에 접근할 수 있어서, 데이터 검색 속도가 빠르다.

profile
안녕

0개의 댓글