백엔드/Java

Java Collection 프레임워크

짱뚱짱 2024. 10. 20. 09:20

🔷 컬렉션 프레임워크

- 표준화된 방식의 자료구조

- List, Set, Map => 인터페이스. 반드시 구현 클래스로 객체를 생성

  👉🏻 데이터를 묶어서 관리할 때 사용

  👉🏻 주로 배열 대신 사용

 

  👉🏻 List(배열과 동일)
     ❕ 값을 하나씩 저장
     ❕ index 존재 : 순서를 보장
     ❕ 중복 허용 
     ❕ 배열 대신에 가장 많이 사용하는 구조

  👉🏻 Set
     ❕ 값을 하나씩 저장
     ❕ index 없음 : 순서를 보장하지 않음
     ❕ 중복허용 안됨. (같은 값이 입력되면 덮어씀.)
 
  👉🏻 Map
     ❕ 값을 두개씩 저장  key/value 쌍으로 저장
     ❕ index는 없고, key가 index 역할을 함.
     ❕ key는 중복 불가능 / value는 중복 가능.
     ❕ key가 중복되면 value는 덮어써짐.
     ❕ 2개의 값이 하나의 자료로 묶여야 할 때 사용
     ❕ 아이디/패스워드, 제품명/가격, 학생명/점수

 

- 배열은 기본자료형 int arr[], double arr[], String arr[], Student arr[] 다 가능.

- Collection은 기본자료형은 불가능. 클래스 자료형만 가능.

- 래퍼클래스(Wrapper Class) : 기본타입 자료형을 클래스 타입으로 변환한 클래스

- 기본자료형을 Boxing하면 클래스자료형으로 심어짐.
- 클래스자료형을 UnBoxing하면 기본자료형

기본자료형  래퍼클래스
int Integer
char Character
----------------------이 밑에는 전부 첫글자만 대문자-----------------------
byte Byte
short Short
long Long
float Float
double Double
boolean Booolean

 

 

- Collection에서 클래스를 지정하지 않으면 Object가 자동으로 설정


- 리스트 생성
  👉🏻 List<className> 객체명 = new 구현클래스<className>();
  👉🏻 List<Integer> list = new ArrayList<Integer>();

 

🔷 ArrayList와 LinkedList  (⭐!!!굉장히 중요!!!⭐)

- List의 구현클래스 => ArrayList, LinkedList

- ArrayList와 LinkedList의 차이점 
  👉🏻 ArrayList : 검색 시 유리 (배열과 유사한 형태)
    ❕ 미리 길이를 지정하지 않음. 추가되면 늘어남. 삭제되면 줄어듦
    ❕ 추가, 삭제가 쉽다. 검색이 쉬움


  👉🏻 LinkedList : 추가 / 삭제가 많을 경우 유리
    ❕ 중간에 값을 끼워넣거나, 빼는게 쉬움.
    ❕ 검색이 느리다

 


🔷 실습

package day07;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

public class Collection01 {

	public static void main(String[] args) {
		int num = 10;
		Integer boxNum = new Integer(num);	//쓸 순 있지만 잘 쓰지 않음.
		Integer boxNum1 = 20; 	//자동박싱
		int a = boxNum1;	//자동언박싱

//		System.out.println(boxNum1);
//		System.out.println(a);
		
		//클래스.parse+기본타입명 : 형변환 가능.
		String str = "10";	//String => int
		int i = Integer.parseInt(str);
		
		List<Integer> list = new ArrayList<Integer>(); //부모를 기준으로 생성
		ArrayList<Integer> list2 = new ArrayList<Integer>(); //자식 기준으로 생성
		List list3 = new ArrayList();	//Object로 생성
		ArrayList<Integer> list4 = new ArrayList<Integer>(); //구현체 클래스는 생략가능
		
		List<Integer> linkedList = new LinkedList<>();	// LinkedList 생성
		
		/* List Method
		 * - add() : 요소를 추가
		 * */
		list.add(1);
		list.add(2);
		list.add(3);
		System.out.println(list);
		
		//- get(index) : index 번지의 요소를 가져오기
		System.out.println(list.get(0));
		
		//- set(index, value) : index번지의 값을 value로 변경
		System.out.println(list.set(0,  10));
		System.out.println(list);
		
		//- size() : list의 개수
		for(int j=0;j<list.size();j++) {
			System.out.println(list.get(j));
		}
		
		System.out.println("--list.size()--");
		System.out.println(list.size());
		
		// 문자열을 담는 리스트 생성
		// 문자열 5개 저장한 후 출력
		List<String> strList = new ArrayList<String>();
		strList.add("새벽");
		strList.add("아침");
		strList.add("점심");
		strList.add("저녁");
		strList.add("밤");
		System.out.println(strList);
		
		for(String s:strList) {
			System.out.println(s);
		}
		
		// - remove(index) : index번지의 값을 삭제 => List에서만 가능
		// - remove(object) : object 요소를 삭제 => set/map
		strList.remove(0);
		System.out.println(strList);
		strList.remove("밤");
		System.out.println(strList);
		System.out.println(list);
		Integer re = 10;
		list.remove(re); 
		System.out.println(list);
		
		// - contains(object) : list에 값이 있는지 검사 true / false로 리턴
		System.out.println(strList.contains("새벽"));
		
		// - clear() : 리스트 비용
		strList.clear();
		System.out.println(strList);
		
		// - isEmpty() : 리스트가 비었는지 확인 true / false
		System.out.println(strList.isEmpty());
		
		/* Iterator : index가 없는 자료형을 출력하기 위해 사용
		 * list는 index가 있기 때문에 get(i)를 사용하여 원하는 번지에 접근이 가능
		 * set / map은 index가 없어서 일반 for문은 사용불가 (향상된 for문만 가능 - map은 불가능)
		 * 순서와 상관없이 값을 가져올 수 있는 Iterator 사용
		 * map은 향상된 for, Iterator 둘 다 직접 사용은 불가능
		 * */
		System.out.println("-- Iterator출력 --");
		Iterator<Integer> it = list.iterator();	//리스트를 이터레이터 객체로 변환(복사)
		while(it.hasNext()) {	//it 다음 요소값이 있는지 체크 true / false
			Integer tmp = it.next();	//다음 요소 가져오기
			System.out.println(tmp);
		}
		
		// - indexOf(object) : 해당 Object의 index를 리턴 / 없으면 -1
		System.out.println(list.indexOf(re));
		
		list.add(15);
		list.add(12);
		list.add(1);
		list.add(6);
		list.add(8);
		System.out.println(list);
		
		//정렬
		// Collections.sort() 	//오름차순만 가능
		Collections.sort(list);
		System.out.println(list);
		//list.sort(Comparator를 구현한 구현체) : 정렬
		// Comparator 인터페이스를 구현한 구현체를 넣어야 함. (익명클래스 사용)
		// - compareTo : 사전상 앞이면 -1, 같으면 0, 뒤면 +1
		
		//내림차순
		list.sort(new Comparator<Integer>() {

			@Override
			public int compare(Integer o1, Integer o2) {
				// 결과가 -면 앞으로 보내고, +면 뒤로 보내는 역할
				// o1 - o2 : 오름차순		o2 - o1 : 내림차순
				return o2 - o1;
			}
		});
		
		System.out.println(list);
		
	}

}

 

'백엔드 > Java' 카테고리의 다른 글

Java set  (4) 2024.10.20
Java List  (1) 2024.10.20
Java 익명 클래스(Anonymous Class)  (0) 2024.10.20
Java 예외 처리 실습  (1) 2024.10.20
Java 예외 처리  (0) 2024.10.17