본문 바로가기
코리아 IT아카데미/Java

19일차 | 자바에서 제공되는 자료구조 구현 클래스들 - 컬레션 프레임워크

by Sharon kim 2021. 11. 11.

DataStructure 를 쓸 때 기억해야할 3가지

List 인터페이스

객체를 순서에 따라 저장하고 관리하는 데 필요한 메서드가 선언된 인터페이스.

자료구조 리스트(배열, 연결리스트)의 구현을 위한 인터페이스.

중복을 허용함

Map 인터페이스 

쌍(pair)로 이루어진 객체를 관리하는 데 사용하는 메서드들이 선언된 인터페이스.

객체는 key-value의 쌍으로 이루어짐

key는 중복을 허용하지 않음

 

Set 인터페이스

순서와 관계없이 중복을 허용하지 않고 유일한 값을 관리하는 데 필요한 메서드가 선언됨.

아이디, 주민번호, 사번 등을 관리하는 데 유용.

저장된 순서와 출력되는 순서는 다를 수 있음.

set계열은 주머니

DataStructure1_List

package ch01;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

class Student {
	String name;
	int grade;

}

public class DataStructureTest1 {

	public static void main(String[] args) {

		List list0;

		// 순서가 있고(인덱스가 있다) 중복이 가능하다.

		// int의 클래스화 - 래퍼클래스 Integer
		ArrayList<Integer> list = new ArrayList();
		ArrayList<Student> member = new ArrayList<Student>();
		ArrayList<Integer> num = new ArrayList<>();

		// 선언과 동시에 초기화
		ArrayList<Integer> list2 = new ArrayList<Integer>(Arrays.asList(1, 2, 3));

		// 값 추가 방법

		list.add(3); // index 0
		list.add(null); // index 1
		list.add(1, 10); // index 1번째에 10을 삽입 (null은 인덱스 2번으로 밀려 난다.)

		System.out.println("값 확인 : " + list);
		// 값 확인 : [3, 10, null] 원래 주소값이 나와야 하는데 잘나오는 것은 toString 메서드를 정의해서

		// 값 삭제 방법
		list.remove(2);
		System.out.println("값 삭제 확인 : " + list);

//		list.clear();
		System.out.println("값 전체 삭제 확인 : " + list);

		// 값 출력 방법
		System.out.println("값 출력 방법 : " + list.get(1));

		for (Integer i : list) {
			System.out.println("for 사용방법 : " + i);// 3 ,10 elements 요소 출력
		}

		// while 사용방법(Iterator, hasNext, .next())
		// 요소 순회(반복자) 컬렉션 프레임워크에 저장된 요소들을 하나씩 차례로 참조하는 것

		Iterator<Integer> iter = list.iterator();
		// hasNext가 있으면 true, 없으면 false
		while (iter.hasNext()) {
			System.out.println("while 사용 방법 : " + iter.next());
		}

		// 값 검색 방법
		System.out.println(list.contains(1));
		// list안에 정수값 1이 있는가?
		System.out.println(list.contains(10));

		// 값이 있으면 index의 번호를 반환, 없으면 -1을 반환하는 녀석.
		System.out.println(list.indexOf(10));// 1번째 인덱스에 있다.
		System.out.println(list.indexOf(300));// 없으면 -1을 반환한다.
		System.out.println(list.indexOf(3));// 3은 0번째 인덱스에 있다.

		// 문제 1
		// 이름을 입력하면 names 리스트에 저장, while 문 반복
		// 0번 눌러서 종료 되면 화면에 입력한 이름을 뿌려 주세요
		ArrayList<String> names = new ArrayList<String>();

		// Scanner 사용
		
	
		Scanner scanner = new Scanner(System.in);
		System.out.println("이름을 입력하세요");
		String userInput = scanner.nextLine();
	
		//해보기
//		do {
//			
//		}while("end");
//		while(flag) {
//			userInput == names[];
//			
//			if(userInput==0) {
//				flag = false;
//			}
//		}


	}// end of main

}// end of class

DataStructure2_Set

package ch01;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Random;
import java.util.Set;

public class DataStructureTest2 {

	public static void main(String[] args) {
		
		Set set0;
		//순서가 없다. 중복값 불가
		//HashSet 가장 많이 사용
		
		HashSet <Integer> set1 = new HashSet<>();
		set1.add(1);
		set1.add(1);//중복값
		set1.add(2);
		set1.add(3);
		set1.add(3);//중복값
		
		System.out.println("set1 : " + set1);
		
		//size 값
		System.out.println("사이즈 확인 : " + set1.size());
		
		//삭제
		set1.remove(1);
//		set1.clear();
		System.out.println(set1);
		
//		for (int i = 0; i < set1.size(); i++) {
//			System.out.println("set1 값 확인 : " + i);
//		}
		
		//while문 사용 방법
		Iterator<Integer> iter = set1.iterator();
		while(iter.hasNext()) {
			System.out.println("값 확인 : " + iter.next());
		}
		
		//내부에 값이 있는 지 확인
		System.out.println(set1.contains(1));
		System.out.println(set1.contains(3));
		
		
		HashSet<Integer> set2 = new HashSet<>();
		
		// set2. 사이즈가 6개면 완료
		//아니면 한번 더 동작
		//나
//		while(set2.size() < 6) {
//			set2.add(getRandomNumber());
//		}
		//강사님
		boolean flag = true;
		
		while(flag) {
			set2.add(getRandomNumber());
			if(set2.size() == 6) {
				flag = false;
		}
	}
		System.out.println(set2);
		System.out.println(set2.size());
		
	}//end of main
	
