romworld

Map , Set 본문

JAVA/개념정리

Map , Set

inderrom 2022. 10. 28. 13:58

Map

package kr.or.ddit.basic;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class MapTest {

	public static void main(String[] args) {
		/*
		 * Map객체 ==> key값과 value값을 한 쌍으로 관리하는 객체 - key값은 중복을 허용하지 않고 순서(index)가 없다.
		 * (Set의 특징을 갖는다.) - value값은 중복을 허용한다.
		 */
		HashMap<String, String> map = new HashMap<String, String>();

		// 자료 추가 ==> put(key값 ,value값)
		map.put("name", "홍길동");
		map.put("addr", "대전");
		map.put("tel", "010-1234-5678");

		System.out.println("map => " + map);

		// 자료 수정 ==> 데이터를 추가할 때 key값이 같으면 나중에 입력한 값이 저장된다.
		map.put("addr", "서울");
		System.out.println("map => " + map);

		// 자료 삭제 ==> remove(key값) : key값이 같은 데이터를 찾아서 삭제한다.
		// ==> 반환값 : 삭제된 데이터의 value값이 반환된다.
		/*
		 * String removeTel = map.remove("tel"); System.out.println("map => " + map);
		 * System.out.println("삭제된 데이터 : " + removeTel);
		 */

		// 자료 읽기 ==> get(key값)
		// ==> 해당 key값과 같이 저장된 value값이 반환된다.

		System.out.println("이름 : " + map.get("name"));
		System.out.println();

		// key값의 존재 여부를 검사하는 메서드 : containsKey(key값)
		// ==> 해당 key값이 있으면 true, 없으면 false
		System.out.println("tel 키값의 존재 여부" + map.containsKey("tel"));
		System.out.println("age 키값의 존재 여부" + map.containsKey("age"));
		System.out.println();
		System.out.println("--------------------------------");

		// ----------------------------------------------------------------------

		// Map에 저장된 모든 데이터를 읽어와 처리하기

		// 방법1) 모든 key값을 읽어와서 처리하는 방법 ==> keySet()메서드 이용
		// - keySet()메서드 ==> Map의 모든 key값을 읽어와 Set형으로 반환한다.

		// 방법1-1) Iterator이용하기 --- 주로 많이 쓰이는 방법
		Set<String> keySet = map.keySet();

		Iterator<String> it = keySet.iterator();
		while (it.hasNext()) {
			String key = it.next(); // 키값 가져오기
			String value = map.get(key);
			System.out.println(key + " : " + value);
		}
		System.out.println("--------------------------------");

		// 방법1-2) 향상된 for문 이용하기 -- 주로 많이 쓰이는 방법
		for (String key : map.keySet()) { // keySet 써줘도 됨 변수로 저장해놔서..
			String value = map.get(key);
			System.out.println(key + " : " + value);
		}
		System.out.println("---------------------------------");

		// 방법2) 모든 value값만 읽어와 처리하는 방법
		// ==> values()메서드를 이용한다.
		for (String value : map.values()) {
			System.out.println(value);
		}
		System.out.println("---------------------------------");

	}
}

Set

package kr.or.ddit.basic;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;

public class SetTest {

