- 변수 선언 시 구현체 데이터타입이 아니라 인터페이스 데이터 타입으로 선언하는 경우가 일반적이다. 이로써 해당 변수에 유연하게 다른 구현체를 할당할 수 있다.
ex)
List<String> cars = new ArrayList<>();
//ArrayList 관련 작업 완료
cars = new LinkedList<>(); //가능
- 변수 선언 시 var 키워드로 데이터타입을 컴파일러가 알아서 지정하게 할 수 있다.
ex)
var cars = new ArrayList<String>();
//컴파일러가 var 대신 ArrayList<String>을 대입함
- List 구현체에서 .add()메서드에 인덱스, 값 두 개의 파라미터를 넣어 특정 위치에 삽입시킬 수 있다.
- 데이터를 저장 및 접근할 때는 ArrayList를, 데이터를 삭제/변경할 때는 LinkedList를 사용하는 것이 효율적이다.
- LinkedList는 List 인터페이스의 모든 메서드에 더해 고유의 기능을 가지고 있는데, First/Last 표현이 들어간 get,add,remove 메서드들이다.
- getFirst(), getLast()
- addFirst(), addLast()
- removeFirst(), removeLast()
- Collections 클래스가 제공하는 클래스 메서드 중 sort() 메서드의 기본값은 알파벳/숫자 오름차순 정렬이다.
- 사용법 : Collections.sort(정렬 대상)
- 내림차순 정렬법은 Collections 클래스의 또다른 클래스 메서드를 매개변수로 넣어주어야 한다.
- Collections.sort(정렬 대상, Collections.reverseOrder()); //알파벳순 또는 숫자 내림차순으로 정렬
- Set 인터페이스 구현체는 정렬 유무 및 방식에 따라 아래와 같이 구분된다.
- 공통 : 중복 허용하지 않음
- HashSet : 순서 존재하지 않음.
- TreeSet : 자동 정렬(오름차순)
- LinkedHashSet : 데이터가 삽입된 순서대로 정렬
- 위와 같은 원리는 Map 인터페이스 구현체에도 동일하게 적용된다.
- HashMap : 순서 없음
- TreeMap : Key값을 기준으로 정렬
- LinkedHashMap : 데이터가 삽입된 순서대로 정렬
- Map 인터페이스 구현체는 List나 Set 구현체와는 다른 메서드를 공유한다. List나 Set 인터페이스와는 다르게 Collection 클래스를 공유하지 않기 때문이다.

컬렉션 프레임워크에 Collection은 Map과 별개의 인터페이스로 나타난다. 따라서 List, Queue, Set이 공유하는 add(), remove(), clear(), set()과 같은 메서드를 공유하지 않는다.
SortedMap은 Map 인터페이스를 상속하는 또다른 인터페이스이며, 구현체로 TreeMap을 가진다.
Map을 직접 구현하는 구현체로는 Hashtable, LinkedHashMap, 그리고 HashMap이 있다.
- Map 인터페이스에서 구현하는 메서드들
- put() : 데이터를 추가한다
- get(key) : key값에 대응하는 value를 return한다.
- remove(key) : key값에 대응하는 엔트리를 삭제한다.
- containsKey(key) : key값이 존재하는지를 검사한다.
- keySet() : 모든 key의 정보가 담긴 Set를 반환한다.
- Map은 Key의 중복을 허락하지 않기 때문에, 중복된 Key가 입력되었을 시 기존에 입력된 Key의 값을 덮어쓴다. 참고로 HashMap의 경우 순서는 고려하지 않는다.
- HashMap 순회하기 : HashMap을 순회하려면 Key값을 바탕으로 순회할지, Value값을 바탕으로 순회할지 결정해야 한다. 가령 map이라는 이름의 HashMap이 String 타입의 Key와 Integer 타입의 Value를 갖고 있다면,
- Key 값을 원하는 경우 : for (String i : map.keySet()) {} 와 같은 방법으로 순회해야 한다
- Value 값을 원하는 경우 : for(int i : map.values()) {} 와 같은 방법으로 순회해야 한다.
'ETC > 1. Today I Learned' 카테고리의 다른 글
| [Spring] Spring JPA 영속성 전이(Cascade)와 고아 제거(Orphan Removal) (0) | 2026.01.06 |
|---|---|
| 개발 주요 개념 정리 - 클래스, 인터페이스, JSON, (0) | 2025.12.24 |
| Iterator 활용하기 - Iterable이 아닌 경우 (0) | 2025.12.23 |
| [Java] 제네릭 공부하기 - 1장 (0) | 2025.12.19 |
| [Git] 내 코드를 다른 레포지토리의 코드로 덮어씌우기 (0) | 2025.12.16 |