정리용/java

[JAVA] 기초 5. Array와 Collection

hee-ya07 2025. 1. 23. 22:06

1. Array

  • 배열
    :: 길이가 고정된 값의 나열
    :: 길이가 고정되어 있기 때문에 add() , delete() 불가
    => list로 전환 후에 작업해야 함
    => 작업 이후 다시 배열로 전환 필요
더보기
Integer[] integer_array = new Integer[3]; // 길이 기반 Array 선언 (Integer 요소)
Integer[] integer_array = new Integer[]{1, 2, 3}; // 값 기반 Array 선언 (Integer 요소)
System.out.println(integer_array.length);

 

Member[] members = {
        new Member(1, "Aaron"),
        new Member(2, "Baron"),
        new Member(3, "Caron"),
        new Member(4, "Daron"),
};

2. Collection 자료구조

2.0 Collection Framework

:: 데이터를 효율적으로 저장하고 관리하기 위한 클래스와 인터페이스의 집합

  • 주요 인터페이스
    1. List ::  순서 O 데이터 집합, 값의 중복 O
    2. Set :: 순서  X 데이터 집합, 값의 중복 X
    3. Map :: key와 value 쌍의 집합, 키의 중복 X

2.1 List

  • 리스트
    :: 순서가 있는 데이터를 저장, 중복 허용
    :: 값을 자유롭게 추가/수정/삭제 가능
    - 구현체의 종류
        1) ArrayList :: 조회 성능 우수
        2) LinkedList :: 삽입/삭제 성능 우수
더보기
 // 고정 길이 List 선언 (Integer 요소)
List<Integer> integer_array = Arrays.asList(1, 2, 3);
System.out.println("고정 길이 List: " + integer_array);  // [1, 2, 3]

 // 가변 길이 List 선언 (Integer 요소)   
List<Integer> integer_list = new ArrayList<>();
integer_list.add(1);  // 추가
integer_list.add(2);
integer_list.add(3);
System.out.println("가변 길이 List 초기화: " + integer_list);  // [1, 2, 3]

integer_list.get(2); //    조회 :: 3
integer_list.set(0, 5); // 수정 :: [0]값을 5로 바꿈 ->[5,2,3]
integer_list.remove(0); // 삭제 ::[0]값을 삭 ->[2,3] 

integer_list.subList(0, 1);    // 부분 리스트 조회 :: [0]~[1-1]까지
integer_list.sort(Integer::compareTo);      // 정렬 :: 오름차
integer_list.contains(1);      // 포함여부 :: boolean
integer_list.clear();          // 리셋 - 모든 요소 제거 :: []
integer_list.isEmpty();        // 검사 - 비어있는지 :: boolean
integer_list.size();           // 개수 - length

  • 1, 2 모두 적용 가능한 메서드
더보기

1) 추가

메서드 반환값 비교
add(E e) boolean (항상 true 반환)


리스트 끝에 요소 추가
add(int index, E element) void 특정 인덱스에 요소 추가
addAll(Collection<? extends E> c) boolean (리스트에 추가된 요소의 개수에 따라 다름)


다른 컬렉션의 요소들을 리스트에 추가
addAll(int index, Collection<? extends E> c) boolean (리스트에 추가된 요소의 개수에 따라 다름) 특정 인덱스에 다른 컬렉션의 요소들을 추가

 

2) 조회

메서드 반환값 비교
get(int index) E (요소) 지정된 인덱스의 요소 조회

 

3) 수정

메서드 반환값 비교
set(int index, E element) E (수정된 이전 값 지정된 인덱스에 요소 수정

 

4) 삭제

메서드 반환값 비교
remove(int index) E (삭제된 요소) 지정된 인덱스의 요소 삭제
remove(Object o) boolean (객체 삭제 여부) 지정된 객체 삭제
removeAll(Collection<?> c) boolean (리스트가 변경되었는지 여부) 다른 컬렉션의 요소들을 삭제
clear() void 리스트의 모든 요소 삭제

 

5) 부가적인 옵션

