728x90
반응형

문제

  1. 입력 부분
     -> 다음과 같이 Person클래스에 스캐너로 입력된 값 저장
     -> String name : 이름 (ex, 홍길동)
     -> int age : 나이 (ex, 30)
     -> String addr : 주소 (ex, 서울)

     => 해당 Person 객체를 map에 저장
     => 키 값은 name

     ex, map.put("홍길동",new Person("홍길동", 30, "서울"));

  2. 삭제 부분
    스캐너로 입력한 값과 객체의 name 변수 값과 동일 할 경우 맵에서 삭제
     -> ex, 스캐너로 "홍길동"을 입력하면 name의 변수가 "홍길동"인 map을 제거

  3. 출력 부분
     -> 콘솔에 '이름 : 홍길동, 나이 : 30, 주소 : 서울' 과 같은 형태로 출력

  4. 종료 부분
     -> 프로그램 종료

 

 


▶ Person 클래스

public class Person {
	private String name;
	private int age;
	private String addr;
	
	Person(String name, int age, String addr){
		this.name=name;
		this.age=age;
		this.addr=addr;
	}

	public String getName() {
		return name;
	}

	public int getAge() {
		return age;
	}

	public String getAddr() {
		return addr;
	}
}

 

 


▶ main 코드

1) 입력 부분

				System.out.print("이름을 입력하세요 >> ");
				String name = scan.next();
				System.out.print("나이를 입력하세요 >> ");
				int age = scan.nextInt();
				System.out.print("주소를 입력하세요 >> ");
				String addr = scan.next();
	
				map.put(name, new Person(name, age, addr));

 

 

2) 삭제 부분

				Set<String> keys = map.keySet();//key 값을 순차적으로 접근할 수 있다.
				Iterator<String> it = keys.iterator();
				
				System.out.print("삭제할 이름을 입력하세요 >> ");
				String rname = scan.next();

				while(it.hasNext()){
					if(rname.equals(map.get(it.next()).getName())) //입력된 값과 일치하면 삭제
						map.remove(rname);
				}

 

※ 위 코드는 Iterator을 이용한 코드이다. 아래 코드로 작성해도 같은 결과를 가져온다.

				if(map.containsKey(rname)){
					map.remove(rname);
				}

 

 

3) 출력 부분

				Set<String> keys = map.keySet();//key 값을 순차적으로 접근할 수 있다.
				Iterator<String> it = keys.iterator();
				
				while(it.hasNext()){
					Person p = map.get(it.next());
					System.out.print("이름 : " + p.getName());
					System.out.print(", 나이 : " + p.getAge());
					System.out.println(", 주소 : " + p.getAddr());
				}

 

 

4) 종료 부분

				System.out.println("프로그램 종료");
				break;

 

 

 


▶ 출력 결과

1) 입력

(1)입력, (2)삭제, (3)출력, (4)종료 : 1
이름을 입력하세요 >> 홍길동
나이를 입력하세요 >> 30
주소를 입력하세요 >> 서울

 

 

2) 입력한 내용 출력

(1)입력, (2)삭제, (3)출력, (4)종료 : 3
이름 : 홍길동, 나이 : 30, 주소 : 서울

 

 

3) 스캐너로 입력한 값과 name value 값이 동일할 경우 삭제

(1)입력, (2)삭제, (3)출력, (4)종료 : 2
삭제할 이름을 입력하세요 >> 홍길동

(1)입력, (2)삭제, (3)출력, (4)종료 : 3

※ 일치하지 않는다면 삭제되지 않는다.

 

4) 프로그램 종료

(1)입력, (2)삭제, (3)출력, (4)종료 : 4
프로그램 종료

 

 

 


▶ 전체 코드

		HashMap<String,Person> map = new HashMap<String,Person>();
		Scanner scan = new Scanner(System.in);

		while(true){
			System.out.print("(1)입력, (2)삭제, (3)출력, (4)종료 : ");
			int get=scan.nextInt();

			if(get==1){ //입력
				
				System.out.print("이름을 입력하세요 >> ");
				String name = scan.next();
				System.out.print("나이를 입력하세요 >> ");
				int age = scan.nextInt();
				System.out.print("주소를 입력하세요 >> ");
				String addr = scan.next();
	
				map.put(name, new Person(name, age, addr));
			

			} else if(get==2){ //삭제
				Set<String> keys = map.keySet();//key 값을 순차적으로 접근할 수 있다.
				Iterator<String> it = keys.iterator();
				
				System.out.print("삭제할 이름을 입력하세요 >> ");
				String rname = scan.next();

				while(it.hasNext()){
					if(rname.equals(map.get(it.next()).getName())) //입력된 값과 일치하면 삭제
						map.remove(rname);
				}
//				or
//				if(map.containsKey(rname)){
//					map.remove(rname);
//				}
				
			} else if(get==3){ //출력
				Set<String> keys = map.keySet();//key 값을 순차적으로 접근할 수 있다.
				Iterator<String> it = keys.iterator();
				
				while(it.hasNext()){
					Person p = map.get(it.next());
					System.out.print("이름 : " + p.getName());
					System.out.print(", 나이 : " + p.getAge());
					System.out.println(", 주소 : " + p.getAddr());
				}
				
			} else if(get==4){ //종료
				System.out.println("프로그램 종료");
				break;
			}
			System.out.println(); //줄바꿈
		}//while_end

 

 

 

 

 

 

[JAVA] Iterator (17일차)

