[K-디지털 트레이닝] 학습정리 37일차 (2024-08-07)

smoo·2024년 8월 7일

JAVA_STUDY

목록 보기
22/25
post-thumbnail

1. ArrayList 와 LinkedList 의 장단점은?

ArrayList

  • 장점
    • 저장된 인스턴스의 참조와 검색이 빠르다.
    • [5]하면 그 주소로 cpu가 다이렉트로 찾아감
  • 단점
    • 저장 공간을 늘리는 과정에서 시간이 비교적 많이 소요 된다.
    • 인스턴스의 삭제 과정에서 (엄청) 많은 연산이 필요 할 수 있다.
    • 중간에 하나 삭제하면 하나씩 땡겨야 해서 오래걸리며 공간을 늘릴 때도 새로 만들어서 복사해야하기 때문에 시간 소요가 되어 느리다.

LinkedList

  • 장점
    • 저장 공간을 늘리는 과정이 간단하다.
    • 공간 하나 만들고 주소 연결하면 된다.
    • 저장된 인스턴스의 삭제 과정이 단순하며 빠르다.
    • 하나 지우고 참조와 주소만 변경해주면 된다.
  • 단점
    • 저장된 인스턴스의 참조 과정이 배열보다 복잡하여 검색이 느리다.
    • 하나씩 연결되어 주소를 가리키고 있어서 해당 주소를 하나씩 다 찾아가야한다.

2. 로또 프로그램을 작성하시오.(Set 으로)

✅코드 작성

import java.util.HashSet;
import java.util.Set;


public class SetLotto {

	public static void main(String[] args) {
		Set<Integer> lottoSet = new HashSet<>();
		final int LOTTO = 6;
		
		while(lottoSet.size() < LOTTO) {
			int num = (int)((Math.random()*45)+1);
			lottoSet.add(num);
		}
		
		System.out.println(lottoSet);
		
		for(Integer s : lottoSet ) {
			System.out.println(s);
		}
	}
}

3. Set에 대하여 설명하시오.

  • 집합의 개념을 구현해 놓은 것이 set이다. (수학으로 set 집합)
  • Set 인터페이스를 구현하는 제네릭 클래스이 갖는 중요한 특징!
    • 저장 순서가 유지 되지 않는다.
    • 데이터의 중복 저장을 허용하지 않는다.
    • set을 사용하면 중복 체크를 할 필요가 없다.

4. ⭐️ 출력이 아래와 같이 나오도록 하시오. (예습)

		HashSet<Num> set = new HashSet<>();
      set.add(new Num(7799));
      set.add(new Num(9955));
      set.add(new Num(7799));
      System.out.println("인스턴스 수: " + set.size());
      for(Num n : set)
          System.out.print(n.toString() + '\t');
      System.out.println(); 
	/*
	====출력
	인스턴스 수: 2
	7799	9955
	*/

✅코드 작성


5. Set 호출되는 원리와 순서를 설명하시오. (예습)

  • set은 집합을 구현한 것으로 저장 순서가 유지되지 않고, 데이터의 중복 저장을 허용하지 않는다. 이를 구현하기 위해서는 동일 인스턴스가 중복 저장되지 않도록 해야한다. 그러므로 set을 호출하기 위해서 다음 두 개가 호출되어야 한다는 것을 반드시 이해해야 한다. 아래의 두 개가 다 같아야 동일 인스턴스이다.
  • 해시알고리즘은 동일인스턴스가 있는지 검사를 하기위한 속도를 획기적으로 향상시킬 수 있는 방법!
    • ① hash code 호출 (두 개 객체 주소-hash code가 같은지 비교)
      hashCode 는 Object에 있다. 아래의 예시와 같이 오버라이드 한 함수를 통과해 리턴 되는 값으로 군집(집합, 캐비넷)을 만든다. 그리고 그 다음 equals를 호출한다.
    • ② equals 호출 (문자열 비교 걸러냄)
      hash code의 호출로 군집히 형성되면 그 군집 내의 요소들을 비교해 나간다.
  • 따라서 Set은 hashCode를 기반으로 분류된 데이터 속에서 탐색을 하면 되기 때문에 탐색 속도가 높다.

6. Set 과 List 의 차이는?

① List: 순서가 있으며, 데이터(값) 중복 허용, 인덱스를 통해 저장 데이터에 접근이 가능
② Set: 순서가 없으며, 데이터(값) 중복을 허용하지 않음, 인덱스가 따로 존재하지 않기 때문에 Iterator를 사용하여 조회


7.아래의 쿼리문을 작성하시오.

  • 10번 부서 또는 20번부서 또는 30번 부서에 속하는 사원은?
    select * from emp where deptno in ( 10,20,30);

  • 10번 및 30번 부서에 속하는 모든 사원의 이름과 부서 번호를 출력하되,이름을 알파벳순으로 정렬하여 출력하라.
    select * from emp where deptno in (10,30) order by ename;

  • 1981년 2월 20일 ~ 1981년 5월 1일에 입사한 사원의 이름,직업 및 입사일을 출력하라.
    select * from emp where hiredate between '81/02/20' and '81/05/01' ;

  • 사원중 82년도에 입사한 사원은?
    select * from emp where '82/01/01' <= hiredate and hiredate <= '82/12/31' ;
    select * from emp where hiredate between '82/01/01' and '82/12/31';

  • 각 사원의 연봉 계산을 하는 쿼리문(NVL 함수)
    select ename,sal,comm, sal*12 + comm as "연봉",sal*12+nvl(comm,0) as 연봉2 from emp;

  • 이번달 마지막날을 구하시오.
    select last_day(sysdate) from dual;

  • 오늘을 기준으로 가장 가까운 다음 수요일은 언제인지 알아보는 쿼리문
    select sysdate, next_day(sysdate,'수요일') as "다음주 수요일" from dual;

  • 각 직원들이 근무한 개월 수를 구하는 쿼리문
    select ename,sysdate,round(months_between(sysdate,hiredate)) 근무개월수 from emp;

  • 어제 오늘 내일 날짜를 구하시오.
    select sysdate-1 어제, sysdate 오늘, sysdate +1 as "내일" from dual;

  • 사원들의 입사일에서 입사 년도와 입사 달, 입사 일자를 각각 컬럼으로 출력하는 쿼리문
    select ename, substr(hiredate,1,2) as "년도", substr(hiredate,4,2) as "달", substr(hiredate,7,2) as "일" from emp;

profile
코딩 스터디 정리

0개의 댓글