코드로 가기 전에 그림으로 설명 ( 이론 )
Collection Interface
- 같은 타입 여러 데이터를 관리하기 위해서 array
- 다른 타입 여러 데이터를 관리하기 위해서 class(객체)
- 다른 타입 객체 여러 개를 관리하기 위해서 obj[](객체배열)
- 다른 타입 오브젝트 여러 개를 관리하기 위해서collection
- 컬렉션을 사용하는 이유 – 성능, 편리함!
- 컬렉션은 인터페이스이다.
- 대표적인 애들 [ AraayList, HashSet, HashMap ] 3가지 실습해 볼 예정
List – ArrayList, LinkedList
- list형태로 순서대로 객체들을 가지고 있는 아이 – 중복 허용한다.
Set - HashSet
- 인덱스 없다 – 통 안에 막 들어가 있는 느낌, 중복 허용하지 않는다.
Map – HashMap
- 데이터를 key-value 쌍으로 저장한다.
실습으로 더 알아보자!
ArrayList
- List - ArrayList
- 추가 add( )는 / 꺼내보기 get( ) / 지우기 remove( )
1. Person 객체 만들기 ( 필드, 생성자, 게터/세터, toString 해주기)
2. Test 클래스에서 객체 생성해서 arrayList 테스트!
2-1 객체 6개 생성하고
2-2 ArrayList 안에 6개 객체 추가
2-3 add( ) 여기 안에는 모든 객체가 올 수 있다. object 객체를 받는 걸로 되어있어서
3. 잘 들어가는지 출력 확인
3-1 리스트 첫 번째 가져오는 코드 메서드 안에 추가
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 )
2. 데이터를 꺼낼 때는 get ( key )
- 저장할 때 넣었던 key값!
3. 출력 테스트
- first 라는 key값에 해당하는 - p1 출력되는 것 확인
Map의 특징
- Map 은 key : value 쌍으로 저장한다.
- Map 가서 key 값에 해당하는 value 꺼내다가 주는 것이다.
- 똑같은 key값에다가 value 넣어주면,, 덮어쓰기 형태로 넣어 준다.
- value는 중복돼도 괜찮다.
- Map은 Key값을 기준으로 데이터를 관리한다!!
Map은 언제 사용할 때 좋을까요?
- key : value 형식으로 저장되어야 할 형태일 때
- 한 큐에 접근 가능 – 찾으려는 값을 value를 key값에 아예 넣어버리면
- value를 찾으러 객체에 접근 – 호출하는 과정이 아니라 그냥 넣어놓은 값 바로 출력
- map의 수행 속도는 1
- 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
한 번씩 사용해보았던 것들이라서
반가웠고, 개념을 다시 복습할 수 있었다.
무엇보다 중요한 것은
각 자료 구조마다 데이터를 어떻게 관리하고
어떤 특징이 있어서 실제 상황이 주어졌을때
그 상황에 맞는 자료구조를 선택해서 활용하는 것 같다.
세세한 내용은 검색 찬스와 내 블로그 포스팅 찬스 ㅎㅎ
사용해보면서 익히기!
자료 구조는 너무나 많아서 어떤 것이 존재하는지
따로 더 공부할 필요성을 느꼈다.
'Java 기반 클라우드 융합 개발자 과정 - KH 정보교육원 > 4월' 카테고리의 다른 글
22.04.29 - Generic, 향상된 for문(enhanced for), 예외(Exception) (0) | 2022.05.10 |
---|---|
22. 04. 27 - instanceof, abstract, interface (0) | 2022.04.29 |
22. 04. 26 - 상속(super, override), 다형성, 바인딩 (0) | 2022.04.29 |
22. 04. 25 - 시험, 주말 과제 발표 (0) | 2022.04.27 |
22. 04. 22 - 접근 제한자(Access Modifier), 인자 값을 받는 생성자 (0) | 2022.04.26 |