BackEnd/Java

[Java]컬렉션

Hojung7 2024. 8. 12. 14:38

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);

 

#결과