1. HashMap과 ArrayList 2. Iterator 3. 심화 문제 풀이 1. HashMap과 ArrayList [JAVA] 해시맵 심화 문제 풀이 (17일차) 문제1 입력 부분 -> 다음과 같이 map에 스캐너로 입력된 값 저장 -> key : name, value : 이름 (ex, 홍

deliciouscode.tistory.com

 

728x90
반응형
728x90
반응형

<오늘의 학습>

1. HashMap과 ArrayList

2. Iterator

3. 심화 문제 풀이

 

 

 

1. HashMap과 ArrayList

 

[JAVA] 해시맵 실습 (17일차)

1. 해시맵 예제 ▶ 코드 HashMap hong = new HashMap(); HashMap yu = new HashMap(); hong.put("name","홍길동"); hong.put("age",30); hong.put("addr","서울"); hong.put("phone","010-1234-5678"); yu.put("name","유재석"); yu.put("age",50); yu.put("a

deliciouscode.tistory.com

 

 

[JAVA] 해시맵 심화 문제 풀이 (17일차)

문제1 입력 부분 -> 다음과 같이 map에 스캐너로 입력된 값 저장 -> key : name, value : 이름 (ex, 홍길동) -> key : age, value : 나이 (ex, 30) -> key : addr, value : 주소 (ex, 서울) => 해당 map을 list에 저장 삭제 부분

deliciouscode.tistory.com

 

 

 

 

2. Iterator

▶ Iterator<E> 인터페이스의 특징

  • 컬렉션의 순차 검색을 위해 사용한다. Iterator 객체를 이용하면 인덱스 없이 순차적 검색이 가능하다.
  • iterator() 메소드 : Iterator 객체 반환
  • Vector, ArrayList, LinkedList가 상속받는 인터페이스
    • 리스트 구조의 컬렉션에서 요소의 순차 검색을 위한 메소드 포함

 

 

Iterator 인터페이스 메소드

메소드 설명
boolean hasNext() 방문할 요소가 남아 있으면 true 리턴
E next() 다음 요소 리턴
void remove() 마지막으로 리턴된 요소를 제거

 

 


▶ 예제 1

▷ v 객체에 숫자를 5개 넣고 for문을 이용해 숫자를 출력할 수 있다.

		Vector<Integer> v = new Vector<Integer>();

		//v 객체에 숫자 5개 넣기
		v.add(0);
		v.add(1);
		v.add(2);
		v.add(3);
		v.add(4);
		
		for(Integer num:v)
			System.out.println(num);

 

 

▷ Iterator 객체를 이용하여 인덱스 없이 순차적으로 검색할 수 있다.

		Iterator<Integer> it = v.iterator(); //인터페이스
		//it 위치를 -1 이라고 생각하면 이해하기 편하다.
		
		while(it.hasNext()){//방문할 요소가 남아 있으면 true를 리턴한다.
			System.out.println(it.next());
		}

 

 


▶ 예제 2

  • ArrayList<String> 생성
  • 문자열 5개 스캐너로 입력 받아서 저장
  • Iterator 객체를 통해서 출력

 

▷ 코드

		ArrayList<String> list = new ArrayList<String>();
		Scanner scan = new Scanner(System.in);
		
		for(int i=0;i<5;i++){
			System.out.print((i+1)+"번째 문자열 입력 >> ");
			list.add(scan.next());
		}
		
		Iterator<String> itS = list.iterator();
		
		while(itS.hasNext()){
			System.out.println(itS.next());
		}
		scan.close();

 

 

▷ 출력 결과

1번째 문자열 입력 >> Kim
2번째 문자열 입력 >> Lee
3번째 문자열 입력 >> Park
4번째 문자열 입력 >> Jo
5번째 문자열 입력 >> Han

Kim
Lee
Park
Jo
Han

 

 

 

 

 

3. Iterator문제

 

[JAVA] Iterator 심화 문제 풀이 (17일차)

문제 입력 부분 -> 다음과 같이 Person클래스에 스캐너로 입력된 값 저장 -> String name : 이름 (ex, 홍길동) -> int age : 나이 (ex, 30) -> String addr : 주소 (ex, 서울) => 해당 Person 객체를 map에 저장 => 키 값은 n

deliciouscode.tistory.com

 

 

 

 

 


2023년 6월 8일 목요일

<17일차 수업 후기>

오늘은 HashMap과 ArrayList, Iterator를 이용한 심화 문제를 위주로 수업이 진행되었다. HashMap은 Iterator을 상속받지 못했기 때문에 Set을 이용해 key 값을 받아와서 사용하고, ArrayList는 Iterator를 상속받았기 때문에 바로 사용이 가능하다는 차이가 있었다.  처음 컬렉션과 제네릭을 배울 땐 알지 못했는데 오늘 Iterator를 이용해 실습하면서 16일차에 배운 내용을 많이 이해할 수 있었다.

이틀이라는 짧은 시간동안 실습해보았음에도 데이터를 추가하거나 삭제하는 부분에 대해 배열보다 훨씬 편했고, 왜 중요한 파트라고 말씀하셨는지 알 수 있었다.  아직은 완벽하지 않지만 잘 학습해서 내 지식으로 만들고 싶은 욕심이 생긴다.

728x90
반응형
728x90
반응형

문제1

  1. 입력 부분
    -> 다음과 같이 map에 스캐너로 입력된 값 저장
    -> key : name, value : 이름 (ex, 홍길동)
    -> key : age, value : 나이 (ex, 30)
    -> key : addr, value : 주소 (ex, 서울)

    => 해당 map을 list에 저장
  2. 삭제 부분
    스캐너로 입력한 이름 값과 map의 name value 값과 동일 할 경우 리스트에서 삭제

    -> ex, 스캐너로 "홍길동"을 입력하면 name의 value가 "홍길동"인 map을 리스트에서 제거

  3. 출력 부분
    -> 콘솔에 '이름 : 홍길동, 나이 : 30, 주소 : 서울' 과 같은 형태로 출력

  4. 종료 부분
    -> 프로그램 종료

 


▶ 코드

1) 입력 부분

				//다음과 같이 map에 스캐너로 입력된 값 저장
				HashMap<String,Object> map = new HashMap<String,Object>();

				System.out.print("이름을 입력하세요 >> ");
				map.put("name", scan.next());
				System.out.print("나이를 입력하세요 >> ");
				map.put("age", scan.nextInt());
				System.out.print("주소을 입력하세요 >> ");
				map.put("address", scan.next());

				list.add(map); //해당 map을 list에 저장

 

 

2) 삭제 부분

				//스캐너로 입력한 값과 map의 name value 값과 동일 할 경우 리스트에서 삭제
				System.out.print("삭제할 내용을 입력하세요 >> ");
				Object obj = scan.next();
				for(int i=0;i<list.size();i++){
					if(obj.equals(list.get(i).get("name"))){	
						System.out.println("삭제 - 이름:"+list.get(i).get("name")+", 나이:"+list.get(i).get("age")+", 주소:"+list.get(i).get("address"));
						list.remove(i);
						break;
					} else
						System.out.println("해당 이름을 가진 사람이 없어 삭제되지 않았습니다.");
				}

 

 

