[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("잘못 선택하였습니다.");
}
}
}
}'개발자 > 백엔드 웹 개발자 과정(국비)' 카테고리의 다른 글
| 2022년 12월 09일 _ 23회차 (종속 Thread,독립 Thread,동기화) (0) | 2022.12.09 |
|---|---|
| 2022년 12월 08일 _ 22회차 (Thread 스레드) (0) | 2022.12.08 |
| 2022년 12월 02일 _ 20회차 (String 클래스) (0) | 2022.12.02 |
| 2022년 12월 1일 _ 19회차 (Exception 예외) (0) | 2022.12.01 |
| 2022년 11월 30일 _ 18회차 (실습.) (0) | 2022.11.30 |