1. 컬렉션이란? (List / Set / Map)
자바에서 제공하는 자료구조를 담당하는 프레임워크
- 추가, 삭제, 정렬 등의 기능처리가 간단하게 해결 되어 자료구조적 알고리즘을 구현할 필요 없음
- java.util 패키지에 포함
( java.util 패키지에 포함된 것 : Scanner, Arrays, collection)
- 객체만 저장 가능!!
(정확히는 객체 참조 주소만 저장 가능)
| 배열의 문제점 | 컬렉션의 장점 |
| 1. 한 번 크기를 지정하면 변경할 수 없다. 2. 배열에 기록된 데이터에 대한 중간 위치의 추가, 삭제가 불편하다. 3. 한 타입의 데이터만 저장 가능하다. |
1. 저장하는 크기의 제약이 없다. 2. 추가, 삭제, 정렬 등의 기능 처리가 간단하게 해결된다. - 자료를 구조적으로 처리 하는 자료구조가 내장되어 있어 알고리즘 구현이 필요 없음 3. 여러 타입의 데이터가 저장 가능하다. - 객체만 저장할 수 있기 때문에 필요에 따라 기본 자료형을 저장해야 하는 경우 Wrapper클래스 사용 |


1) List
- 자료( Data)를 순차적으로 나열한 자료 구조 (배열 비슷)
- index가 존재함
→ 각 Data를 index(순서)로 구분할 수 있어 중복된 Data를 저장할 수 있다.

- boolean add(E e)
List에 주어진 객체(e)를 맨 끝에 추가 (E : Object)
- void add(int index, E e)
index 번째에 e를 추가 → 중간에 삽입
- int size()
저장된 Data(객체)의 수를 반환
- E get(int index)
index번째 요소를 반환
- E set(int index, E e)
지정된 index번째 요소를 e로 수정
- boolean contains(E e)
List 내부에 e와 같은 객체가 존재하면 true, 없으면 false 반환
- int indexOf(E e)
List 내부에 e와 같은 객체가 존재하면 해당 index 반환 / 존재하지 않으면 -1 반환
- E remove(int index)
List에서 지정된 index번째 요소를 제거
-> 중간이 제거되면 뒤쪽 요소는 앞으로 이동됨 (제거된 요소는 메서드 결과로 반)
< ArrayList >
List의 후손으로 초기 저장 용량은 10으로 자동 설정되며 따로 지정도 가능 / 가장 많이 사용하는 List
저장 용량을 초과한 객체들이 들어오면 자동으로 늘어나며 고정도 가능
****List : 부모 인터페이스****
2. 제네릭스(Generics)
1) 컬렉션의 타입을 제한하여 한 가지 자료형만 저장할 수 있게 하는 기능
2) 클래스나 메서드가 다룰 타입을 저장하는 기
#예제1
[service]
package list.service;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
public class ListService {
public void test1() {
//List list = new ArrayList(); // 10칸 짜리 생성
List list = new ArrayList(3); // 3칸 짜리 생성
// E(Element) : 요소를 뜻하는 상징적인 글자
// (특정 자료형 X, Object 타입)
// 1. boolean add(E e)
list.add("아무거나");
list.add(new Object());
list.add(new int[4]); // 3번째
// 4번째 -> 크기 초과 오류 발생 X
// --> List 크기가 자동으로 증가
list.add(123); // int 기본 자료형은 추가 불가
// -> Integer Wrapper class로
// 변환되어 저장됨
System.out.println(list.toString());
// 2. void add(int index, E e)
list.add(2, "중간");
System.out.println(list); // toString() 생략 가능
// 3. int size()
System.out.println("현재 저장된 data 개수 : " + list.size());
// (E == Object)
// 4. E get(int index)
System.out.println(list.get(2));
// List + 일반 for 문
for(int i=0 ; i < list.size() ; i++) {
System.out.printf("%d 번째 인덱스 요소 : %s\n",
i, list.get(i));
}
System.out.println("--------------------------------");
// List + 향상된 for문
for(Object obj : list) {
String str = null;
// obj가 참조하는 객체가 String 타입이라면
if(obj instanceof String) str = "[String]";
else if(obj instanceof int[]) str = "[int[]]";
else if(obj instanceof Integer) str = "[Integer]";
else str = "[Object]";
System.out.println( str + obj );
}
}
[run]
package api.run;
import api.service.JavaApiService;
public class JavaApiRun {
public static void main(String[] args) {
JavaApiService service = new JavaApiService();
service.test1();
#결과

#예제2
[Service]
public void test2() {
List<String> menuList = new ArrayList<String>();
// add() 확인
// menuList.add(123); // String으로 제한되서
// 다른 자료형 추가 불가능
menuList.add("보쌈");
menuList.add("닭갈비");
menuList.add("양념갈비");
menuList.add("삼겹살");
menuList.add("칼국수");
menuList.add("냉면");
// 향상된 for문
for(String menu : menuList) {
System.out.println(menu);
}
}
#결과

#예제3
[service]
System.out.println("-------------------------------------");
// 5. E set(int index, E e)
System.out.println(menuList);
String before = menuList.set(2, "소갈비");
System.out.println(before + "가 " + menuList.get(2) + "로 변경됨");
System.out.println(menuList);
// 6. boolean contains(E e)
System.out.println("보쌈 : " + menuList.contains("보쌈"));
System.out.println("막국수: " + menuList.contains("막국수"));
// 7. int indexOf(E e)
System.out.println("삼겹살 : " + menuList.indexOf("삼겹살"));
System.out.println("삼겹살 : " + menuList.indexOf("오겹살"));
// 8. E remove(int index)
System.out.println(menuList.remove(1) + " 제거");
System.out.println(menuList);
#결과

'BackEnd > Java' 카테고리의 다른 글
| [Java]컬렉션(Collection) 참조 변수를 부모 타입으로 작성하는 이유 (0) | 2024.08.12 |
|---|---|
| [Java]컬렉션(collection) Wrapper (0) | 2024.08.12 |
| [Java]다형성 인터페이스 (0) | 2024.08.12 |
| [Java]다형성 추상클래스 (0) | 2024.07.31 |
| [Java]객체 배열(Object_Array) (0) | 2024.07.31 |