	public static void main(String[] args) {
		/*
		 * - List와 Set의 차이점 1. List - 데이터의 순서(index)가 있다. - 중복되는 데이터를 저장할 수 있다.
		 * 
		 * 2. Set - 데이터의 순서(index)가 없다. - 중복되는 데이터를 저장할 수 없다.
		 */

		HashSet hs1 = new HashSet();

		// Set에 데이터를 추가하는 메서드 ==> add(추가할 데이터)
		hs1.add("DD");
		hs1.add("AA");
		hs1.add(2);
		hs1.add("CC");
		hs1.add("BB");
		hs1.add(1);
		hs1.add(3);

		System.out.println("Set의 개수 : " + hs1.size());
		System.out.println("hs1 ==> " + hs1);

		// Set에 중복되는 데이터를 추가하면 false를 반환하고 데이터는 추가되지 않는다.
		boolean isAdd = hs1.add("FF");
		System.out.println("데이터가 중복되지 않을 때 : " + isAdd); // 는 true가 나옴
		System.out.println("hs1 ==> " + hs1);
		System.out.println();

		isAdd = hs1.add("CC");
		System.out.println("데이터가 중복될 때 : " + isAdd);
		System.out.println("hs1 ==> " + hs1);
		System.out.println();

		// Set의 데이터 수정하기
		// ==> 수정하는 명령이 따로 없기 때문에 해당 자료를 삭제한 후에 추가하는 방식을 사용한다.

		// 삭제하는 메서드 : remove(삭제할데이터) ==> 반환값 : 삭제성공(true), 삭제실패(false)
		// clear() ==> 전체 자료 삭제

		// 예) "FF"데이터를 "EE"로 변경하기
		hs1.remove("FF");
		System.out.println("삭제 후 hs1 ==> " + hs1);
		hs1.add("EE");
		System.out.println("hs1 ==> " + hs1);
		System.out.println();

		/*
		 * hs1.clear(); System.out.println("hs1 ==> " + hs1); System.out.println();
		 */

		/*
		 * - Set의 데이터는 순서(index)가 없기 때문에 List처럼 데이터를 하나씩 불러 올 수 없다. 그래서 데이터를 하나씩 얻기 위해서는
		 * Iterator형 객체로 변환해야 한다.
		 * 
		 * - Set형의 데이터들을 Iterator형 객체로 변환하는 메서드 ==> iterator()
		 */
		Iterator it = hs1.iterator(); // Set형 데이터를 Iterator형으로 변환하기

		// Iterator 객체의 hasNext()메서드
		// ==> Iterator에서 데이터를 가르키는 포인터의 담음 번째에 있는지 검사한다.
		// 데이터가 있으면 true, 없으면 false를 반환한다.
		while (it.hasNext()) {
			// Iterator객체의 next()메서드
			// ==> Iterator의 포인트를 다음 번째 위치로 이동시킨 후 그 자리의 데이터를 반환한다.
			System.out.println(it.next());
		}

		System.out.println("----------------------------------");
		System.out.println();

		// 향상된 for문 이용하기
		for (Object data : hs1) {
			System.out.println(data);
		}
		System.out.println("----------------------------------");

		/*
		 * 우리반 학생들 중 번호를 이용하여 추첨하는 프로그램을 작성해 보자. 번호는 1번부터 25번까지 있고, 추첨할 인원은 3명이다 (단, 중복
		 * 추첨을 불가하다) 당첨자를 출력하시오
		 */
		HashSet<Integer> testSet = new HashSet<Integer>();

		// 난수 만들기
		// 최소값~최대값 사이의 정수형 난수 만들기

		// (int)(Math.random() * (최대값 - 최소값 + 1) + 최소값)
		// nextInt((최대값 - 최소값 + 1) ) + 최소값;

		/*
		 * // ==> 35~40 사이의 난수 만들기 Random rnd = new Random(); for(int i =1; i<15; i++) {
		 * int data = rnd.nextInt((40-35+1)) + 35; //요즘 방식 //int data =
		 * (int)(Math.random() * (40-35+1) + 35); 옛날 방식 System.out.println(data); }
		 */
		while (testSet.size() < 3) { // (중복된 걸 안나오게 하려면 while) 세개가 차면 반복문이 끝남 (인원 3명이니까)
			int data = (int) (Math.random() * (25 - 1 + 1) + 1);
			testSet.add(data);
		}
		System.out.println("당첨자 번호 : " + testSet);
		System.out.println();

		// Set유형의 자료를 List형으로 변환하기
		ArrayList<Integer> testList = new ArrayList<Integer>(testSet);

		System.out.println("List 데이터 출력");
		for (int i = 0; i < testList.size(); i++) {
			System.out.println(testList.get(i));
		}
	}
}

'JAVA > 개념정리' 카테고리의 다른 글

Args  (0) 2022.10.28
Properties  (0) 2022.10.28
Equals, HashCode  (0) 2022.10.28
ArrayList  (0) 2022.10.28
정렬(Comparable, Comparator)  (0) 2022.10.28
Comments