3) 출력 부분

				for(int i=0;i<list.size();i++){
					System.out.print("이름:"+list.get(i).get("name"));
					System.out.print(", 나이:"+list.get(i).get("age"));
					System.out.println(", 주소:"+list.get(i).get("address"));
				}

 

 

4) 종료 부분

				System.out.println("프로그램이 종료되었습니다.");
				break;//while_out

 

 

 


▶ 출력 결과

1) 리스트 입력

(1)입력, (2)삭제, (3)출력, (4)종료 : 1
이름을 입력하세요 >> 홍길동
나이를 입력하세요 >> 30
주소를 입력하세요 >> 서울

(1)입력, (2)삭제, (3)출력, (4)종료 : 1
이름을 입력하세요 >> 유재석
나이를 입력하세요 >> 50
주소를 입력하세요 >> 인천

 

 

2) 입력한 리스트 내용 출력

(1)입력, (2)삭제, (3)출력, (4)종료 : 3
이름:홍길동, 나이:30, 주소:서울
이름:유재석, 나이:50, 주소:인천

 

 

3) 스캐너로 입력한 이름 값과 name value 값이 동일할 경우 리스트에서 삭제

(1)입력, (2)삭제, (3)출력, (4)종료 : 2
삭제할 내용을 입력하세요 >> 홍길동
삭제 - 이름:홍길동, 나이:30, 주소:서울

(1)입력, (2)삭제, (3)출력, (4)종료 : 3
이름:유재석, 나이:50, 주소:인천

(1)입력, (2)삭제, (3)출력, (4)종료 : 2
삭제할 내용을 입력하세요 >> 박명수
해당 이름을 가진 사람이 없어 삭제되지 않았습니다.

※ 일치하지 않는다면 삭제되지 않는다.

 

4) 프로그램 종료

(1)입력, (2)삭제, (3)출력, (4)종료 : 4
프로그램이 종료되었습니다.

 

 

 


▶ 전체 코드

		ArrayList<HashMap<String,Object>> list = new ArrayList<HashMap<String,Object>>();
		Scanner scan = new Scanner(System.in);

		//break문을 만날 때까지 무한 반복 
		while(true){
			System.out.print("(1)입력, (2)삭제, (3)출력, (4)종료 : ");
			int get = scan.nextInt();

			if(get==1){ //입력
				//다음과 같이 map에 스캐너로 입력된 값 저장
				HashMap<String,Object> map = new HashMap<String,Object>();

				System.out.print("이름을 입력하세요 >> ");
				map.put("name", scan.next());
				System.out.print("나이를 입력하세요 >> ");
				map.put("age", scan.nextInt());
				System.out.print("주소를 입력하세요 >> ");
				map.put("address", scan.next());

				list.add(map); //해당 map을 list에 저장
			} else if(get==2){ //삭제
				//스캐너로 입력한 값과 map의 name value 값과 동일 할 경우 리스트에서 삭제
				System.out.print("삭제할 내용을 입력하세요 >> ");
				Object obj = scan.next();
				for(int i=0;i<list.size();i++){
					if(obj.equals(list.get(i).get("name"))){	
						System.out.println("삭제 - 이름:"+list.get(i).get("name")+", 나이:"+list.get(i).get("age")+", 주소:"+list.get(i).get("address"));
						list.remove(i);
						break;
					} else
						System.out.println("해당 이름을 가진 사람이 없어 삭제되지 않았습니다.");
				}

			} else if(get==3){ //출력
				for(int i=0;i<list.size();i++){
					System.out.print("이름:"+list.get(i).get("name"));
					System.out.print(", 나이:"+list.get(i).get("age"));
					System.out.println(", 주소:"+list.get(i).get("address"));
				}

			} else if(get==4){ //종료
				System.out.println("프로그램이 종료되었습니다.");
				break;//while_out
			} 
			System.out.println(); //줄바꿈
		}//while_end

		scan.close();

 

 

 

 

 

 

문제2

  1. 입력 부분
     -> 다음과 같이 map에 스캐너로 입력된 값 저장
     -> key : name, value : 이름 (ex, 홍길동)
     -> key : age, value : 나이 (ex, 30)
     -> key : java, value : 자바 점수 (ex, 90), 단 0~100 사이 값이 아니면 다시 입력
     -> key : oracle, value : 오라클 점수 (ex, 100), 단 0~100 사이 값이 아니면 다시 입력

     => 해당 map을 list에 저장

  2. 삭제 부분
    스캐너로 입력한 값과 map의 name value 값과 age value값이 둘다 동일할 경우 리스트에서 삭제

     -> ex, 스캐너로 "홍길동 30"을 입력하면 name의 value가 "홍길동" 
    age의 value가 30인 map을 리스트에서 제거

  3. 출력 부분
     -> 콘솔에 '이름 : 홍길동, 나이 : 30, 자바점수 : 90, 오라클점수 : 100' 과 같은 형태로 출력

  4. 종료 부분
     -> 프로그램 종료

 


▶ 코드

1) 입력 부분

				HashMap<String,Object> map = new HashMap<String,Object>();

				System.out.print("이름을 입력하세요 >> ");
				map.put("name",scan.next());
				System.out.print("나이를 입력하세요 >> ");
				map.put("age",scan.nextInt());

				while(true){
					System.out.print("자바 점수를 입력하세요 >> ");
					int java = scan.nextInt();
					if(java>=0 && java <=100){ //0~100
						map.put("java",java);
						break;//while1_inner_out
					}
					else
						System.out.println("0부터 100까지의 숫자를 입력해야합니다.\n"); //가독성을 위해 줄바꿈
				}//while1_inner

				while(true){
					System.out.print("오라클 점수를 입력하세요 >> ");
					int oracle = scan.nextInt();
					if(oracle>=0 && oracle <=100){ //0~100
						map.put("oracle",oracle);
						break;//while2_inner_out
					}
					else
						System.out.println("0부터 100까지의 숫자를 입력해야합니다.\n"); //줄바꿈
				}//while2_inner

				list.add(map);

 

