문제와 해답은 직접 작성한 것으로 오타가 있을 수도 있으며 해답역시 틀린 부분이 있을 수 있습니다. 틀린 부분에 대한 지적은 적극 수용하도록 하겠습니다. 문제를 먼저 풀어보시고 참고용으로만 봐주시길
바랍니다.
연습문제 7장
1. 컬렉션에 대한 설명 중 잘못된 것은?
① 컬렉션은 배열과 달리 객체들만 삽입 가능하다.
② 컬렉션에는 Vector<E>, ArrayList<E>,
LinkedList<E>, HashMap<K, V>, Stack<E> 등이 있다.
③ 컬렉션 클래스는 모두 제네릭(generics)으로 만들어져 있다.
④ 배열처럼 저장하는 요소의 개수가 고정되어 있다.
크기를 자동으로 조절하고
추가, 삭제, 검색등을 할 수 있다.
2. 제네릭에 대한 설명 중 틀린 것은?
① 제네릭은 클래스, 인터페이스, 메소드를 특정 타입에 종속되지 않게 일반화시키는 기술이다.
②
제네릭 클래스 등을 이용하여 응용 프로그램을 작성하는 기법을 제네릭 프로그래밍이라고 하며 최근에는 잘 활용되지 않는 추세이다.
③ Vector<E>에서 E를 제네릭 타입
혹은 타입 매개 변수라고 부른다.
④ Vector<E>에서 E에 Integer 등 구체적인 타입을 지정하여 사용해야 한다.
3. 다음 코드에 대한 설명으로 틀린 것은?
Vector<integer> v = new Vector<integer>(3);
① v.size()는 3을 리턴한다.
② 제네릭 벡터로부터 Integer 타입으로 구체화된 벡터를 생성하고 있다.
③
v.add(10)을 호출하여 정수 10을 벡터에 삽입할 수 있다.
④ 벡터 v에는 실수 값을 절대로 삽입할 수 없다.
0을
반환한다.
4. 다음 물음에 답하라.
(1) '키'는 문자열이고 '값'이 Double 타입인 HashMap 객체를 생성하는 코드는?
HashMap<String, Double> hm = new HashMap<String, Double>;
(2) String 타입으로 구체화한 Vector를 생성하는 코드는?
Vector<String> v = new Vector<String>;
(3) Circle 클래스의 객체만 저장할 수 있는 ArrayList 객체를 생성하는 코드는?
ArrayList<Circle> al = new ArrayList<Circle>;
5. 다음 코드에서 잘못된 부분을 지적하고 이유를 설명하라.
Vector<int> v = new Vector<int>(100);
int를 Integer로 변경하여야 한다. 컬렉션의 요소는 오직 객체만 사용된다.
6. 다음에서 벡터 v의 Iterator 객체를 얻어내는 간단한 코드는 무엇인가?
Vector<integer> v = new Vector<integer>();
_____________________________
Iterator<Integer> it = v.iterator();
7. 다음에서 자동 박싱/언박싱이 일어나는 곳을 지적하라.
ArrayList<Double> a = new ArrayList<Double>();
a.add(3.5);
double d = a.get(0);
2행의 3.5에서 자동 박싱이 발생하여 리스트에 삽입된다. 3행의 a.get(0)이 자동 언박싱되어 d에 대입된다.
8. 다음 프로그램은 ArrayList에 0에서 100 사이의 임의의 실수를 20개 삽입하고 이들을 모두 출력하는 코드이다. 밑줄 친 부분(6, 7행)을 Iterator를 이용하여 수정하라.
ArrayList<Double> a = new ArrayList<Double>();
for(int i=0; i<20; i++) {
double d = Math.random()*100;
a.add(d);
}
for(int i=0; i<20; i++)
System.out.println(a.get(i));
Iterator<Double> it = a.Iterator();
while(it.hasNext())
System.out.println(it.next());
9. 다음 Vector에 대해 빈칸에 적절한 코드를 채워라
Vector<String> v = new Vector<String>();
_________________ // v에 "Good" 삽입
_________________ // v에 "Bad" 삽입
_________________ // v에 현재 삽입된 문자열 개수 출력
_________________ // v의 인덱스 1에 있는 "Bad" 문자열 삭제
v.add("Good");
v.add("Bad");
System.out.println(v.size());
v.remove(1);
10. 다음 HashMap에 대해 빈칸에 적절한 코드를 채워라.
// 사람 이름을 키로 하고 나이를 값으로 다루는 해시맵 생성
HashMap<________> h = ___________ // 해시맵 생성
_______________ // h에 "이몽룡" 나이 25 저장
_______________ // h에 "성춘향" 나이 18 저장
Scanner scanner = new Scanner(System.in);
String name = scanner.next(); // 사용자로부터 이름 입력
Integer age = ___________ // h에서 name의 나이 검색
2행, 1 : String, Integer
2행, 2 : new
HashMap<String,Integer>();
3행 : h.put("이몽룡",
25);
4행 : h.put("성충향",
18);
7행 : h.get(name);
11. 다음 제네릭 클래스에서 4개의 문항에 대해 답하라.
class MyGeneric<W> {
private W x;
public MyGeneric(W x) {
this.x = x;
}
__________ // (2) 여러 줄로 작성 가능
__________ // (3) 여러 줄로 작성 가능
(1) MyGeneric의 타입 매개 변수는 무엇인가? W
(2) x를 리턴하는 public 메소드 take()를 작성하라. public W take() { return x; }
(3) 매개 변수를 하나 가진 compare() 메소드를 작성하라. compare는 매개 변수와 x를 비교하여 같으면 true, 아니면 false를 리턴한다.
public boolean compare(W x) {
if(this.x.equals(x)) { return true; }
else { return false; }
}
(4) String으로 구체화한 MyGeneric 객체를 생성하고 활용 예를 들어라.
MyGeneric<String> mg =
new MyGeneric<String>("SKYLINE");
생성된 문자를 확인할 수 있고, 생성된 문자와 다른 문자를 비교할 수 있다.
Ghost