✍ Today I Learned
[컬렉션 프레임워크 Collection Framework]
- 자바에서 컬렉션 프레임워크(collection framework)란? 많은 데이터를 효과적으로 처리하기 위해 표준화된 방법을 제공하는 클래스의 집합을 의미한다.
- 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것이다.
- 인터페이스를 사용하여 구현된다.
- 주요 인터페이스로는 List, Set, Map이 있다. List와 Set 인터페이스는 Collection 인터페이스를 상속받지만, 구조상의 차이로 Map 인터페이스는 별도로 정의된다.
- , <K, V>는 모든 클래스가 제네릭으로 표현되어 있음을 알려준다.
[Generic]
- 제네릭이란? 데이터 타입(data type)을 일반화(generalize)하는 것으로, 데이터 타입을 컴파일 시에 미리 지정하는 것을 의미한다. (like 시멘틱)
- 제네릭을 사용하면 객체의 타입 안정성을 높일 수 있고, 타입 검사를 줄일 수 있다.
- 자바에서 제네릭은 클래스와 메서드에만 선언할 수 있다.
[ArrayList]
- List 인터페이스를 구현한 객체이자 순서가 있는 데이터의 집합으로, 데이터의 중복을 허용한다.
- 배열과 비슷하지만 자료형은 객체 타입을 저장하게 되어있다. 따라서 기본 데이터 타입은 래퍼클래스를 이용해 객체로 변환한 후 사용해야 한다.
- 자바의 배열과 다르게 크기를 유동적으로 변경할 수 있고, 다양한 메서드를 제공하기 때문에 사용률이 높다.
- 스택 구조이므로 요소들 사이에 빈자리를 만들 수 없다.
toString()
메서드가 내장되어 있어 객체 자체를 출력해도 주소 값이 아닌 해당 리스트의 요소를 보여준다.- 여러 데이터 타입을 하나의 리스트에 저장할 수는 있지만, 데이터를 추출해서 사용할 때 관리가 어렵기 때문에 제네릭을 사용하여 데이터 타입을 미리 지정한다.
- 다음은 ArrayList의 주요 메서드이다.
add(index, element)
- 해당 index자리에 요소 저장(index 생략하면 리스트의 마지막에 저장)size()
- 요소의 총 개수 반환get(index)
- index에 해당하는 요소 반환set(index, element)
- 해당 index자리의 요소를 elelment로 대체remove(index or object)
- 해당 index의 요소 혹은 object 제거clear()
- 모든 요소 제거contains()
- 요소의 포함 여부를 true or fasle로 반환isEmpty()
- 비어있는지를 true or false로 반환
- ArrayList에 데이터가 존재하지 않으면 null 이 아닌
list.size() == 0
또는list.toString() == "[]"
이다.
[HashSet]
- Set 인터페이스를 구현한 객체이자 순서가 없는 데이터의 집합으로, 데이터의 중복을 허용하지 않는다.
- 큰 바구니에 공을 담은 것과 같은 모양이기 때문에 인덱스도 존재하지 않는다. 따라서
get()
메서드는 사용할 수 없다. - 순서가 없기 때문에 forEach문을 사용하거나 iterator 형태로 바꾼 후
next()
메서드를 통해 반복문을 구현한다. - List 인터페이스와 마찬가지로 Collection 인터페이스를 상속받으므로 ArrayList의 메서드와 대부분 비슷하다.
iterator()
- set을 iterator로 반환
Iterator<User> iterator = set.iterator();
while (iterator.hasNext()) {
User user = (User) iterator.next();
System.out.println(user);
}
- 분명 Set은 순서가 없는데 왜 숫자는 자동정렬이 되는 것처럼 보일까? 결과적으로 Set은 정렬을 지원하지 않고 내부 로직에 의해 순차적으로 탐색할 뿐이다. (참고자료)
[HashMap]
- Collection 인터페이스와는 다른 저장 방식을 가지며, 키와 값의 한 쌍으로 이루어지는 데이터의 집합으로, 순서가 없다. 이때 키는 중복을 허용하지 않지만, 값은 중복될 수 있다.
put(key, value)
- 전달된 key에 해당 value를 매핑size()
- 맵의 총개수를 반환get(key)
- 전달된 key에 해당하는 value를 반환(없으면 null반환)remove(key)
- 전달된 key에 대응하는 매핑을 제거하면서 매핑된 value를 반환, 해당 값이 없으면 null 반환remove(key, value)
- 전달된 key와 value에 대응하는 매핑을 제거하면서 true를 반환, 해당 값이 없으면 false 반환clear()
- 해당 맵의 모든 매핑을 제거containsKey(key)
- 전달된 key의 포함 여부를 true or false로 반환isEmpty()
- 비어있는지를 true or false로 반환
- 이클립스 import 단축키 : ctrl + shift + o
'📝 TIL' 카테고리의 다른 글
[TIL] Java 주소록, 상품관리, 호텔관리 시스템 (0) | 2022.05.27 |
---|---|
[TIL] Java Enum, MySQL 개발 환경 설정, JDBC (0) | 2022.05.26 |
[TIL] Java 피카츄 게임, 웹 서비스 프로그램 (0) | 2022.05.23 |
[TIL] Java 인터페이스, 내부클래스, 예외처리 (0) | 2022.05.20 |
[TIL] Java 빌트인 패키지, 접근제어자, 상속, 오버라이딩, 다형성, 추상 클래스 (0) | 2022.05.19 |