※  보완) 메소드를 이용해 자바와 오라클의 점수 범위를 중복 코드 없이 출력할 수 있다.

	static int score(Scanner scan, String str){
		int num;
		while(true){
			System.out.print(str + " 점수를 입력하세요 >> ");
			num = scan.nextInt();
			if(num>=0 && num <=100)
				break;
			else 
				System.out.println("0부터 100까지의 숫자를 입력해야합니다.\n"); //줄바꿈
		}
		return num;
	}
				map.put("java",score(scan,"자바"));
				map.put("oracle",score(scan,"오라클"));

 

 

2) 삭제 부분

				//name value 값과 age value값이 둘다 동일 할 경우 리스트에서 삭제
				System.out.print("삭제할 이름과 나이를 정확히 입력하세요 ex)홍길동 30 >> ");
				String name = scan.next();
				Object age = scan.nextInt();

				for(int i=0;i<list.size();i++){
					if(name.equals(list.get(i).get("name")) && age == list.get(i).get("age")){
						System.out.println("삭제 - 이름:"+list.get(i).get("name")+", 나이:"+list.get(i).get("age")+", 자바 점수:"+list.get(i).get("java")+", 오라클 점수:"+list.get(i).get("oracle"));
						list.remove(i);
						break;
					} else
						System.out.println("해당 정보와 일치하는 사람이 없어 삭제되지 않았습니다.");
				}

 

 

3) 출력 부분

				for(int i=0;i<list.size();i++){
					System.out.print("이름:"+list.get(i).get("name"));
					System.out.print(", 나이:"+list.get(i).get("age"));
					System.out.print(", 자바 점수:"+list.get(i).get("java"));
					System.out.println(", 오라클 점수:"+list.get(i).get("oracle"));
				}

 

 

4) 종료 부분

				System.out.println("프로그램 종료");
				break;//while_out

 

 


▶ 출력 결과

1) 리스트 입력 (자바와 오라클 점수가 0~100 사이 값이 아니면 다시 입력)

(1)입력, (2)삭제, (3)출력, (4)종료 : 1
이름을 입력하세요 >> 홍길동
나이를 입력하세요 >> 30
자바 점수를 입력하세요 >> 55
오라클 점수를 입력하세요 >> 77

(1)입력, (2)삭제, (3)출력, (4)종료 : 1
이름을 입력하세요 >> 유재석
나이를 입력하세요 >> 50
자바 점수를 입력하세요 >> -1
0부터 100까지의 숫자를 입력해야합니다.

자바 점수를 입력하세요 >> 0
오라클 점수를 입력하세요 >> 101
0부터 100까지의 숫자를 입력해야합니다.

오라클 점수를 입력하세요 >> 100

 

 

2) 입력한 리스트 내용 출력

(1)입력, (2)삭제, (3)출력, (4)종료 : 3
이름:홍길동, 나이:30, 자바 점수:55, 오라클 점수:77
이름:유재석, 나이:50, 자바 점수:0, 오라클 점수:100

 

 

3) 스캐너로 입력한 값과 map의 name value 값과 age value값이 모두 일치할 경우 리스트에서 삭제

(1)입력, (2)삭제, (3)출력, (4)종료 : 2
삭제할 이름과 나이를 정확히 입력하세요 ex)홍길동 30 >> 홍길동 30
삭제 - 이름:홍길동, 나이:30, 자바 점수:55, 오라클 점수:77

(1)입력, (2)삭제, (3)출력, (4)종료 : 3
이름:유재석, 나이:50, 자바 점수:0, 오라클 점수:100

(1)입력, (2)삭제, (3)출력, (4)종료 : 2
삭제할 이름과 나이를 정확히 입력하세요 ex)홍길동 30 >> 유재석 49
해당 정보와 일치하는 사람이 없어 삭제되지 않았습니다.

(1)입력, (2)삭제, (3)출력, (4)종료 : 3
이름:유재석, 나이:50, 자바 점수:0, 오라클 점수:100

※ 모두 일치하지 않는다면 삭제되지 않는다.

 

 

4) 프로그램 종료

(1)입력, (2)삭제, (3)출력, (4)종료 : 4
프로그램 종료

 

 

 


▶ 전체 코드

	//점수를 확인 및 입력하는 메소드
	//static으로 선언해야 호출 가능. 입력받은 점수를 반환해야하기 때문에 int형으로 반환한다.
	static int score(Scanner s, String str){
		int num;
		while(true){
			System.out.print(str + " 점수를 입력하세요 >> ");
			num = s.nextInt();
			if(num>=0 && num <=100)
				break;
			else 
				System.out.println("0부터 100까지의 숫자를 입력해야합니다.\n"); //줄바꿈
		}
		return num;
	}

	public static void main(String[] args) {
		ArrayList<HashMap<String,Object>> list = new ArrayList<HashMap<String,Object>>();
		Scanner scan = new Scanner(System.in);

		while(true){
			System.out.print("(1)입력, (2)삭제, (3)출력, (4)종료 : ");
			int get = scan.nextInt();

			if(get==1){
				//입력
				HashMap<String,Object> map = new HashMap<String,Object>();

				System.out.print("이름을 입력하세요 >> ");
				map.put("name",scan.next());
				System.out.print("나이를 입력하세요 >> ");
				map.put("age",scan.nextInt());
				map.put("java",score(scan,"자바"));
				map.put("oracle",score(scan,"오라클"));

				list.add(map);

			} else if(get==2){
				//name value 값과 age value값이 둘다 동일 할 경우 리스트에서 삭제
				System.out.print("삭제할 이름과 나이를 정확히 입력하세요 ex)홍길동 30 >> ");
				String name = scan.next();
				Object age = scan.nextInt();

				for(int i=0;i<list.size();i++){
					if(name.equals(list.get(i).get("name")) && age == list.get(i).get("age")){
						System.out.println("삭제 - 이름:"+list.get(i).get("name")+", 나이:"+list.get(i).get("age")+", 자바 점수:"+list.get(i).get("java")+", 오라클 점수:"+list.get(i).get("oracle"));
						list.remove(i);
						break;
					} else
						System.out.println("해당 정보와 일치하는 사람이 없어 삭제되지 않았습니다.");
				}

			} else if(get==3){
				//출력
				for(int i=0;i<list.size();i++){
					System.out.print("이름:"+list.get(i).get("name"));
					System.out.print(", 나이:"+list.get(i).get("age"));
					System.out.print(", 자바 점수:"+list.get(i).get("java"));
					System.out.println(", 오라클 점수:"+list.get(i).get("oracle"));
				}

			} else if(get==4){
				System.out.println("프로그램 종료");
				break;//while_out
			}
			System.out.println(); //줄바꿈
		}//while_end
	}//main_end

 

 

 

 

 

 