	public static int getRandomNumber() {
		
		Random random = new Random();
		int value = random.nextInt(45)+1;
		return value;
	}
	
}//end of class

DataStructure3_Map

package ch01;

import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import java.util.Map.Entry;

public class DataStructureTest3 {

	public static void main(String[] args) {
		//전공생은 한 학기동안 배움, 사용하는 것은 몇 가지 안됨
		
		Map map0;
		
		//key 와 value 구조로 데이터를 저장한다.
					
		HashMap<String, String> map1 = new HashMap<String, String>();
		
		//null 값을 허용하지 않는다.
		Hashtable<String, String> map2 = new Hashtable<>();
		
		map1.put("A01", "김포공항 정문");
		map1.put("A02", "김포공항 후문");
		map1.put("A03", "김포공항 로비");
		map1.put("B01", "인천공항 정문");
		map1.put("B02", "인천공항 후문");
		map1.put("B03", "인천공항 로비");
		map1.put("C01", null);
		System.out.println(map1);
		
		
//		map2.put("D01", null);
		System.out.println(map2);
		//java.lang.NullPointerException 오류
		
		//값을 출력 방법
		System.out.println("--------------------");
		System.out.println(map1.get("A01"));
		System.out.println(map1.get("A02"));
		System.out.println(map1.get("A03"));
		
		//삭제 방법
		System.out.println(map1.remove("C01"));
		System.out.println("--------------------");
//		map1.clear();//전체 삭제
		System.out.println(map1);
		
		//사이즈 확인 방법
		System.out.println(map1.size());
		
		//for 문 사용방법
		//1. java.util.Map.Entry
		for (Entry <String, String> entry : map1.entrySet()) {
			System.out.println("key : " + entry.getKey() + ", value : " + entry.getValue());
		}
		System.out.println("--------------------");
		//2. map1.keySet()
		for (String key : map1.keySet()) {
			System.out.println(key + " : " + map1.get(key));
		}
		
	}//end of main
}//end of class

HashMap

Phone

package ch02;

public class Phone {
	
	String name;
	String address;
	String telephone;
	
	public Phone(String name, String address, String telephone) {
		this.name = name;
		this.address = address;
		this.telephone =telephone;
	}
}//end of class phone

TelManagement

package ch02;

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

public class TelManagement {
 
	// 추가 static insert
	public static void insert(HashMap < String, Phone > map) {
		Phone phone;

		String name, address, telephone;

		Scanner s = new Scanner(System.in);
		System.out.println("이름 >> :");
		name = s.next();
		System.out.println("주소 >> :");
		address = s.next();
		System.out.println("전화번호 >> :");
		telephone = s.next();
		
		phone = new Phone(name, address, telephone);

		map.put(phone.name, phone);
		System.out.println("등록이 완료");
	}
	// 삭제
	public static void delete(HashMap < String, Phone > map) {
		//key는 이름을 입력 받아서 사용
		String delName;
		
		Scanner s = new Scanner(System.in);
		System.out.println("이름 >>");
		delName = s.next();
		if(map.containsKey(delName)) {
			//삭제
			map.remove(delName);
			System.out.println(delName + "은 등록되지 않은 사람입니다.");
		}
		
	}
	// 찾기
	public static void search(HashMap < String, Phone > map) {
		//key 이름을 입력 받아서 찾고 화면에 보여 주세요
		String searchName;
		
		Scanner s = new Scanner(System.in);
		System.out.println("이름 >>");
		searchName = s.next();
		if(map.containsKey(searchName)) {
			System.out.println(searchName + map.get(searchName).address);
		}else {
			System.out.println(searchName + "은 등록되지 않은 사람입니다.");
		}
	}

	// 전체보기
	public static void showInfo(HashMap < String, Phone > map) {
		//화면에 전체 정보를 뿌려 주는 기능을 만들어 주세요
		
		Set<String> names = map.keySet();
		
		Iterator<String> it = names.iterator();
		while(it.hasNext()) {
			String name = it.next();
			Phone person = map.get(name);
			System.out.println(name + " " + person.telephone);
		}
	}

	public static void main(String[] args) {
		
		HashMap < String, Phone > map = new HashMap<String, Phone>();
		
		//임시 데이터 만들어놓기
		map.put("홍길동", new Phone("홍길동", "부산시","010-1111-1111"));
		map.put("이순신", new Phone("이순신", "부산시2","010-2222-2222"));
		

		//메서드 이용해보기
//		insert(map);
//		delete(map);
//		search(map);
//		showInfo(map);
		
		//실행에 흐름 만들어 보기

		System.out.println("----------------");
		System.out.println("전화번호 관리 프로그램");
		System.out.println("----------------");
		
		
		//스캐너 이용해서
		
		int menu;
			
		while(true) {
			System.out.println("추가 0, 삭제 1, 찾기 2, 전체보기는 3, 종료 4");
			Scanner s = new Scanner(System.in);
			menu = s.nextInt();
			
			switch (menu) {
			case 0:
				insert(map);
				break;
			case 1:
				delete(map);
				break;
			case 2:
				search(map);
				break;
			case 3:
				showInfo(map);
				break;
			case 4:
				System.out.println("프로그램을 종료합니다.");
				return;
			default:
				System.out.println("잘못입력했습니다. 다시 입력해주세요.");
				break;
			}
		}
//		System.out.println("========================");
//		System.out.println(map);
		
	}// end of main

}// end of class