ArrayList
단점
장점
LinkedList
단점
장점
import java.util.HashSet;
import java.util.Iterator;
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);
}
}
집합의 개념을 구현해 놓은 것이 set입니다.
set의 특징
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
package Hw_2024_08_07;
import java.util.HashSet;
class Num{
private int num;
public Num(int num) {
this.num=num;
}
@Override
public String toString() {
return String.valueOf(num);
}
@Override
public int hashCode() {
return num % 3;
}
@Override
public boolean equals(Object obj) {
if(num==((Num)obj).num) {
return true;
}else
return false;
}
}
public class HashMain {
public static void main(String[] args) {
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();
}
}
hash code 호출 (두 개 객체 주소-hash code가 같은지 비교)
hashCode 는 Object에 있습니다. 오버라이드한 함수를 통과해 리턴 되는 값으로 군집(집합, 캐비넷)을 만듭니다. 그리고 그 다음 equals를 호출합니다.
equals 호출 (문자열 비교 걸러냄)
hash code의 호출로 군집히 형성되면 그 군집 내의 요소들을 비교해 나갑니다.
Set 호출에는 2단계를 거쳐 진행됩니다.
1.클래스에 정의된 hashCode 메소드의 반환 값을 통해 분류.
2.선택된 부류 내에서 equals 메소드를 호출하여 비교.
Set은 index 값 중복이 없고 순서가 보장되지 않습니다.
List는 index 값 중복 가능하고 add 한 순서대로 값이 저장됩니다
-- 10번 부서 또는 20번부서 또는 30번 부서에 속하는 사원은?
select *from emp where deptno in(10,20 ,30);
-- 10번 및 30번 부서에 속하는 모든 사원의 이름과 부서 번호를 출력하되,이름을 알파벳순으로 정렬하여 출력하라.
select ename, deptno from emp where deptno in(10,30) order by ename;
-- 1981년 2월 20일 ~ 1981년 5월 1일에 입사한 사원의 이름,직업 및 입사일을 출력하라.
select*from emp where hiredate between '1981/02/20' and'81/05/01';
-- 사원중 82년도에 입사한 사원은?
select*from emp where hiredate between '82/01/01' and'82/12/31';
-- 각 사원의 연봉 계산을 하는 쿼리문(NVL 함수)
select ename,sal,comm,sal*12+nvl(comm,0)as"연봉" from emp;
-- 이번달 마지막날을 구하시오.
select last_day(sysdate)from dual;
--오늘을 기준으로 가장 가까운 다음 수요일은 언제인지 알아보는 쿼리문
select sysdate, next_day(sysdate,'수요일')as "다음주 수요일"from dual;
-- 각 직원들이 근무한 개월 수를 구하는 쿼리문
select ename, hiredate,add_months(hiredate,4)from emp;
-- 어제 오늘 내일 날짜를 구하시오.
select sysdate-1어제, sysdate 오늘 ,sysdate+1as "내일" from dual;
-- 사원들의 입사일에서 입사 년도와 입사 달, 입사 일자를 각각 컬럼으로 출력하는 쿼리문
SELECT ENAME, SUBSTR(HIREDATE, 1, 2) as "년도", SUBSTR(HIREDATE, 4, 2) as "달", SUBSTR(HIREDATE, 7, 2) as "일"FROM EMP;
ArrayList를 검색하여 학점을 점수(A=4.0, B=3.0, C=2.0, D=1.0, F=0)로 변환하여 평균을 출력하는 프로그램을 작성하라.
6개의 학점을 빈 칸으로 분리 입력(A/B/C/D/F) >> A C A B F D
출력)
2.3333333333333335
package Hw_2024_08_07;
import java.util.ArrayList;
import java.util.Scanner;
class Grade {
private ArrayList<String> list;
final int NUM = 6;
public Grade() {
list = new ArrayList<String>();
}
public void inputGrade() {
Scanner sc = new Scanner(System.in);
System.out.println("6개 학점을 'A', 'B', 'C', 'D', 'F'로 입력하시오");
while (list.size() < NUM) {
list.add(sc.next());
}
}
public double getAvg() {
double sum = 0;
double avg = 0;
for (String str : list) {
switch (str) {
case "A": {
sum += 4.0;
break;
}
case "B": {
sum += 3.0;
break;
}
case "C": {
sum += 2.0;
break;
}
case "D": {
sum += 1.0;
break;
}
case "F": {
sum += 0;
break;
}
default:
System.out.println("A, B, C, D, F로 입력해주세요");
}
avg = sum / NUM;
}
return avg;
}
}
public class AvrArray {
public static void main(String[] args) {
Grade grade = new Grade();
grade.inputGrade();
System.out.println("평균점수: " + grade.getAvg());
}
}