컬렉션 프레임워크는 JAVA의 인터페이스(interface)로 구현


| 인터페이스 | 설명 | 구현클래스 |
|---|---|---|
| List< E > | 순서가 있는 데이터의 집합, 데이터의 중복 허용 | Vector,ArrayList,LinkedList,Stack,Queue |
| Set< E > | 순서가 없는 데이터의 집합, 데이터의 중복 허용 X | HashSet,TreeSet |
| Map<K,V > | 키와 벨류가 한 쌍으로 이루어지는 데이터의 집합, 순서가 없음, 이때 키는 중복을 허용하지 않지만, 값은 중복 가능 | HashMap,TreeMap,Hashtable,Properies |
Set (주머니) : 순서X, 중복 X => Value값을 알고 싶으면 값을 하나씩 다 확인해야함 (전체 반복)
Map < Key, Value > : 순서X, 중복 O , Map은 put을 쓴다.
List : 순서O, 중복 O Set 상위에 Collection.add mtehod가 정의돼있음,
Collection 인터페이스
| 메소드 | 설명 |
|---|---|
| boolean add(E e) | 해당 컬렉션에 전달된 요소를 추가함.(선택적 기능) |
| void claer() | 해당 컬렉션의 모든 요소를 제거(선택적) |
| boolean contains(Object o) | 해당 컬렉션이 전달된 객체를 포함하고 있는지 확인 |
| boolean equals(Object o) | 해당 컬렉션과 전달된 객체가 같은지 확인 |
| boolean isEmpty() | 해당 컬렉션이 비어있는지 확인 |
| Iterator< E >iterator() | 해당 컬렉션의 반복자를 반환 |
| boolean remove(Object o) | 해당 컬렉션에서 전달된 객체를 제거함(선택적) |
| int size() | 해당 컬렉션의 요소 총 개수를 반환 |
| Object[] toArray() | 해당 컬렉션의 모든 요소를 Object타입의 배열로 반환 |
| LinkedList | - 양방향 포인터 구조로 데이터의 삽입, 삭제가 빈번할 경우 데이터의 위치정보만 수정하면 되기에 유용 |
|---|---|
| Vector | 과거에 대용량 처리를 위해 사용했으나, 내부에서 자동으로 동기화처리가 일어나 비교적 성능이 좋지않고 무거워 현재는 잘 쓰지 않음 |
| ArrayList | 단방향 포인터 구조로 각 데이터에 대한 인덱스를 가지고 있어 조회 기능에 성능이 뛰어남 |
| 메서드 | 설명 |
|---|---|
| boolean add(E e) | 요소 하나를 배열에 추가(E는 요소의 자료형) |
| int size() | 배열에 추가된 요소 전체 개수를 반환 |
| E get(int index) | 배열의 index 위치에 있는 요소 값 반환 |
| E romove(int index) | 배열의 index 위치에 있는 요소값 제거 및 반환 |
| boolean isEmpty() | 배열이 비어 있는지 확인 |
기본 형식
ArrayList< E > 배열이름 = new ArrayList< E >();
ArrayList 값 추가
ArrayList<String> strList = new ArrayList<>();
// ★ 값 추가
strList.add("JAVA");
strList.add("Python");
ArrayList 값 변경
// 값 수정
strList.set(2, "javascript");
ArrayList 값 삭제
// ★★ 값 삭제
strList.remove("ANDROID");
strList.remove(1);
// 리스트 초기화
strList.clear();
ArrayList 크기 구하기
ArrayList 값 출력
for(int i = 0; i < 배열이름.size(); i++){
System.out.println(배열이름.get(i));
}
// 향상된 for문 가능
for(String str : strList) {
System.out.println("[값]: " + str);
}
// Iterator 를 사용한 출력
Iterator<String> iterator = strList.iterator();
iterator = strList.iterator();
while(iterator.hasNext()) {
String lang2 = iterator.next();
System.out.println("[값4]: " + lang2);
}
ArrayList 값 검색
| HashSet | - 순서가 전혀 필요 없는 데이터를 해시 테이블(Hash table)에 저장, set 중에서 성능이 가장 좋음 |
|---|---|
| TreeSet | 저장된 데이터의 값에 따라서 정렬되는 set, red-black 이라는 트리 타입으로 값이 저장, HashSet보다 약간 성능이 느림 |
| LinkedHashSet | 연결된 목록 타입으로 구현된 해시 테이블에 데이터를 저장,저장된 순서에 따라서 값이 정렬, 성능은 가장 나쁨 |
HashSet 예제
package J19_컬렉션;
import java.util.HashSet;
import java.util.Set;
public class StudentHashSet {
private static Student searchStudent(Set<Student> students,String searchName) {
Student student = null;
for(Student s : students) {
if(s.getName().equals(searchName)) {
student = s;
break;
}
}
return student;
}
public static void main(String[] args) {
Set<Student> students = new HashSet<>();
students.add(new Student("가",1));
students.add(new Student("나",2));
students.add(new Student("다",3));
students.add(new Student("라",4));
System.out.println(students); //순서 없이 뒤죽박죽
Student student = searchStudent(students, "나");
if(student == null) {
System.out.println("검색실패!");
}else {
System.out.println("검색성공!" + student);
}
}
}
키(key)와 값(Value)로 한 쌍(pair)으로 이루어져있음| 메서드 | 설명 |
|---|---|
| V put(K key, V value | key에 해당하는 value 값을 map에 넣음 |
| V get(K key) | key에 해당하는 value 값을 반환 |
| boolean isEmpty() | Map이 비었는지 여부를 반환 |
| boolean containsKey(Object key) | Map에 해당 key가 있는지 반환 |
| boolean containsValue(Object value) | Map에 해당 value가 있는지 반환 |
| Set keyset() | key 집합을 Set으로 반환 (중복 안됨) |
| Collection values() | value를 Collection으로 반환 (중복 무관) |
| V remove(key) | key가 있는 경우 삭제 |
| boolean remove(Object key, Object value) | key가 있는 경우 key에 해당하는 value가 매개변수와 일치할 때 삭제 |
대표적인 Map 클래스
| HashMap<k,v> | Map인터페이스의 한 종류,Key와 Value값으로 데이터를 저장하는 형태를 가지고 있음 |
|---|---|
| Hashtable<k,v> | 해시 함수를 사용하여 키를 해시값으로 매핑하고, 이 해시값을 주소로 삼아 데이터를 key와 함께 저장하는 자료구조 |
| TreeMap<k,v> | red-black 트리에 데이터를 담음, TreeSet과 다른점은 null값을 허용한다는 점과 동기화 되어 있지않음 |
HashMap 예제
package J19_컬렉션;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class HashMapTest {
public static void main(String[] args) {
Map<String, Object> dataMap = new HashMap<>();
dataMap.put("username", "aaa");
dataMap.put("password", "1234");
dataMap.put("name", "홍길동");
dataMap.put("email", "aaa@gmail.com");
List<String> hobby = new ArrayList<>();
hobby.add("골프");
hobby.add("축구");
hobby.add("농구");
hobby.add("헬스");
dataMap.put("hobbys", hobby);
System.out.println(dataMap);
List<String> list = (List<String>)dataMap.get("hobbys");
System.out.println(list.get(0));
}
}



필요한 라이브러리 다운받아서 복사 붙여넣기

✏️ Lombok이란?
getter, setter, to string 등의 메서드 작성 코드를 줄여주는 코드 다이어트 라이브러리Lombok의 장점
Lombok의 단점

Maven project의 경우
pom.xml에 의존성을 추가해줘야 한다.
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>