초급 JAVA

Java 17일차 자바 컬렉션 프레임워크

햄찌개 2020. 9. 3. 14:30

1.collection framework
            - Collection
                        : 데이터 그룹 
             - Framework
                        : 일하기 위한 틀 
                        : 표준화가 가능하다.
 - Collections ─┬──── collection ─┬──── List(순서가 있어서 데이터 중복 O)─── Vector<>, Stack, ArrayList
                          │                                    │
                          │                                    └──── Set(순서가 없어서 데이터 중복 X)─── HashSet, TreeSet
                           └──── Map(<키, 값>, 순서 X, 키는 중복 X, 값은 중O)─── HashMap, TreeMap, HashTable

2. 핵심 interface
             - List
                          : 순서가 있다.
                          : 데이터의 중복을 허용한다.
                          : 구현체 :Vector, Stack, ArrayList, LinkedList, .....
                         : 예) 대기표 명단.
            - Set
                         : 순서가 없다
                          : 데이터 중복을 허용하지 않는다.
                          : 구현체 : HashSet, TreeSet,.....
                         : 예) 정수의 집합
             - Map
                        : 키(key)와 값(value)으로 이루어져있다.
                        : 순서가 없다.
                        : 키는 중복을 허용하지 않는다.
                        : 값은 중복을 허용한다.
                        : 구현체 : HashTable, HashMap, TreeMap, Properties,....
                        : 예) 지역번호(전화번호), 우편번호
 
3. ArrayList
             - 배열을 사용하였을 때 길이를 한번 정하면 변경이 불가한 단점을 보완하기 위해 만들어졌다.
             - 메서드들
                        : add()      -> 객체를 추가한다.
                        : remove()   -> 객체를 제거한다.
                        : get(int index) -> 지정된 index번째 객체를 얻어온다.
                        : set(int index, Object obj) -> 지정된 index번째 객체를 교체한다. 값의 요소가 아닌 주소를 바꾸는 것 

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


public class ArrayListTest {

	public static void main(String[] args) {
		List<Integer> list = new ArrayList<>();
		//C
		list.add(new Integer(5));
		list.add(2); //Auto-Boxing
		list.add(3);
		list.add(1);
		list.add(4);
		
		List<Integer> list2 = new ArrayList<>(list.subList(1, 4));
		System.out.println(list);
		System.out.println(list2); //toString 오버라이딩
		
		//R
		int a = list.get(2); //unBoxing
		System.out.println(a);// 3
		
		//D
		list.remove(2);
		System.out.println(list);// 5 2 1 4 
		
		//U
		int change = new Integer(10);
		int after = list.set(1, change);
		System.out.println("바뀌기전 : "+after+", 바뀐값 : "+change);
		
		System.out.println(list); //5 10 1 4
		
		Collections.sort(list);
		System.out.println(list);
	
	}
}



4. LinkedList
             - 자신의 데이터와 다음 데이터의 주소를 가짖고 있다.
             - 이전 요소를 찾을 수가 없다 .
 
5. DoubleLinkedList
             - 자신의 데이터와 이전데이터의 주소, 다음 데이터의 주소를 가지고 있다. 

6. Stack
             - First In Last Out : FILO
             - push()   : 객체 추가
             - pop() : 추출
             - serch() : 원하는 객체를 찾는다.
             - peak() : 가장위의 객체를 가져온다.
7. Queue
             - First IN First Out : FIFO
             - offer() : 추가
             - poll() : 추출

import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

public class StackTest {
	public static void main(String[] args) {
		Stack<String> s = new Stack<>();
		s.push("0");
		s.push("1");
		s.push("2");
		System.out.println("=====stack===========");
		while(!s.empty()){
			System.out.println(s.pop());
		}
		
		Queue<String> qu = new LinkedList<>();
		qu.offer("0");
		qu.offer("1");
		qu.offer("2");
		System.out.println("=====Queue===========");
		while(!qu.isEmpty()){
			System.out.println(qu.poll());
		}	
	}
}


 
8. HashSet
             - 새로운 요소를 추가하기 위해 add, addAll메서드를 사용할 때 중복추가 될때 실패하게 된다.

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class HashSetTest {
	public static void main(String[] args) {
		Set<Integer> s = new HashSet<>();
//		s.add(5);
//		s.add(2);
//		s.add(3);
//		s.add(1);
//		s.add(4);
		for (int i = 0; i < 10; i++) {
		int random  = (int)(Math.random()*35+1);
		boolean re =s.add(random);
		System.out.println(re);
	}
		//정렬 set -> list
		System.out.println(s);
		List<Integer> ss = new ArrayList<>(s);
		Collections.sort(ss);
		System.out.println(ss);
	
	}
}


  
9. HashMap<Object, Object>
             - 키(key)와 값(value)로 이루어져 있다.
             - 순서가 없기 때문에 키는 중복을 비허용, 값은 중복을 허용 한다.   
             - 키와 값의 타입으로 Object형태이지만 일반적으로는 키의 경우 String으로 사용한다.
             - method들
                           : put() -> 객체를 추가
                           : get(키) -> 원하는 객체의 값을 가져온다.
                           : remove(키) -> 객체를 지운다. 

import java.util.HashMap;
import java.util.Map;

public class MapTest {
	public static void main(String[] args) {
		Map<String,Integer> param = new HashMap<>(); //Object, Object => String, Integer 

		//C, U
		param.put("홍길동", 50); //put가 insert 겸 update라 처음에는 null 그 키값에 넣어줬으면 그 전값
		param.put("홍길은", 60);
		param.put("홍길금", 15);
		param.put("홍길플", 20);
		
		//R
		int hong = param.get("홍길동");
		System.out.println(hong);
		System.out.println(param);
		//D
		param.remove("홍길동");
		System.out.println(param);
		
		Map<String, String> mem = new HashMap<>();
		mem.put("mem_id", "a001");
		mem.put("mem_pw", "asdfasdf");
		
		String r=mem.get("mem_id");
		System.out.println(r);
		//select
		//FROM	MEMBER
		//WHERE	MEM_ID = mem.get("mem_id");
		//AND	MEM_PW = mem.get("mem_pw");
		
		
		
	}
}