1. ArrayList 와 LinkedList 의 장단점은?
※ArrayList<E>
· 배열 기반으로 이루어진 구조이며, 연속된 구간으로 형성되어 삽입/삭제보다는 검색 위주로 사용된다.
· 잠점: 인스턴스 참조가 빠르다. (주소를 직접적으로 검색)
· 단점: 공간이 부족한 경우, 기존 배열을 복사하여 증가시키기 때문에 비교적 많은 시간이 소요된다.
※LinkedList<E>
· 리스트 기반으로 이루어진 구조이며, 연속된 구간이 아닌 참조 형태로 형성되어 삽입/삭제 위주로 사용된다.
· 잠점: 객체를 생성하기 때문에 저장 공간을 늘리고, 삭제하는 과정이 단순.하다.
· 단점: 연속된 구간이 아닌 객체를 생성하여 주소를 참조하기 때문에 검색 시간이 비교적 많이 소요된다.
2. 아래와 같이 양수를 입력받아 저장하고, 가장 큰 수를 출력하는 프로그램을 작성하여라.
단, Scanner 클래스로 -1이 입력되면 종료되어 큰 수가 출력된다.
· 참고
· 작성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
class Link{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
List<Integer> list = new LinkedList<>();
int max = 0;
System.out.println("정수를 입력해주세요(-1은 stop)");
while(true) {
Integer num;
num = sc.nextInt();
list.add(num);
if(num == -1)
break;
for(int e : list) {
if(max < e)
max = e;
}
}System.out.println("가장 큰 수는 " + max);
}
}
|
cs |
3. 로또 프로그램을 작성하시오. (Set으로)
1
2
3
4
5
6
7
8
9
|
class Lotto {
public static void main(String[] args) {
Set<Integer> set = new HashSet<Integer>();
while(set.size() < 6) {
set.add((int)(Math.random() * 45) + 1);
}
System.out.println(set);
}
}
|
cs |
4. Set에 대하여 설명하시오
· Set<E> 인터페이스를 구현하는 대표적인 컬렉션은 HashSet<E>와 TreeSet<E>가 있으며,
수학적 집합과 유사한 특성으로 저장 순서가 유지되지 않으며, 중복 저장을 허용하지 않는다.
· TreeSet<E>: List<E>와의 차이점은 중복 저장되지 않으면서, 오름차순으로 정렬된다는 차이가 있다.
단, 정렬이 되기 위해서는 Comparable-compareTo를 기반으로 구현된다.
5. Scanner 클래스를 사용하여 6개 학점('A', 'B', 'C', 'D', 'F')을 입력받아 ArrayList에 저장하고,
ArrayList를 검색하여 학점을 점수(A=4.0, B=3.0, C=2.0, D=1.0, F=0)로 변환하여 평균을 출력하는 프로그램을 작성하라.
· 참고
· 작성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
class Grade{
private double sum;
private double avg;
List<String> list;
Grade(){
}
public void input() {
list = new ArrayList<>();
Scanner sc = new Scanner(System.in);
System.out.println("성적을 입력해주세요");
for(int i = 0; i < 6; i++) {
String grade = sc.next();
list.add(grade);
switch(grade) {
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;
}
}
}
public void output() {
double avg = sum / list.size();
System.out.println("총점은 " + sum);
System.out.println("평균은 " + avg);
}
}
|
cs |
1
2
3
4
5
6
7
|
class Grademain {
public static void main(String[] args) {
Grade gr = new Grade();
gr.input();
gr.output();
}
}
|
cs |
6. 출력이 아래와 같이 나오도록 하시오. **필수**
· 참고
· 작성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
class Num {
private int num;
public Num(int n) {
num = n;
}
@Override
public String toString() {
return String.valueOf(num);
}
@Override
public int hashCode() {
return num % 3;
}
@Override
public boolean equals(Object obj) {
if(num == ((Num2)obj).num)
return true;
else
return false;
}
}
|
cs |
※위 코드에서 public int hashCode() 주석 처리 시 3개의 값이 출력되는 이유?
· hashCode를 통해 분류되는 주소값을 가진 군집에 객체들이 분류되어야 하는데 주석 처리 시 주소값이
생성되지않기 때문에 분류가 이루어지지 않아 3개의 값이 출력된다.
7. Set<E>가 호출되는 원리와 순서를 설명하시오.
· 동일 인스턴스가 저장되지 않기 위해 hashCode()와 equals() 메소드 2가지의 기준을 거쳐 인스턴스를 판단한다.
· 주소를 가진 테이블을 찾아 체계적으로 검색하기 때문에 검색 속도가 가장 빠르고, hashCode() 호출하기 위해서는
실제 주소를 가진 key가 필요하다.
1) hashCode를 통한 분류
· hashCode()는 Object 함수 종류 중 하나이다.
· 3, 7, 4, 13, 19의 분류 대상이 존재한다면, key를 통해 함수가 호출되어 해쉬알고리즘(ex: num % 3)을 통해 반환 값을
기준으로 분류하여 군집을 형성하고, 동일한 값들이 모여 동일한 주소를 가진 테이블을 형성한다.
·
2) equals를 통한 분류(내용 비교!!)
· hashCode()를 기반으로 분류된 군집에서 equals 메소드를 호출하여 한 번 더 동일 인스턴스가 존재하는지 비교한다.
8. 아래와 같이 출력되도록 하시오.
· 참고
· 작성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
class Person {
private String name;
private int age;
Person(String name, int age){
this.name = name;
this.age = age;
}
@Override
public String toString() {
return name + "(" + age + "세)";
}
@Override
public int hashCode() {
return age % 3;
//3으로 나누지 않아도 ok!! age로 분류되서 이름이 같지 않으면 또 분류되기 때문!
//equals에서 이름, 나이 둘 다 따지기 때문! 꼭 String은 equals로 비교하기.
}
@Override
public boolean equals(Object obj) {
String n = ((Person)obj).name;
int a = ((Person)obj).age;
if((this.name.equals(n)) && (this.age == a))
return true;
else
return false;
}
}
|
cs |
'bitcamp > 면접족보' 카테고리의 다른 글
면접족보 20/12/24_프로토콜, WAS, JSP 개념 (0) | 2021.02.12 |
---|---|
면접족보 20/12/23_Stack, Queue, Map (0) | 2021.02.06 |
면접족보 20/12/21_제네릭, 컬렉션 프레임워크 (0) | 2021.02.05 |
면접족보 20/12/18_제네릭 개념 (0) | 2021.02.03 |
면접족보 20/12/17_Shallow, Deep copy (0) | 2021.02.01 |