[24.07.02] JAVA_컬렉션

ANGELA·2025년 1월 8일

[KB]학습내용정리

목록 보기
10/57

01. 복습

1. list : 순서가 중요하다

2. set : 중복 없어야한다.

3. map : 빠른 검색이 중요하다.

  • 내용을 기반으로 빠른 검색
  • 키와 값이 쌍으로 다닌다.

4. 정렬

1) 배열 : Arrays.Sort()
2) list : Sort()

  • 새로 생김
    3) 컬렉션 : Collections.Sort()

02.정렬

1. Binary search / Binary Tree

  • 이진탐색
  • 데이터가 정렬되어있어한다.
💡 2^K = N K = log2N

즉, 이진 탐색의 시간 복잡도는 O(logN) 이 된다.

  • 완전 트리 일때 → O(logN) 시간 된다. (h = logN)
    • 완전트리의 단점 : 오버헤드가 많다.
    • 보완 : Balance Tree (양쪽이 비슷하기만 하면된다. BTree라고 한다.)
    • binary 아니고 노드만 여러개 가지고 있다.

2. Treeset

데이터 빈번하게 처리할때 사용한다.

  • 딱한번 처리할땐, 사용 안한다, → colletions. sort 쓰면 된다.

3. Treemap

1 ) word counting : map 쓰면된다.
2) max 구할때 : Treemap 쓴다.

  • 정렬이 되어있어야하니까.

4. ★comparable / comparator

  • 트리에만 적용되는것이 아닌, 배열 등 다 적용된다
  • 중요

03. LIFO / FIFO

1. 스택

1) 함수, 메소드 호출 관리

  • 제일 아래가 main
  • 제일 위에가 실행중인 것
  • 최신 이용할때

2. 큐

1) 통신에서 사용

  • 속도 다른 두 객체 통신 사이에서 속도 차이 커버해준다.
  • 수신이 들어오면 차례로 나가는 것
  • 순서 이용할때

3. map과 인덱스 활용 → 큐


04. 오후수업

Q1. TodoApp에서 clone으로 깊은 복사를 사용하는 이유?
	ㄴ object.clone()는 얕은 복사 implement로 clonable을 구현해서 object.clone()를 쓰면 깊은 복사가 됨.class에서 override 할 때 리턴 타입을 object로 하는 이유? -> super클래스의 리턴 타입이 Object이기 때문
    	@Override
   		 public Object clone() {
        	try {
            	return super.clone();
        	} catch (CloneNotSupportedException e) {
            	throw new RuntimeException(e);
        	}
    	}
    ㄴ 깊은 복사를 쓰지 않으면 수정 데이터 입력 하자마자 수정이 이루어 져서 원본이 수정됨(의도와 맞지 않는 side effect). update 실행시 update가 되게 하기 위해 깊은 복사 사용
			 updateTodo.setTitle(title);
        	updateTodo.setDescription(description);
        	updateTodo.setDone(done);
        	dao.update(updateTodo);

Q2. ToDo 예제에서 protected 클래스를 상속 받아 public으로 바꾸는 이유?
	ㄴ protect는 다른 package에서 사용할 수 없기 때문.public으로 바꿔서 활용가능하게 하기 위해
    	ㄴQ2-1. 같은 package의 범위?
        	ㄴ마지막 경로. ex) org.scoula.lib.cli.App;와  org.scoula.lib.cli.ui;는 다른 경로다. (but 경로 != 패키지) 경
            
Q3. "settings.gradle"에서 include ':Scoulacli''project(':Scoulacli').projectDir=new File('C:\\fullstack\\04_JAVA\\ScoulaLib\\scoulacli')''의 의미?
	ㄴ include는 이름 선언, project는 경로를 넣는 것. => gradle의 setting 설정.
    ㄴ build.gradle 은 프로젝트 설정
    ㄴScoulacli은 명칭일 뿐이라서 변경 가능 ( 아무 단어나 써도 괜찮습니다 )
    

04. 
오버로딩 -> 하나의 메소드를 다양한 매개변수를 넣어서 사용할 수 있음
오버라이드 -> 자식이 부모의 메소드를 재정의
오버라이딩 -> 자식이 부모의 메소드를 재정의한 것을 사용하는 상태

5.
public object Test() {
	int num = 1
    int num1 = 2
    int num2 = num + num1
    return num2
}

=> object는 최상위 객체 클래스라서 int로 자동 형변환이 되어 실행 가능
profile
혼자 보려고 만든 기록장 | 또또는 귀여워 🐈‍⬛

0개의 댓글