메서드 반환값 비교
contains(Object o) boolean (리스트에 객체가 포함되어 있으면 true) 리스트에 특정 객체가 포함되어 있는지 확인
isEmpty() boolean (리스트가 비어 있으면 true) 리스트가 비어있는지 확인
size() int (리스트의 요소 개수 리스트의 크기(요소 개수) 반환
indexOf(Object o) int (객체가 첫 번째로 나타나는 인덱스, 없으면 -1) 지정된 객체의 인덱스 반환
lastIndexOf(Object o) int (객체가 마지막으로 나타나는 인덱스, 없으면 -1) 지정된 객체의 마지막 인덱스 반환
subList(int fromIndex, int toIndex) List<E> (부분 리스트) 지정된 범위의 서브리스트 반환
([from]~[to - 1]
toArray() Object[] (리스트를 배열로 변환) 리스트를 배열로 변환
sort(Comparator<? super E> c) void 리스트를 정렬
clone() Object (리스트 복제된 객체) 리스트 복제

  • 2에만 적용 가능한 메서드
    :: LinkList의 경우 List + Deque와 Queue의 인터페이스도 구현
    :: So, 아래와 같은 추가적인 메서드도 사용 가능
더보기
메서드 반환값 비교
peek() E (첫 번째 요소, 비어 있으면 null) 리스트의 첫 번째 요소를 제거하고 반환
poll() E (첫 번째 요소, 비어 있으면 null) 리스트의 첫 번째 요소를 제거하고 반환
push(E e) void 리스트의 첫 번째 위치에 요소를 추가
pop() E (제거된 첫 번째 요소) 리스트의 첫 번째 요소를 제거하고 반환
offer(E e) boolean (항상 true 반환) 리스트의 끝에 요소를 추가
offerFirst(E e) boolean (항상 true 반환) 리스트의 첫 번째 위치에 요소를 추가
offerLast(E e) boolean (항상 true 반환)

리스트의 마지막 위치에 요소를 추가
removeFirst() E (제거된 첫 번째 요소) 리스트의 첫 번째 요소를 제거
removeLast() E (제거된 마지막 요소) 리스트의 마지막 요소를 제거

  • 헷갈리는 Element와 Object
    • E - Element (요소)
      :: 일반적으로 컬렉션이나 자료 구조에서 요소를 나타내는 타입
      :: 단일 요소의 타입을 정의

    • O - Object (객체)
      :: 자바의 최상위 클래스인 Object 를 의미
      :: object 타입이 사용되는 제네릭 클래스나 메서드에서 사용

2.2 Set

:: 들어있는 값들이 모두 고유한 리스트

:: 순서가 없는 데이터 집합
:: value의 중복 X -> 값 추가 시, 있는 값이면 추가 x
- 구현체의 종류
    1) HashSet
    2) TreeSet :: 자동 정렬 → 이진 검색트리(Red-Black tree) 사용

더보기
Set<Integer> integer_set = new HashSet<>(Arrays.asList(1, 2, 3));
integer_set.add(4);                 // 추가, 해당 value가 있다면 추가 x , boolean
integer_set.remove(3);              // 삭제 , boolean
integer_set.contains(1);            // 포함 boolean
integer_set.clear();                // 리셋 void
integer_set.isEmpty();              // 검사 boolean
integer_set.size();                 // 개수 int

2.3 Map

:: key - Value 기반 자료 구조

:: key는 고유 값으로 중복 X

- 구현체의 종류

    1) HashMap :: 해쉬의 경우 키의 순서 보장X → 삽입된 순서와는 관계없이 내부적으로 해시값에 의해 정렬

    2) TreeMap :: 자동 정렬

    3) LinkedHashMap :: 키 순서 보장하는 해쉬

=> DB와 유사(primary key - row/data)

  • Entry : entrySet()
  • Key : keySet(), containsKey()
  • Value : values(), containsValue()
더보기
Map<Integer, Integer> integer_map = new HashMap<>();        // 빈 Map 선언 (Integer 요소)

// put(K key, V value) // k-v 쌍 추가
integer_map.put(1, 1);
integer_map.put(2, 2);
integer_map.put(3, 3);

//get(Object key),  // 조회- 있다면 해당 값, 없으면 null
integer_map.get(3);               

// replace(K key, V value) // 수정 k 값의 v를 새로운 v로 수정 // 이전 값 or null
integer_map.replace(4, 5);  

// remove(Object key)               삭제된 값 or null
integer_map.remove(3);                      // 삭제

// containsKey(Object key)    T/F
integer_map.containsKey(1);                 // 포함

// containsValue(Object value) T/F
integer_map.containsValue(1);               // 포함

// entrySet() key: value, ... 반환(Map.Entry)
integer_map.entrySet();                     // - Entry = [Key, Value] (Set)

// keySet() [key1 , key2 ... ]/set
integer_map.keySet();                       // - Key (Set)

// values() List 또는 Collection 타입으로 모든 value
integer_map.values();                       // - Value (List)

// clear() void
integer_map.clear();                        // 리셋

// isEmpty() T/F
integer_map.isEmpty();                      // 검사

// size() int
integer_map.size();                         // 개수

참조

ASAC 수업자료