본문 바로가기
개발자/백엔드 웹 개발자 과정(국비)

2022년 12월 07일 _ 21회차 (collection, generic,vector,hashtable)

by 초응 2022. 12. 7.

[Collection(컬렉션)]

배열 : 저장공간이 정해져있다. 하지만 데이터는 유동적이다.
이것을 (배열의 단점을) 보완하기 위해 만든것이 컬렉션이다.

컬렉션 : 데이터를 효율적으로 사용하기 위해 무한적으로 객체데이터를 저장하는 방식의 기술(단, 기본데이터는 기억시킬 수 없다.)

 

컬렉션 구조 : 자료구조인 배열, 리스트, 스택, 큐, 해시테이블을 컬렉션클래스로 완성해서 제공한다.

컬렉션클래스는  Collection인터페이스로부터 구현되었기때문에 해당 인터페이스의 주요 메소드를 이용할 수 있다.

 

[Vector]

Object 데이터를 기억하며 원소가 가득차면 자동으로 저장영역을 늘려주는 가변길이의 배열이다.

(필요에 따라서 늘리거나 줄이거나 할 수가 있다.)

 

package day21;
import java.util.*;
public class VectorTest {

	public static void main(String[] args) {

		//Vector (int initialCapacity, int capacityIncrement)
		//initialCapacity - Vector 의 초기 용량
		//capacityIncrement - 벡터가 오버플로우 했을 때의 용량의 증가량
		
		/*		배열			|		컬렉션		
		 * 	-------------------------------------
		 * 		고정크기		|		가변적크기
		 * 	기본자료형 & 레퍼런스 | 		레퍼런스만
		 * 	동종데이터만		|		타종간 데이터 저장 가능 ==>다형성과 상속

		 * */
		
		
		Vector v = new Vector(3,4); //초기값 3, 초기 공간이 부족하면 4개씩 증가하겠다.
		System.out.println("v의 총 크기:"+ v.capacity()); //capacity : 새로운 용량을 돌려줌.
		System.out.println("v의 데이트 크기:"+v.size());
		
		for(int i=1;i<=9;i++) {
			v.add(new Integer(i)); //오토박싱(autoboxing) :기본자료형을 레퍼런스자료형으로 자동으로 변환해주는것.
		}
		
		System.out.println("v의 총 크기:"+v.capacity());
		System.out.println("v의 데이터 크기 : "+v.size());
		
		
		v.add(1.10);
		v.add(new Double(2.20));
		v.add("Hello");
		System.out.println("v의 총 크기:"+v.capacity());
		System.out.println("v의 데이터 크기 : "+v.size());
		
		for(int i=0;i<v.size();i++) {
		System.out.println("v의 "+i+"번째 인덱스 데이터:"+v.get(i));
		}
		
		//6번째 인덱스의 값을 변수에 담아서 출력
		int temp = (int)v.get(6); // 언박싱(unboxing)기본형 >레퍼런스자료형으로 자동으로 변환해주는것.
		Integer temp2 = (Integer)v.get(6);
		System.out.println("temp="+temp);
		System.out.println("temp2="+temp2);
		
		/*제네릭*/
		Vector<String> v2 = new Vector<String>();
		v2.add("java");
		v2.add("jsp");
		v2.add("web");
		v2.add("html");
		
		for(int i=0;i<v2.size();i++) {
			String test = v2.get(i);
			System.out.println(test);
		}
	}

}

*Autoboxing (오토박싱) : 레퍼런스 자료형을 기본형으로 자동으로 변환해주는것.

*unboxing (언박싱) : 기본형을 레퍼런스 자료형으로 자동으로 변환해 주는 것.

 

배열 컬렉션
고정 크기 가변적크기
기본자료형 & 레퍼런스 레퍼런스만
동종데이터만 타종간 데이터 저장 가능 (다형성과 상속성)

 

Vector = ArrayList

package day21;
import java.util.*;
public class ArrayListTest {

	public static void main(String[] args) {
		
		ArrayList<Integer>arr = new ArrayList<Integer>(); //int로 쓰지않게 주의.
		
		arr.add(10);
		arr.add(30);
		arr.add(20);
		arr.add(40);
		arr.add(70);
		
		
		for(int i=0;i<arr.size();i++) {
			int temp = arr.get(i);
			System.out.println(temp);
		}

	}

}


[Generic(제네릭)]

