Java 기반 클라우드 융합 개발자 과정 - KH 정보교육원/4월

22.04.28 - Collection ( ArrayList, HashSet, HashMap), Stack, Queue

giggs 2022. 5. 3. 16:01

코드로 가기 전에 그림으로 설명 ( 이론 )

 

 

 

Collection Interface

 

 

 

 

 

 

 

 

  • 같은 타입 여러 데이터를 관리하기 위해서 array
  • 다른 타입 여러 데이터를 관리하기 위해서 class(객체)
  • 다른 타입 객체 여러 개를 관리하기 위해서 obj[](객체배열)
  • 다른 타입 오브젝트 여러 개를 관리하기 위해서collection

 

 

 

 

 

ArrayList / HashSet / HashMap 실습~! + Stack,Queue

 

 

 

 

  • 컬렉션을 사용하는 이유  성능, 편리함!
  • 컬렉션은 인터페이스이다.
  • 대표적인 애들 [ AraayList, HashSet, HashMap ] 3가지 실습해 볼 예정

 

 

 

 


 

 

 

 

List – ArrayList, LinkedList

  • list형태로 순서대로 객체들을 가지고 있는 아이 – 중복 허용한다.

 

 

1. 인덱스도 가지고 있다. - arraylist

 

 

2. 앞에애도 가리키고 있다. - LinkedList

 

 

 

 


 

 

 

Set - HashSet

  • 인덱스 없다 – 통 안에 막 들어가 있는 느낌, 중복 허용하지 않는다.

 

 

통안에 마구잡이로 데이터 보관하는 Set - 누가 포함되어있는지는 확인 가능

 

 

 

 

 


 

Map – HashMap

  • 데이터를 key-value 쌍으로 저장한다.

 

key : vlaue 쌍으로 보관

 

 

 

 

 


 

 

 

 

실습으로 더 알아보자!

 

 

 

ArrayList

  • List - ArrayList
  • 추가 add( )는 / 꺼내보기 get( )  / 지우기 remove( )

 

1. Person 객체 만들기 ( 필드, 생성자, 게터/세터, toString 해주기)

 


 

2. Test 클래스에서 객체 생성해서 arrayList 테스트!

 

2-1 객체 6개 생성하고

 

6개의 객체 생성

 

 

2-2 ArrayList 안에 6개 객체 추가

2-3 add( ) 여기 안에는 모든 객체가 올 수 있다. object 객체를 받는 걸로 되어있어서

 

 

 

 

ArrayList 에 add( 객체 )

 

 


 

 

3. 잘 들어가는지 출력 확인

 

 

 

3-1 리스트 첫 번째 가져오는 코드 메서드 안에 추가

 

 

인덱스로 꺼내오기! get( 인덱스 )

 

 

 

 

 

3-2 메인에서 출력 테스트

 

 

 

 

 

+@ add는 추가 / get 은 꺼내보기 / remove는 지우기 /

+@ 배열할 때 생성 / 입력 / 가져오기 하면 다 아는 것이라고 했었는데

+@ 생성 new ArrayList() / 입력 add() / 가져오기 get() 안다! ArrayList도 안다!

 

 


 

 

 

 

 

ArrayList 특징

  • 인덱스 존재
  • add - 마지막 인덱스에 추가된다. 
  • get   인덱스를 이용하여 get 가능
  • 한 칸 한 칸들은  인트 객체 / 문자열 객체 / 다 받아줄 수 있다.
  • int를 받아줄 수 있다?
  • 되긴되는데 안되는 것이다. - 오토박싱 - 박싱작업필요 Integer객체로

 

 

ArrayList 장점 

  • 사이즈를 내 마음대로 조절가능하다.
  • (배열은 용량을 정해서 만든다 new int[5]; / 리스트는 new ArrayList(); )

 

 

 

메모리상 구조

 

 

 

 

 

 

 

>하나하나를 노드라고하는데

>next라는 객체는 다음 노드를 가리키는 데이터가 들어가있다.

 

 

 

 

 

 

>파란 네모칸이 여러개  있는것!

 

 

 

 


 

 

 

 

HashSet

 

  • Set - HashSet
  • 추가 add( )
  • 순서가 없다, 중복을 허용하지 않는다, 포함여부를 확인 가능하다.

 

 

 

통 안에 있는 데이터 몽땅 출력

 

 

 

  • 1개씩 빼내는 것은 없는 것 같다.
  • 출력한 내용 보니까 전부다 출력해주긴 하는데 순서가 뒤죽박죽이다.

 

 

 

set의 특징

  • 1. 순서가 없다 - sequence X ,
  • 2. 중복도 없다 – duplication X
  • 3. 포함 여부 확인 가능하다– check contain O

 

  • 순서가 중요하지 않다, 맞고 틀리고만 확인하면 된다, 중복되면안된다 –> Set 유리 – ex) 로또
  • hs.add(100) , hs.add(100) 하면 1번만 들어간다. -> Set – 2번째꺼안들어간다.
  • al.add(100) , al.add(100) 하면 2번다 들어간다. - ArrayList
  • ex ) 로또는 – set 유리 // 출석부는 – list 유리 (중복 경우/번호관리)

 

 

 


 

 

 

