카테고리 없음
맵 인터페이스 / 연습문제
장꾸꾸
2020. 10. 15. 12:09
(3)Map인터페이스
1)HashMap
- 해쉬테이블처럼(키와 객체)쌍으로 저장 관리할수 있다.
- Map에 키를 저장하는데 hash를 사용하여 성능이 좋다
- 저장되는 순서를 유지하지 않는다
- 오직 하나의 null키를 가질수 있다
- key의 중복을 허용하지 않는다
2)LinkedHashMap
- HashMap과 거의 같다.차이점은 Map에 추가되는 순서를 유지한다는것
3)HashTable
- 자료를 테이블 구조로 쉽게 저장할수 있고, 검색할수 있는 클래스이다
- Hashtable클래스는 Vector클래스에서 사용한 Enumeration인터페이스를
사용해 값을 가져올수 있다
- 동기화를 제공한다. null키와 null값을 저장할수 없다
(4)Iterator(반복자)인터페이스
리스트는 원소를 순차적으로 접근하기 위해서 for문을 이용하지만,
반복자를 이용하여 원소에 접근할수 있다.
모여있는 자료들을 검색하여 처리하는 패턴
(5)Enumeration인터페이스
Collection인터페이스로 부터 구현한 클래스안에 저장된 객체를 꺼낼수 있다
① hasMoreElements() : 요소가 있으면 true반환
② nextElement() : 요소를 얻어낸다
(6) AutoBox/AutoUnBoxing
: primitive type과 Wrapper Class타입간 형변환을 자동화
Collection에 primitive 타입을 넣고 빼는 경우에 유용함
리스트 : 해당 번호까지 반복문을 돌려서 접근해야함.
맵 : key를 알고 있으면 바로 해당 value에 접근할 수 있다. (Hash : 주소라는 의미)
그래서 맵이 리스트보다 빠르다
이런 게 메소드에도 적용돼서 list/set -> add // map -> put!
동기화는 쓰레드 처리할 때 과부하에 의해 처리를 안하고 넘어가거나 다운되는 걸 방지하기 위해서
-> 서버와 사용자의 경우 HashTable 사용
package collection2;
import java.util.HashMap;
import java.util.Map;
// 제네릭스 X
public class MapEx1 {
public static void main(String[] args) {
Map map = new HashMap();
map.put(101, "둘리");
map.put(102, "또치");
map.put(103, "마이클");
map.put(104, "도우너");
System.out.println("key:" + 101 + "value:" + map.get(101));
System.out.println("key:" + 102 + "value:" + map.get(102));
System.out.println("key:" + 103 + "value:" + map.get(103));
System.out.println("key:" + 104 + "value:" + map.get(104));
}
}
출력값)
key:101value:둘리
key:102value:또치
key:103value:마이클
key:104value:도우너
...
HashMap<Integer, String> map = new HashMap();
map.put(101, "둘리");
map.put(102, "또치");
map.put(103, "마이클");
map.put(104, "도우너");
System.out.println("key:" + 101 + "value:" + map.get(101));
System.out.println("key:" + 102 + "value:" + map.get(102));
System.out.println("key:" + 103 + "value:" + map.get(103));
System.out.println("key:" + 104 + "value:" + map.get(104));
... 출력값 동일
.. 입력값으로 돌리기 (Run as)
package collection2;
import java.util.HashMap;
public class MapEx2 {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap();
map.put("둘리", new Integer(85));
map.put("또치", new Integer(100));
map.put("마이클", new Integer(55));
map.put("도우너", null);
int score = map.get(args[0]);
System.out.println(args[0]+ "의 성적은" + score + "점입니다");
}
}
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap();
map.put("둘리", new Integer(85));
map.put("또치", new Integer(100));
map.put("마이클", new Integer(55));
map.put("도우너", null);
// int score = map.get(args[0]);
// System.out.println(args[0]+ "의 성적은" + score + "점입니다");
Set<String> keys = map.keySet();
System.out.println(keys);
for(String v : keys) {
System.out.println(v + "\t" + map.get(v));
}
출력값)
[둘리, 도우너, 마이클, 또치]
둘리 85
도우너 null
마이클 55
또치 100
연습문제
package collection2;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/* 오름차순 정렬해서 출력하시오(MapEx2.java / LottoNumber.java 참조)
[조건]
1. keySet()을 이용해서 key값을 추출해서 Set객체에 담기
2. List객체 ArrayList를 이용해서 keys값을 넣고
Collections 소트를 이용하시오
3. foreach를 이용해서 출력하시오
aaa 또치
bbb 도우넛
ccc 마이콜
ddd 둘리
*/
public class MapEx3 {
//TODO 오름차순 정렬시키기
public static void main(String[] args) {
Map<String,String> map=new HashMap<>();
map.put("ddd","둘리");
map.put("bbb","도우넛");
map.put("aaa","또치");
map.put("ccc","마이콜");
System.out.println(map);
Set<String> keys = map.keySet();
// System.out.println(keys);
ArrayList<String>list = new ArrayList<String>(keys);
// 문자열 오름차순도 int와 동일
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
return o1.compareTo(o2);
}
});
for(String ob : list) {
System.out.println( ob + " " + map.get(ob));
}
}
}
선생님 답안
package collection2;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapEx3 {
public static void main(String[] args) {
Map<String,String> map=new HashMap<>();
map.put("ddd","둘리");
map.put("bbb","도우넛");
map.put("aaa","또치");
map.put("ccc","마이콜");
// System.out.println(map);
Set<String> keys = map.keySet();
ArrayList<String> list = new ArrayList<>(keys);
Collections.sort(list);
for (String ob : list)
{
System.out.println(ob + "\t"+map.get(ob));
}
}
}
연습문제2
package collection2;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class MapEx4 {
public static void main(String[] args) {
Book ob1=new Book("java","kim",100);
Book ob2=new Book("oracle","lee",250);
Book ob3=new Book("c++","park",150);
//hash map추가------------------------
Map<String,Book> map=new HashMap<>();
map.put(ob1.getTitle(),ob1);
map.put(ob2.getTitle(),ob2);
map.put(ob3.getTitle(),ob3);
//[문제1]이름만 출력----------------------
//park
//kim
//lee
Set<String> keys = map.keySet();
System.out.println(keys);
//[문제2]검색-----------------------------
//찾는 도서명: c++
//책이름:c++ 저자:lee 페이지:250
//찾는 도서명: php
//찾는 도서가 없습니다
Scanner sc=new Scanner(System.in);
System.out.print("찾는 도서명:"); String t=sc.next();
if(t.equals(ob1.getTitle())) {
System.out.println("찾는 도서명:" + t);
System.out.println("책이름:"+ob1.getTitle()+"저자:"+ob1.getWriter()+"페이지:"+ob1.getPage());
}else if(t.equals(ob2.getTitle())) {
System.out.println("찾는 도서명:" + t);
System.out.println("책이름:"+ob2.getTitle()+"저자:"+ob2.getWriter()+"페이지:"+ob2.getPage());
}else if(t.equals(ob2.getTitle())) {
System.out.println("찾는 도서명:" + t);
System.out.println("책이름:"+ob3.getTitle()+"저자:"+ob3.getWriter()+"페이지:"+ob3.getPage());
}else {
System.out.println("찾는 도서명:" + t);
System.out.println("찾는 도서가 없습니다");
}
sc.close();
}
}
선생님 답안
System.out.print("찾는 도서명:"); String t=sc.next();
if(map.get(t)==null) {
System.out.println("찾는 도서가 없습니다");
}else {
System.out.println("책이름:" + map.get(t).getTitle()
+" 책처자:" + map.get(t).getAuthor()
+" 페이지:" + + map.get(t).getPage());
}
이부분 체크
package collection2;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class MapEx4 {
public static void main(String[] args) {
Book ob1=new Book("java","kim",100);
Book ob2=new Book("oracle","lee",250);
Book ob3=new Book("c++","park",150);
//hash map추가------------------------
Map<String,Book> map=new HashMap<>();
map.put(ob1.getTitle(), ob1);
map.put(ob2.getTitle(), ob2);
map.put(ob3.getTitle(), ob3);
//[문제1]이름만 출력----------------------
//park
//kim
//lee
Set<String> keys=map.keySet();
for(String k :keys) {
System.out.println(map.get(k).getAuthor());
}
//[문제2]검색-----------------------------
//찾는 도서명: c++
//책이름:c++ 저자:lee 페이지:250
//찾는 도서명: php
//찾는 도서가 없습니다
Scanner sc=new Scanner(System.in);
System.out.print("찾는 도서명:"); String t=sc.next();
if(map.get(t)==null) {
System.out.println("찾는 도서가 없습니다");
}else {
System.out.println("책이름:" + map.get(t).getTitle()
+" 책처자:" + map.get(t).getAuthor()
+" 페이지:" + + map.get(t).getPage());
}
sc.close();
}
}
연습문제3
package collection2;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class MapEx5{
public static void main(String[] args) {
Map<String,String> map=new HashMap<>();
map.put("고길동","객실1");
map.put("둘리","객실2");
map.put("또치","객실1");
map.put("마이콜","객실3");
map.put("도우넛","객실4");
map.put("희동이","객실2");
//[문제1]전체 객실 사용자 출력(forEach를 사용)
//객실1에 있는 사용자는 고길동입니다
//객실1에 있는 사용자는 또치입니다
//객실2에 있는 사용자는 둘리입니다
// :
// 키 값 SET + 포이치
Set<String> keys = map.keySet();
for(String k : keys) {
System.out.println(map.get(k)+"에 있는 사용자는"+k+"입니다");
}
//[문제2]객실별 사용자 출력(Iterator를 사용)
//방 이름을 입력하시오(객실1~객실4):객실1
//객실1에 있는 사용자는 고길동입니다
//객실1에 있는 사용자는 또치입니다
Scanner sc=new Scanner(System.in);
System.out.print("방 이름을 입력하시오(객실1~객실4):");
String room=sc.next();
//Iterator 사용 ->list / set 구현 앞에서 set씀.
Iterator<String>itr = keys.iterator();
while(itr.hasNext()) {
System.out.println(list.get(itr.next())+"에 있는 사용자는"+k+"입니다");
}
sc.close();
}
}
선생님 답안
package collection2;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class MapEx5{
public static void main(String[] args) {
Map<String,String> map=new HashMap<>();
map.put("고길동","객실1");
map.put("둘리","객실2");
map.put("또치","객실1");
map.put("마이콜","객실3");
map.put("도우넛","객실4");
map.put("희동이","객실2");
//[문제1]전체 객실 사용자 출력(forEach를 사용)
//객실1에 있는 사용자는 고길동입니다
//객실1에 있는 사용자는 또치입니다
//객실2에 있는 사용자는 둘리입니다
// :
Set<String> keys=map.keySet();
for(String k:keys) {
System.out.println(map.get(k)+"에 있는 사용자는 " + k +"입니다");
}
//[문제2]객실별 사용자 출력(Iterator를 사용)
//방 이름을 입력하시오(객실1~객실4):객실1
//객실1에 있는 사용자는 고길동입니다
//객실1에 있는 사용자는 또치입니다
Scanner sc=new Scanner(System.in);
System.out.print("방 이름을 입력하시오(객실1~객실4):");
String room=sc.next();
// Set<String> keys2=map.keySet();
// Iterator<String> iter=keys2.iterator();
//
// while(iter.hasNext())
// {
// String k=iter.next();
// String rom=map.get(k);
// if(rom.equals(room)) {
// System.out.println(map.get(k)+"에 있는 사용자는 " + k + "입니다");
// }
// }
sc.close();
}
}