[JAVA] ★ Vector, ArrayList, HashMap ★ (16일차)

1. 컬렉션 2. 제네릭 3. Vector 4. ArrayList 5. HashMap 3. Vector ▶ Vector 의 특징 java.util.Vector 에서 E 대신 요소로 사용할 특정 타입으로 구체화한다. 여러 객체들을 삽입, 삭제, 검색하는 컨테이너 클래스이

deliciouscode.tistory.com

 

728x90
반응형
728x90
반응형

1. 해시맵 예제

▶ 코드

		HashMap<String,Object> hong = new HashMap<String,Object>();
		HashMap<String,Object> yu = new HashMap<String,Object>();
		
		hong.put("name","홍길동");
		hong.put("age",30);
		hong.put("addr","서울");
		hong.put("phone","010-1234-5678");
		

		yu.put("name","유재석");
		yu.put("age",50);
		yu.put("addr","인천");
		yu.put("phone","010-9876-5432");
		
		ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
		
		list.add(hong);
		list.add(yu);
		
		for(int i=0;i<list.size();i++){
			System.out.print("이름:"+list.get(i).get("name"));
			System.out.println(", 나이:"+list.get(i).get("age"));
		}
  • ArrayList와 HashMap을 혼합하여 데이터를 관리할 수 있다.

 

 

 출력 결과

이름:홍길동, 나이:30, 주소:서울, 번호:010-1234-5678
이름:유재석, 나이:50, 주소:인천, 번호:010-9876-5432

 

 

 

2. 위 예제를 응용한 문제

  • 사람을 관리하는 ArrayList<HashMap<String, Object>> 만들기

    -> 객체 명 : list
    -> 이름, 나이, 성별, 주소를 스캐너로 입력받아서 map 형태로 만든 후 리스트에 저장 (3개)
    -> 저장 후 콘솔에 '이름 : 홍길동, 나이 : 30, 성별 : 남, 주소 : 서울'
    과 같은 형태로 출력

 

 

▶ 코드

		ArrayList<HashMap<String,Object>> list = new ArrayList<HashMap<String,Object>>();
		Scanner scan = new Scanner(System.in);
		
		for(int i=0;i<3;i++){
			HashMap<String,Object> map = new HashMap<String,Object>();
			
			System.out.print("이름을 입력하세요 >> ");
			map.put("name", scan.next());
			System.out.print("나이를 입력하세요 >> ");
			map.put("age", scan.nextInt());
			System.out.print("성별을 입력하세요(남/여) >> ");
			map.put("gender", scan.next());
			System.out.print("주소를 입력하세요 >> ");
			map.put("address", scan.next());
			System.out.println(); //줄바꿈
			
			list.add(map);

		}
		System.out.println(); //줄바꿈
		
		System.out.println("<list>");
		for(int i=0;i<list.size();i++){
			System.out.print("이름:"+list.get(i).get("name"));
			System.out.print(", 나이:"+list.get(i).get("age"));
			System.out.print(", 성별:"+list.get(i).get("gender"));
			System.out.println(", 주소:"+list.get(i).get("address"));
		}
		
		scan.close();
  • 배열 사용 없이 맵 하나만 사용하기 위해 반복문 안에 HashMap을 선언하였다. 밖에서 객체 생성을 하면 마지막 값으로만 값이 저장된다.

 

 

▶ 출력 결과

이름을 입력하세요 >> 홍길동
나이를 입력하세요 >> 30
성별을 입력하세요(남/여) >> 남
주소를 입력하세요 >> 서울

이름을 입력하세요 >> 유재석
나이를 입력하세요 >> 50
성별을 입력하세요(남/여) >> 남
주소를 입력하세요 >> 인천

이름을 입력하세요 >> 박명수
나이를 입력하세요 >> 40
성별을 입력하세요(남/여) >> 여
주소를 입력하세요 >> 경기도


<list>
이름:홍길동, 나이:30, 성별:남, 주소:서울
이름:유재석, 나이:50, 성별:남, 주소:인천
이름:박명수, 나이:40, 성별:여, 주소:경기도

 

 

 

 

 

 

 

[JAVA] ★ Vector, ArrayList, HashMap ★ (16일차)

1. 컬렉션 2. 제네릭 3. Vector 4. ArrayList 5. HashMap 3. Vector ▶ Vector 의 특징 java.util.Vector 에서 E 대신 요소로 사용할 특정 타입으로 구체화한다. 여러 객체들을 삽입, 삭제, 검색하는 컨테이너 클래스이

deliciouscode.tistory.com

 

[JAVA] 해시맵 심화 문제 풀이 (17일차)

문제1 입력 부분 -> 다음과 같이 map에 스캐너로 입력된 값 저장 -> key : name, value : 이름 (ex, 홍길동) -> key : age, value : 나이 (ex, 30) -> key : addr, value : 주소 (ex, 서울) => 해당 map을 list에 저장 삭제 부분

