개발자 키우기

JAVA - Collection 본문

Back-end/JAVA

JAVA - Collection

개발자 키우기 2023. 10. 15. 15:42

자바에서 Collection은 다수의 요소를 저장하고 관리하는 자료 구조를 의미한다.

 

Collection 프레임워크는 다양한 종류의 컬렉션 클래스와 인터페이스를 제공하며

 

제네릭을 사용하여 타입 안정성을 제공한다.

 

출처 - https://hudi.blog


List 인터페이스

 

ArrayList

 

데이터 요소를 배열 형태로 저장.

 

객체를 생성하면서 일정량의 저장공간을 확보하고 초기 설정한 저장공간이 부족할 때 다시 일정량의 공간을 추가 확보.

 

Vector

 

ArrayList와 유사하며 멀티쓰레드에 안전함. ( Tread safe )

 

LinkedList

 

각 노드는 데이터 요소와 다음 노드를 가르키는 주소로 이루어져 있다.

 

삭제, 삽입이 많다면 ArrayList 보다 성능이 뛰어나다.

 

하지만 검색이 ArrayList  보다 느리고 메모리 사용량이 더 크다.

 

Stack

 

데이터 요소를 일렬로 저장하며, 가장 최근에 추가한 데이터가 가장 먼저 제거된다. ( LIFO ) 


Queue 인터페이스

 

가장 먼저 추가된 데이터가 가장 먼저 제거되는 방식 ( FIFO )

 

Deque 인터페이스

 

큐와 스택 두가지 연산을 모두 지원하는 방식으로 데이터를 양 끝에서 추가하거나 제거할 수 있다.


Set 인터페이스

 

중복된 요소를 허용하지 않으며, 순서를 보장하지 않으며 검색이 빠르다.

 

Set에 객체를 저장할때 중복을 제거하기 위해서 hashCode()와 equals()을 overrid 해서 재정의를 해야 한다.

 

class Person {
  private String name;
  private int age;

  public Person(String name, int age) {
    this.name = name;
    this.age = age;
  }

  @Override
  public int hashCode() {
    return Objects.hash(name, age);
  }

  @Override
  public boolean equals(Object obj) {
    if (this == obj) {
      return true;
    }
  if (obj == null || getClass() != obj.getClass()) {
    return false;
  }
  Person person = (Person) obj;
    return age == person.age && Objects.equals(name, person.name);
  }
}

Map 인터페이스

 

키와 값으로 이루어져 있으며 키는 중복이 허용되지 않지만 값을 중복이 허용 가능하다

 

같은 키를 넣으면 값은 덮어씌우기가 된다.

 

HashMap

 

Map의 대표 컬렉션으로 Map의 구현체인 클래스다.

 

객체를 저장할 때 중복을 제거하기 위해서 hashCode()와 equals()을 overrid 해서 재정의를 해야 한다.

 

HashTable

 

HashMap과 유사하며 멀티스레드에 안전함 ( Tread safe )

 

Properties

 

HashTable의 하위 클로스로 키와 값이 String 타입만 가능하다.

 

또한 저장 시 유니코드로 변환되어 저장이 된다.


Iterator 인터페이스

 

Collection 인터페이스로부터 얻을 수 있는 데이터 요소들을 순회하여 처리하기 위한 인터페이스다.

 

 Iterable은 Collection의 부모이고 iterator 추상 메서드를 가지고 있다.

 

따라서 Collection은 모두 iterator 메소드를 사용할 수 있다.

 

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
  String element = iterator.next();
  System.out.println(element);
}

'Back-end > JAVA' 카테고리의 다른 글

JAVA - Stream  (1) 2023.10.15
JAVA - 메서드 참조, 생성자 참조  (0) 2023.10.15
JAVA - Functional Interface  (1) 2023.10.15
JAVA - Lambda  (0) 2023.10.15
JAVA - Generic  (1) 2023.10.15