컬렉션들은 기본적으로 객체를 저장할때 Object타입으로 저장하기 때문에 다시 빼내 올때는 해당 타입으로 변환해주어야 하지만. 1.5버전부터 제네릭이라는 기능이 생기면서 컬렉션에 해당하는 타입을 지정할 수 있게 됨.


[Hashtable]

-해시데이블은 인덱스가 아닌 Key값으로 원하는 테이블 항목을 검색하는 클래스.

-항목을 검색하기 때문에 검색속도가 빠르다.

-해시테이블은  key값과 value 값이 한쌍이다.

package day21;
import java.util.*;
public class MapTest {

	public static void main(String[] args) {

		HashMap<String,String> map = new HashMap<String,String>();
		
		map.put("one", "하나");
		map.put("two", "둘");
		map.put("plate", "접시");
		map.put("apple", "사과");

		System.out.println("one이 뭐야?"+map.get("one"));
		System.out.println("apple이 뭐야?"+map.get("apple"));
		System.out.println("two는 뭐야?"+map.get("two"));
	
		map.put("apple", "아이폰");
		System.out.println("apple이 뭐야?"+map.get("apple"));
	}

}

실습.

package day21;
import java.util.*;
class Human{
	
	String name;
	int age;
	
	public void setInfo(Scanner sc) {
		System.out.print("이름:");
		name = sc.nextLine();
		System.out.print("나이:");
		age = sc.nextInt();
		sc.nextLine();
	}
	public void getInfo() {
			System.out.println("이름:"+name);
			System.out.println("나이:"+age);
	}
}

class Teacher extends Human{
	String text;
	
	@Override
	public void setInfo(Scanner sc) {
		System.out.println("===선생님 정보 입력===");
		super.setInfo(sc);
		System.out.print("과목:");
		text = sc.nextLine();
	}
	@Override
	public void getInfo() {
		System.out.println("===선생님 정보 보기===");
		super.getInfo();
		System.out.println("과목:"+text);
	}
}

class Student extends Human{
	
	String major;
	
	@Override
	public void setInfo(Scanner sc) {
		System.out.println("===학생 정보 입력===");
		super.setInfo(sc);
		System.out.print("전공:");
		major = sc.nextLine();
	}
	
	@Override
	public void getInfo() {
		System.out.println("===학생 정보 보기===");
		super.getInfo();
		System.out.println("전공:"+major);
	}
}


public class HaksaTest {
	ArrayList <Human> arr;
	
	
	public HaksaTest() {
		arr = new ArrayList<Human>();
	}
	public void printmenu() {
		System.out.println("===================");
		System.out.println("학사 관리 프로그램 v2.0");
		System.out.println("-------------------");
		System.out.println("1.선생님 정보 입력");
		System.out.println("2.학생 정보 입력");
		System.out.println("3.선생님 정보 확인");
		System.out.println("4.학생 정보 확인");
		System.out.println("5.모든 정보 확인");
		System.out.println("6.종료");
		System.out.println("===================");
	}
	
	public void InputTeacher(Scanner sc) {
		Teacher t = new Teacher();
		t.setInfo(sc);
		arr.add(t);
	}
	
	public void InputStudent(Scanner sc) {
		Student s = new Student();
		s.setInfo(sc);
		arr.add(s);
	}
	public void printAllList() {
		for(int i=0;i<arr.size();i++) {
			Human temp = arr.get(i);
			//arr.get(i);
			temp.getInfo();
			
			//arr.get(i).getInfo();
		}
	}
	
		public void printTeacher() {
		
			for(int i=0;i<arr.size();i++) {
			if(arr.get(i) instanceof Teacher) {
				Human temp = arr.get(i);
				temp.getInfo();
			}
				//arr.get(i).getInfo();
			}
			
	}
		public void printStudent() {
			for(int i=0;i<arr.size();i++) {
				if(arr.get(i)instanceof Student) {
					Human temp = arr.get(i);
					temp.getInfo();
				}
			}
		}
	
	public static void main(String[] args) {

			Scanner sc = new Scanner(System.in);
			HaksaTest h = new HaksaTest();
			h.printmenu();
			
			while(true) {
			System.out.print("메뉴>");
			int user = sc.nextInt();
			sc.nextLine();
			
			switch(user) {
			case 1 :h.InputTeacher(sc);break;
			case 2 :h.InputStudent(sc);break;
			case 3 :h.printTeacher();break;
			case 4 :h.printStudent();break;
			case 5 :h.printAllList();break;
			case 6 :System.out.println("프로그램을 종료합니다.");
					System.exit(0);break;
			default : System.out.println("잘못 선택하였습니다."); 
			}
			}
	}
}