deliciouscode.tistory.com

 

728x90
반응형
728x90
반응형

<오늘의 학습 - 데이터베이스를 관리하는 방법>

1. 컬렉션

2. 제네릭

3. Vector

4. ArrayList

5. HashMap

 

 

3. Vector

▶ Vector <E>의 특징

  1. java.util.Vector
    • <E>에서 E 대신 요소로 사용할 특정 타입으로 구체화한다.
  2. 여러 객체들을 삽입, 삭제, 검색하는 컨테이너 클래스이다.
    • 배열의 길이 제한을 극복한다.
    • 원소의 개수가 넘치면 자동으로 길이를 조절한다.
  3. Vector에 삽입 가능한 것
    • 객체, null
    • 기본 타입은 Wrapper 객체로 만들어 저장한다.
  4. Vector의 객체 삽입
    • 벡터의 맨 뒤에 객체를 추가한다.
    • 벡터 중간에 객체를 삽입할 수 있다.
  5.  Vector의 객체 삭제
    • 임의의 위치에 있는 객체 삭제할 수 있다.
    • 객체 삭제 후 자동 자리 이동

 

 

Vector <E> 클래스의 주요 메소드

메소드 설명
boolean add(E element) 벡터의 맨 뒤에 element 추가
void add(int index, E element) 인덱스 index 위치에 element를 삽입
boolean addAll(Collection<? extends E> c) 컬렉션 c의 모든 요소를 벡터의 맨 뒤에 추가
E elementAt(int index) 인덱스 index의 요소 리턴
E get(int index) 인덱스 index의 요소 리턴
E remove(int index) 인덱스 index의 요소 삭제
boolean remove(Object obj) 객체 obj와 같은 첫 번째 요소를 벡터에서 삭제
void removeAllElements() 벡터의 모든 요소를 삭제하고 크기를 0으로 만듦
void clear() 벡터의 모든 요소 삭제
int size() 벡터가 포함하는 요소의 개수 리턴
Object[] toArray() 벡터의 모든 요소를 포함하는 배열을 리턴
int capacity() 벡터의 현재 용량 리턴
int indexOf(Object obj) obj와 같은 첫 번째 요소의 인덱스를 리턴. 없으면 -1 리턴
boolean isEmpty() 벡터가 비어 있으면 true 리턴
boolean contains(Object obj) 벡터가 지정된 객체 obj를 포함하고 있으면 true 리턴

 

 


예제 1

  • 정수를 다루는 벡터를 생성하고 활용해 보자.

 

main 코드

import java.util.Vector;

//정수만 다루는 벡터를 생성하고 활용하는 예제
public class VectorEx {
	public static void main(String[] args) {
		Vector<Integer> vector = new Vector<Integer>();

		vector.add(5); //5 삽입
		vector.add(4); //4 삽입	
		vector.add(-1); //-1 삽입

		vector.add(2,100);//벡터는 중간에 값을 삽입할 수 있다. 4와 -1 사이에 정수 100을 삽입 

		System.out.println("벡터 내의 요소 객체 수:"+vector.size());
		System.out.println("벡터의 용량:"+vector.capacity());

		
		//벡터의 모든 요소 출력
		System.out.print("벡터의 요소:");
		for(int num:vector)
			System.out.print(num+" ");
		System.out.println(); //줄바꿈

		
		//벡터의 모든 정수의 합
		int sum=0;
		for(int num : vector)
			sum+=num;
		System.out.println("벡터의 모든 정수의 합:"+sum);
	}//main_end
}//VectorEx_end

 

출력 결과

벡터 내의 요소 객체 수:4
벡터의 용량:10
벡터의 요소:5 4 100 -1 
벡터의 모든 정수의 합:108

 

 


 예제 2

  • 문자열을 관리하는 vector를 만들어라.
  • 첫 번째 공간에는 "홍길동" 입력
  • 두 번째 공간에는 "유재석" 입력
  • 세 번째 공간에는 "강호동" 입력
  • "홍길동"과 "유재석" 사이에 "박명수" 입력
  • "홍길동" 삭제
  • 최종적으로 vector에 있는 모든 문자열 출력

 

 main 코드

import java.util.Vector;

public class VectorString {
	public static void main(String[] args) {
		//문자열을 관리하는 vector 객체 생성
		Vector<String> vector = new Vector<String>();
		
		vector.add("홍길동"); //0번째 요소
		vector.add("유재석"); //1번째 요소
		vector.add("강호동"); //2번째 요소
		
		vector.add(1, "박명수"); //0번째 요소와 1번째 요소 사이에 값을 넣음. 기존 요소들은 뒤로 한 칸씩 밀림
		
		vector.remove("홍길동"); //홍길동 삭제
//		or
//		vector.remove(0); // 0번째 인덱스 요소 삭제
		
		//벡터의 모든 문자열 출력
		for(String num:vector)
			System.out.println(num);
//		or
//		for(int i=0;i<vector.size();i++)
//			System.out.println(vector.get(i));
		
	}//main_end
}//VectorString_end

 

출력 결과

박명수
유재석
강호동

 

※ 만약 반복문을 이용하여 특정 단어와 일치하는 값을 모두 지우고 싶다면 인덱스의 맨 끝부터 접근해야 한다. 인덱스의 값을 삭제하면 인덱스가 앞으로 당겨지기 때문에 맨 앞의 인덱스부터 접근한다면 일부 인덱스에 접근할 수 없기 때문이다.

		for(int i=vector.size()-1;i>=0;i--)
			if(vector.get(i).equals("강호동"))
				vector.remove(i);

 

 

 

4. ArrayList