HashMap

 

  • Map - HashMap
  • key : value 저장
  • 입력 put(key,value), 꺼내기 get(key), 
  • HashMap / TableMap / ProperiesMap / TreeMap 등등 있다.

 

 

 

 

 

1. 데이터를 입력할 때는 put( key , value )

 

HashMap에 데이터 입력 시 파라미터 key,value 입력해야되는 것 확인

 

 


 

 

 

2. 데이터를 꺼낼 때는 get ( key )

  • 저장할 때 넣었던 key값!

 

HashMap에 데이터 꺼낼 시 key 값으로 꺼내는 것 확인

 

 

 


 

 

 

3. 출력 테스트

 

 

입력은 key와 value 로 입력 - 꺼내보기는 key 값으로

 

 

  • first 라는 key값에 해당하는 - p1 출력되는 것 확인

 

 

Map의 특징

  • Map 은 key : value 쌍으로 저장한다.
  • Map 가서 key 값에 해당하는 value 꺼내다가 주는 것이다.
  • 똑같은 key값에다가 value 넣어주면,, 덮어쓰기 형태로 넣어 준다.
  • value는 중복돼도 괜찮다.
  • Map은 Key값을 기준으로 데이터를 관리한다!!

 

 

 

Map은 언제 사용할 때 좋을까요?

  • key : value 형식으로 저장되어야 할 형태일 때
  • 한 큐에 접근 가능 – 찾으려는 값을 value를 key값에 아예 넣어버리면
  • value를 찾으러 객체에 접근 – 호출하는 과정이 아니라 그냥 넣어놓은 값 바로 출력
  • map의 수행 속도는 1

 

 

 

key에다가 value를 보관한 상태로 key만 찾으면 value 바로 접근!

 

 

 

  • vlaue 찾으러 3번 작업할 거 hashMap으로는 한 번 작업으로 가능!

 

 

 

 


 

 

 

+@ 컬렉션 자료구조 중 Stack / Queue 사용해보기 

 

 

 

 

Stack

 

  • Last In First Out - 후입선출 - 입력해준 역순으로 출력됨
  • 데이터가 들어가고 나가는 부분이 한 곳
  • 생성 Stack s = new Stack( ) / 입력 push( ) / 꺼내보기 pop( )

 

 

 

 

 

 

 

>30 / 20 / 10 출력확인

>입력해준 역순으로 출력됨을 확인 / Last In First Out - 후입선출 확인

>데이터가 들어가고 나가는 부분이 한 곳 

>있던 거 위에 계속 쌓기

>pop은 맨 위에거 꺼내오기~

 

 

 

 

 


 

 

 

 

Queue

 

  • First In First Out 선입선출 확인
  • 데이터가 들어가는 곳 따로 나가는 곳 따로
  • 생성 Queue q = new LinkedList() /
  • 입력 offer( ) / 꺼내보기 poll( ) , peek( )
  • 삭제 remove( )

 

 

 

 

 

 

>순서대로 10/ 20/ 30 출력됨을 확인

>First In First Out 선입선출 확인

>poll 이란 친구는 -> 마지막에 있는 친구를 꺼내오고 리스트에서 삭제

>peek() 이란 친구는 -> 마지막에 있는애를 꺼내서 보여주기만 하는 애 리스트에서 삭제 안 한다 X

>remove는 맨 앞에있는 데이터 삭제

 

 

 

 


 

 

 

 

여기까지 총 5개 사용해보기 끝!

 

 

 

List / Set / Map / Stack / Queue

  • 얘네들은 각각 데이터를 관리하는 형태가 달랐다.
  • 자료를 저장하는 구조가 다르다.
  • 자료구조는 대학 1년동안 하는 수업~ 너무 많고 다양하다.

 

 

 

다양한 자료구조있는 만큼 다양한 상황이있을테고, 상황맞는 자료구조 픽

  • 왜 이런 자료구조를 쓰는가에 중점
  • 1순위 : 사용방법
  • 2순위 : 그림으로 한 번 확인해보기
  • 3순위 : 각각의 자료구조마다 장단점 체크해보기
  • 4순위 : +@한다면 – 배열이랑 오브젝트 이용해서 구현한번씩 해보기

 

 

 

 

 


 

 

 

 



review 


API 클래스들의 메소드를 사용해보고
컬렉션과 제네릭에서 먼저 컬렉션 배우기
컬렉션의 인터페이스들 중 대표적인 것으로 실습

ArrayList / HashSet / HashMap / Stack / Queue
한 번씩 사용해보았던 것들이라서
반가웠고, 개념을 다시 복습할 수 있었다.

무엇보다 중요한 것은
각 자료 구조마다 데이터를 어떻게 관리하고
어떤 특징이 있어서 실제 상황이 주어졌을때
그 상황에 맞는 자료구조를 선택해서 활용하는 것 같다.

세세한 내용은 검색 찬스와 내 블로그 포스팅 찬스 ㅎㅎ
사용해보면서 익히기!

자료 구조는 너무나 많아서 어떤 것이 존재하는지
따로 더 공부할 필요성을 느꼈다.