2021-07-08 강의록_컬렉션 프레임워크(자료구조)

MIN.DI·2021년 7월 8일
0

강의록

목록 보기
32/54
post-thumbnail

framework, library의 차이

library
dependency 추가하면 library 자동으로 추가함. 우리가 우리의 로직을 우리 마음대로 만들면, 이 프로그램의 제어권은 개발자에게 있다.
개발자가 제어권을 가지면서 남이 만든 클래스, 인터페이스 사용하면 library.

framework
제어권이 개발자에게 없고, framework 이 제어권을 가짐. 개발자는 framework이 만든 규칙대로 프로그래밍.
프로그램 실행의 흐름은 framework가 제어함.(제어의 역흐름)


컬렉션 프레임워크

  • 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 제공되는 컬렉션 라이브러리
  • java.util 패키지에 포함
  • 인터페이스를 통해 정형화된 방법(CRUD 하기 위한 방법)으로 다양한 컬렉션 클래스(구현클래스) 이용
  • 컬렉션 안에 넣는 데이터 = 참조타입 (객체). 기본타입이 아니다.
  • List는 말 그대로 목록. 순서 있고, 중복 있음.
  • Set은 구슬주머니 (구슬 하나하나가 데이터) >> 순서 없고, 중복 없음
  • Map은 순서라는 개념 자체가 없다. 들어가는 객체마다 이름(=키)을 부여하기 때문.
  • TreeSet이나 TreeMap 에다 데이터를 넣으면 자동 정렬됨. (Binary sort)
    정렬이 필요하면 Tree ~~ 에다 저장.
  • Linked : 데이터 산발적 저장

List컬렉션

ArrayList와 Vector는 거의 비슷한데, Vector는 임계영역에서 생기는 문제를 해결할 수 있다. (Thread Safe)
멀티스레드 환경에서, 여러 스레드가 동일한 데이터에 접근해 CRUD 수행하려고 할 때
문제가 생기는 상황을 임계영역이라고 함.

ArrayList, Vector는 인덱스가 있어서 데이터를 삽입, 삭제하기 어렵다.
(데이터를 뒤로 밀거나, 당겨와야 함. 배열에 빈자리는 있으면 안된다.)

LinkedList는 요소를 배열처럼 연결해서 저장하지 않고, 산발적으로 저장함.
따라서 인덱스 개념이 없다. >> 데이터의 삽입, 삭제할 때 편리함.
변경이 잦은 데이터는 LinkedList로 저장한다. (단, 요소를 검색하는 속도는 느리다는 단점.)


List의 전체 요소 순회(traverse) 하는 방법


import java.util.ArrayList;
import java.util.List;

import lombok.extern.log4j.Log4j2;


@Log4j2
public class ArrayListEx2 {
	
	//List<T>인터페이스의 성질 :
	//	1) 순서를 가짐
	//	2) 중복을 허용
	public static void main(String[] args) {
		//ArrayList객체 생성
		List<String> list = new ArrayList<>(); //타입추론, 다형성1
		
		//ArrayList에 구슬(객체)을 추가 (문자열 객체를 효율적으로 처리하자!)
		list.add("String_1");
		list.add("String_2");
		list.add("String_3");
		list.add("String_4");
		list.add("String_5");
		
		//////////////////////
//		리스트의 전체요소를 순회(traverse) 하는 방법
		//////////////////////
		
		// 1. 직접 for문과 리스트의 크기를 이용하여 순회
		for(int i=0; i<list.size(); i++) {
			String s = list.get(i);
			
			log.info(s);
		}//classical for
		
		
		// 2. enhanced for문을 이용(단, 인덱스 번호가 필요없을 때)
		for(String s : list) {
			log.info(s);
		}//enhanced for
		
	
		// 3. List.forEach() 최종처리메소드를 이용한 순회 (단, 인덱스 번호가 필요없을 때)
		//		>> forEach로 요소를 하나하나 travrse 할테니, 구현방법은 람다식을 이용해서 구현할 것.
		//void accept(Tt); T => String
		list.forEach( t-> log.info(t));		//람다식 구현하여 요소 출력
		
//		list.forEach(log::info);		//메소드 참조를 이용하여 요소 출력
		
		////////////
		
	} //main
	
} //end class

Set 컬렉션

수학의 집합에 비유. 하나의 null 만 저장 가능하다. (2개 이상은 안됨)
(데이터에서의 Null >> 결측치. missing value)

hash : 어떤 데이터를 넣든, finger print(지문)를 반환.
동일한 데이터가 들어가지 않는 한, finger print는 모두 다르다.

HASH SET
: 논리적 주소값 출력(인감)

profile
내가 보려고 쓰는 블로그

0개의 댓글