▶ ArrayList <E>의 특징

  1. 벡터와 거의 동일하지만 메소드를 사용할 때 차이가 있다.
  2. 벡터와 달리 스레드 동기화 기능이 없다.
    • 다수 스레드가 동시에 ArrayList에 접근할 때 동기화되지 않는다.
    • 개발자가 스레드 동기화 코드를 작성한다.
  3. java.util.ArrayList, 가변 크기 배열을 구현한 클래스
    • <E>에서 E 대신 요소로 사용할 특정 타입으로 구체화
  4. ArrayList에 삽입 가능한 것
    • 객체, null
    • 기본 타입은 박싱/언박싱으로 Wrapper 객체로 만들어 저장한다.
  5. ArrayList에 객체 삽입
    • 리스트의 맨 뒤에 객체를 추가한다.
    • 리스트의 중간에 객체를 삽입할 수 있다.
  6. ArrayList의 객체 삭제 
    • 임의의 위치에 있는 객체를 삭제할 수 있다.

 

 

ArrayList <E> 클래스의 주요 메소드 (벡터와 매우 유사하다)

메소드 설명
boolean add(E element) ArrayList의 맨 뒤에 element 추가
void add(int index, E element) 인덱스 index 위치에 element를 삽입
boolean addAll(Collection<? extends E> c) 컬렉션 c의 모든 요소를 ArrayList의 맨 뒤에 추가
E elementAt(int index) 인덱스 index의 요소 리턴
E get(int index) 인덱스 index의 요소 리턴
E remove(int index) 인덱스 index의 요소 삭제
boolean remove(Object obj) 객체 obj와 같은 첫 번째 요소를 ArrayList에서 삭제
void clear() ArrayList의 모든 요소 삭제
int size() ArrayList가 포함하는 요소의 개수 리턴
Object[] toArray() ArrayList의 모든 요소를 포함하는 배열을 리턴
int indexOf(Object obj) obj와 같은 첫 번째 요소의 인덱스를 리턴. 없으면 -1 리턴
boolean isEmpty() ArrayList가 비어 있으면 true 리턴
boolean contains(Object obj) ArrayList가 지정된 객체 obj를 포함하고 있으면 true 리턴

 

 


▶ 예제 1

  • ArrayList 문자열을 관리하는 객체 생성
  • Scanner로 문자열을 5개 입력받아서 Arraylist 객체에 저장
  • ArrayList 객체에 있는 문자열 출력
  • 가장 긴 문자열을 찾아 출력

 

 main 코드

import java.util.ArrayList;
import java.util.Scanner;

public class ArrayListEx {
	public static void main(String[] args) {
		//문자열을 관리하는 ArrayList 객체 생성
		ArrayList<String> arraylist = new ArrayList<String>();
		
		Scanner scan = new Scanner(System.in);
		
		//문자열을 5개 입력받아 ArrayList 객체에 저장
		for(int i=0;i<5;i++){
			System.out.print((i+1)+"번째 문자열을 입력하세요 >> ");
			arraylist.add(scan.next());
		}
		System.out.println(); //줄바꿈
		
		//출력
		for(int i=0;i<arraylist.size();i++)
			System.out.println("arraylist의 "+(i+1)+"번째 문자열:"+arraylist.get(i));
		System.out.println(); //줄바꿈
		
		//가장 긴 문자열을 찾아 출력
		int longIndex = 0;
		for(int i=1;i<arraylist.size();i++)
			if(arraylist.get(longIndex).length() < arraylist.get(i).length())
				longIndex=i;
		
		System.out.println("가장 긴 문자열:"+arraylist.get(longIndex));
		
		scan.close();
	}//main_end
}//ArrayListEx_end

 

출력 결과

1번째 문자열을 입력하세요 >> Kim
2번째 문자열을 입력하세요 >> Lee
3번째 문자열을 입력하세요 >> Park
4번째 문자열을 입력하세요 >> Jo
5번째 문자열을 입력하세요 >> Han

arraylist의 1번째 문자열:Kim
arraylist의 2번째 문자열:Lee
arraylist의 3번째 문자열:Park
arraylist의 4번째 문자열:Jo
arraylist의 5번째 문자열:Han

가장 긴 문자열:Park

 

 


▶ 예제 2

  • ArrayList Integer 관리하는 객체 생성
  • Scanner로 숫자 5개를 입력받아 저장
  • 가장 작은 숫자를 찾아서 출력
  • 중복이 있으면 중복 개수를 출력
  • ex) 3,5,3,6,9
    가장 작은 수 : 3
    중복 개수 : 2

 

 main 코드

		ArrayList<Integer> a = new ArrayList<Integer>();
		Scanner scan = new Scanner(System.in);

		for(int i=0;i<5;i++){
			System.out.print((i+1)+"번째 숫자를 입력하세요 >> ");
			a.add(scan.nextInt());
		}

		//최솟값과 중복값 구하기
		int minIndex=0, count=1;
		for(int i=0;i<a.size();i++){
			if(i!=0 && a.get(minIndex)>a.get(i)) //Math.min(min, a.get(i));
				minIndex=i;
			for(int j=i+1;j<a.size();j++)
				if(a.get(i)==a.get(j)) //중복
					count++;
		}

		System.out.println("가장 작은 수:"+a.get(minIndex));
		System.out.println("중복 개수:"+count);

		scan.close();

 

 출력 결과

1번째 숫자를 입력하세요 >> 3
2번째 숫자를 입력하세요 >> 5
3번째 숫자를 입력하세요 >> 3
4번째 숫자를 입력하세요 >> 6
5번째 숫자를 입력하세요 >> 9
가장 작은 수:3
중복 개수:2

 

 


