6-1. 컬렉션 프레임웍

zhyun·2020년 9월 3일
0

java

목록 보기
10/11

1.컬렉션 프레임웍

(데이터그룹을 관리하기 위한 틀)

  • Collection
    : 데이터 그룹
  • Framework
    : 일을 하기위한 틀
    : 표준화가 가능하다. (일을 하기 전에 틀을 만들어 놓는다 라는 의미)

2. 핵심 interface

  • List
    : 순서가 있다 -> 데이터의 중복을 허용한다
    구현체 : ArrayList(중요), Vectror, Stack, LinkedList
    : 실제사용 예) 대기표 명단.
  • Set
    : 순서가 없다 -> 데이터의 중복을 허용하지 않는다
    구현체 : HashSet, TreeSet(데이터 검색을 위한 용도)...등
    : 실제사요 예) 정수의 집합
  • Map
    : 키와 값으로 이루어져 있다.
    : 순서가 없다 -> (키로 구분해서) 키의 중복을 허용하지 않고, 값은 중복을 허용한다.
    구현체 : HashTable(지금은 안씀), HashMap(중요), TreeMap(검색을 위한 용도)..
    : <지역><지역번호> ex) 우편번호, 지역번호
    < 키 >< 값 >

3.ArrayList

  • 배열을 사용하였을 때 길이를 한번 정하면 변경이 불가한 단점을 보완하기위해 만들어졌다.
    - Vector와 차이 : 속도가 빠르다
    - 메서드들 (CRUD)
    : add() -> 객체를 추가한다.
    : remove() -> 객체를 제거한다.
    : get(int index) -> index번째 객체를 얻어온다.
    : set(int index, Object obj) -> index번째 객체를 교체한다. -> 주소를 통째로 변경한다는 의미

*ArrayList 예제

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

public class ArrayListTest {
	public static void main(String[] args) {
		List<Integer> list1 = new ArrayList<>();
		list1.add(new Integer(5));
		list1.add(2); // AutoBoxing
		list1.add(3); 
		list1.add(1); 
		list1.add(4); 
				
		List<Integer> list2 = new ArrayList<>(list1.subList(1, 4)); // list1에 있는것을 list2에 똑같이 넣어준다
				
		System.out.println(list1); // 주소가 나와야하는데 실행하면 값이 나온다 -> to String()가 오버라이드됨
        // 5 2 3 1 4
		System.out.println(list2); // 2 3 1
		
		//R
		int a = list1.get(2); //UnBoxing 
		System.out.println(a); //2번방에 3 들어있음
		
		//D
		list1.remove(2); // 5 2 3 1 4 
		System.out.println(list1); // 5 2 1 4
		
		//U
		 int change = new Integer(10);	
//		 list1.set(1, new Integer(10)); //5 2 1 4
		 int after = list1.set(1, change); //5 2 1 4
		 
		 System.out.println("바뀌기 전:"+after+", 바뀐값 :"+ change);
		 System.out.println(list1); // 5 10 1 4
		 
		 //그동안 정렬하느라 고생하셨습니다. 정렬해주는 메서드가 있어요...
		 Collections.sort(list1); // 오름차순 
		 System.out.println(list1); // 1 4 5 10
	}
}

4. LinkedList

  • 자신의 데이터와 다음 데이터의 주소를 가지고 있다.
  • 이전 요소를 찾을수가 없다.

5. DoubleLinkedList

  • 자신의 데이터와 이전 데이터의 주소, 다음 데이터의 주소를 가지고 있다.

6. Stack (무조건 알고 있어야한다)

  • First In Last Out : FILO // 선입후출

  • push() : 객체추가

  • pop() : 추출 (사라짐)

  • search() : 원하는 객체 찾기

  • peak() : 가장위의 객체를 가져온다 (사라짐)

    *Stack 예제

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<>();
		// Stack만의 객체를 만들어야한다.
		
		s.push("0"); // 객체추가
		s.push("1"); // 객체추가
		s.push("2"); // 객체추가
		
		System.out.println("===================stack====================");
		System.out.println(s.pop()); // 꺼내기
		System.out.println(s.pop());
		System.out.println(s.pop());
//		System.out.println(s.pop()); // stack이 비어있는데 꺼내려니까 터진다
		
		while(!s.empty()){ // 반복개수를 모를때 사용하는 녀석
			System.out.println(s.pop()); // 비어있는지 확인하고 꺼내고
		}	// 거꾸로 출력댐 2 1 0
		
		//Queue 는 인터페이스 -> 객체 생성 안댐
		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()); //꺼내기 (순서대로 나옴) 0 1 2
		}
	}

}

7. Queue

  • First In First Out : FIFO
  • offer() : 추가
  • poll() : 추출

8. HashSet

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

    *HashSet 예제

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은 인터페이스 -> 객체생성 안댐
		Set<Integer> set = new HashSet<>();
		
		set.add(5); // 오토박싱
		set.add(2);
		set.add(3);
		set.add(1);
		set.add(4);
        	System.out.println(set); //[1, 2, 3, 4, 5]
        
		
		for(int i = 0; i< 10 ; i++){
			int random = (int)(Math.random()*35+1);
			boolean rs = set.add(random);
			System.out.println(rs);
		}
		System.out.println(set); 
			
		//정렬 // 모든 컬렉션은 리스트로 변경가능하다 // 오름차순
		//1. set -> list
		List<Integer> list = new ArrayList<>(set);
		Collections.sort(list);
		System.out.println(list);

	}

}

9. Map<Object,Object> - 구현체 : HashMap

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

*Map 예제 , 로그인 아디 비번

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

public class MapTest {
	public static void main(String[] args) {
		Map<String, Integer> param = new HashMap<>();
		
		param.put("져니", 100); // AutoBoxing
		param.put("그노", 60);
		param.put("경륜", 70);
		param.put("오혁", 100);
//		System.out.println(param.put("운주", 90)); //인서트겸 업데이트 (C 겸 U)
//		System.out.println(param.put("운주", 80)); // 전에 갖고있던 값 90 출력 
		
		//R
		int hyuk = param.get("오혁");
		System.out.println(hyuk); // 100
		System.out.println(param); // {오혁=100, 그노=60, 경륜=70, 져니=100}
		//D
		System.out.println(param.remove("경륜")); //70
		System.out.println(param); {오혁=100, 그노=60, 져니=100}
		
		// 회원 "김은대"의 id와 pw 정보 가져오기
		Map<String, String> mem = new HashMap<>();
		mem.put("mem_id", "a001");
		mem.put("mem_pw", "asdfasdf");
		System.out.println(mem); //{mem_pw=asdfasdf, mem_id=a001}
				
		String id = mem.get("mem_id");
		String pw = mem.get("mem_pw");
		System.out.println("아이디 :" + id); //아이디 :a001
		System.out.println("패스워드 :" + pw); 패스워드 :asdfasdf
		

//   		SELECT*
//		FROM   MEMBER
//		WHERE  MEM_ID = mem.get("mem_id")
//		AND    MEM_PW = mem.get("mem_pw");
	
		
	}

}





         
profile
HI :)

0개의 댓글