▶ 예제 3

  • ArrayList Integer 관리하는 객체 생성
  • Scanner로 숫자 5개를 입력받아 저장
  • 가장 작은 숫자와 가장 큰 숫자의 위치 바꾸기
  • ex) 5,3,7,6,9 → 5,9,7,6,3

 

 main 코드

		ArrayList<Integer> list = new ArrayList<Integer>();
		Scanner scan = new Scanner(System.in);

		for(int i=0;i<5;i++){
			System.out.print((i+1)+"번째 숫자를 입력하세요 >> ");
			list.add(scan.nextInt());
		}

		//최솟값, 최댓값 찾기
		int minIndex=0, maxIndex=0;
		for(int i=1;i<list.size();i++){
			if(list.get(minIndex)>list.get(i))
				minIndex=i;
			else if(list.get(maxIndex)<list.get(i))
				maxIndex=i;
		}


		System.out.print("변경 전 ArrayList:");
		for(int num:list)
			System.out.print(num+" ");
		System.out.println(); //줄바꿈

		 //인덱스 오류를 막기 위해 낮은 배열의 인덱스를 minIndex라고 가정한다.
		if(minIndex>maxIndex){
			int temp = minIndex;
			minIndex = maxIndex;
			maxIndex = temp;
		}

		//값 변경
		//ex)5 3 7 6 9
		list.add(minIndex, list.get(maxIndex));	//5 9 3 7 6 9
		list.remove(maxIndex+1); //5 9 3 7 6
		list.add(maxIndex+1, list.get(minIndex+1)); //5 9 3 7 6 3
		list.remove(minIndex+1); // 5 9 7 6 3


		System.out.print("변경 후 ArrayList:");
		for(int num:list)
			System.out.print(num+" ");
		
		scan.close();

 

 출력 결과

1번째 숫자를 입력하세요 >> 5
2번째 숫자를 입력하세요 >> 3
3번째 숫자를 입력하세요 >> 7
4번째 숫자를 입력하세요 >> 6
5번째 숫자를 입력하세요 >> 9
변경 전 ArrayList:5 3 7 6 9 
변경 후 ArrayList:5 9 7 6 3
1번째 숫자를 입력하세요 >> 5
2번째 숫자를 입력하세요 >> 9
3번째 숫자를 입력하세요 >> 7
4번째 숫자를 입력하세요 >> 6
5번째 숫자를 입력하세요 >> 3
변경 전 ArrayList:5 9 7 6 3 
변경 후 ArrayList:5 3 7 6 9

 

 

 

5. HashMap

▶ HashMap <K, V>의 특징

  1. 키(key)와 값(value)의 쌍으로 구성되는 요소를 다루는 컬렉션
    • java.util.HashMap
    • K는 키로 사용할 요소의 타입, V는 값으로 사용할 요소의 타입 지정
    • 키와 값이 한 쌍으로 삽입된다.
    • 키는 해시맵에 삽입되는 위치 결정에 사용된다.
    • 값을 검색하기 위해서는 반드시 키를 이용한다.
  2. 삽입, 삭제, 검색이 빠른 특징이 있다.
    • 요소 삽입 : put() 메소드
    • 요소 검색 : get() 메소드
  3. ex) HashMap<String, String> 생성, 요소 삽입, 요소 검색

 

 

▶ HashMap <K, V>의 주요 메소드

메소드 설명
V put(K key, V key) key와 value 쌍을 해시맵에 저장
V get(Object key) 지정된 ket의 값 리턴. 키가 없으면 null 리턴
V remove(Object key) 지정된 key를 찾아 키와 값 모두 삭제
void clear() 해시맵의 모든 요소 삭제
boolean containsKey 지정된 key를 포함하고 있으면 true 리턴
boolean containsValue(Object value) 지정된 값에 일치하는 키가 있으면 true 리턴
boolean isEmpty() 해시맵이 비어 있으면 true 리턴
Set<K> KeySet() 해시맵의 모든 키를 담은 set<K> 컬렉션 리턴
int size() HashMap에 포함된 요소의 개수 리턴

 

 


▶ 예제

  • 이름(키)이 있으면 점수를 출력
  • 없는 사람을 입력하면 그런 사람 없음 출력
  • "김성동", 97
    "황기태", 88
    "김남윤", 98
    "이재문", 70
    "한원선", 99 //점수 저장

 

▷ main 코드

import java.util.HashMap;
import java.util.Scanner;

public class HashMapEx {
	private static final Integer NULL = null;

	public static void main(String[] args) {
		HashMap<String,Integer> student = new HashMap<String,Integer>();

		// 5개의 점수 저장
		student.put("김성동", 97);
		student.put("황기태", 88);
		student.put("김남윤", 98);
		student.put("이재문", 70);
		student.put("한원선", 99);

		Scanner scan = new Scanner(System.in);

		System.out.print("점수를 받아올 이름을 입력하세요 >> ");
		String s = scan.next(); //출력할 때 이름도 나타내기 위해 변수 s 이용
		Integer key = student.get(s); //Integer는 NULL값을 받을 수 있다.
		
		if(key == NULL)
			System.out.println("그런 사람 없음");
		else
			System.out.println(s+" 학생의 점수:"+key);
		
//		or
//		if(student.containsKey(s)){
//			System.out.println(s+" 학생의 점수:"+student.get(s));
//		} else {
//			System.out.println("그런 사람 없음");
//		}
		
		scan.close();
        
	}//main_end
}//HashMapEx_end

 

 출력 결과

점수를 받아올 이름을 입력하세요 >> 김남윤
김남윤 학생의 점수:98
점수를 받아올 이름을 입력하세요 >> 홍길동
그런 사람 없음

 

 

 

 

 


2023년 6월 7일 수요일

<16일차 수업 후기>

Vector. ArrayList. HashMap 은 처음 접해보았다. 낯설어서 자신감이 떨어졌었는데 파이썬의 리스트와 비슷해서 생각보다 어렵지 않게 문제를 풀 수 있었다. 매번 파이썬을 덕을 보는 것을 보니 공부하길 잘했다는 생각이 들었다.

HashMap을 공부하면서 데이터 객체를 키값쌍의 형태로 표현하는 JSON이 생각났다. 두 개의 차이가 궁금해서 찾아봤는데 Java에서 해시맵을 JSON 객체로 변환하는 방법이 있을 정도로 유사하다는 것을 깨달았다. 정보처리기사를 공부하면서 JSON과 같은 용어들을 단순히 외우기만 했었는데, 실습을 해보니 더 이해가 잘되는 것 같다.

강사님께서는 지금까지 학습한 내용 중에 HashMap과 ArrayList가 가장 중요하다고 말씀하셨다. 가장 중요한 내용인데 많이 접해보지 못했기 때문에 강사님께서 보내주신 자료를 보며 더 많은 시간을 투자하여 공부해야겠다.

728x90
반응형

+ Recent posts