1. Collection, 컬렉션 (자료구조) : 기본형 변수가 아닌 참조형 변수를 저장한다.
- List : 순서가 있는 데이터의 집합 (데이터 중복 허용). - Array 와 비슷
- Queue : 한 쪽에서 데이터를 넣고 반대쪽에서 데이터를 뺄 수 있는 집합 ( First In First Out, 먼저 들어간 것이 먼저 조회된다.)
- Set : 순서가 없는 데이터의 집합 (데이터 중복 불허) - 순서 X, 중복 X
- Map : 순서가 없는 (Key, Value) 쌍으로 이루어진 데이터의 집합 - Key 값 중복 불허
1) List
ⓐ ArrayList : 배열처럼 일렬로 데이터를 저장하고 조회하여 순번 값(인덱스)으로 값을 하나씩 조회
- 크기가 정해져있지 않고 필요할 때마다 크기가 점점 더 늘어난다. 즉, 처음부터 길이를 모르더라도 만들 수 있다.
- 배열은 크기를 고정하여 생성하는 것을 정적 배열이라 한다면 ArrayList는 크기가 가변적으로 늘어나기 때문에 동적 배열이다.
- 생성시점에 작은 연속된 공간을 요청해서 참조형 변수들을 담아놓고, 값이 추가될 때 더 큰 공간을 받아 저장한다.
- 순차적으로 데이터를 추가/삭제하는 경우에 사용하면 좋다.
- 기능 :
ArrayList 의 기능
- 선언 : ArrayList<Integer> intList 형태로 선언
- 생성 : new ArrayList<Integer>(); 형태로 생성
- 초기화 : 사이즈를 지정하는 것이 없기 때문에 초기화가 필요 없음
- 값 추가 : intList.add({추가할 값}) 형태로 값을 추가
- 값 수정 : intList.set({수정할 순번}, {수정할 값}) 형태로 값을 수정
- 값 삭제 : intList.remove({삭제할 순번}) 형태로 값을 삭제
- 전체 출력 : intList.toString() 형태로 전체 값을 대괄호[]로 묶어서 출력
- 전체 제거 : intList.clear() 형태로 전체 값을 삭제
ⓑ LinkedList : 메모리에 남는 공간을 요청해 여기 저기 실제값을 나누어 담아놓고, 실제 값이 있는 주소값으로 목록을 구성하고 저장
- 값을 나누어 담기 때문에 모든 값을 조회하는 속도가 느리다.
- 대신 값을 중간에 추가하거나 삭제할 때 속도가 빠르다.
- 원하는 위치 어디에서나 삽입/삭제 시에 변경되는 노드만 다시 연결해주면 되기 때문에 빠른 연산이 가능하다.
- 그래서 데이터의 삽입/삭제가 자주 발생하는 경우에 사용하면 좋다.
- 연결이 끊어지지 않으면서 탐색을 양방향으로 할 수 있다.
- 기능 :
LinkedList의 기능
- 선언 : LinkedList<Integer> linkedList 형태로 선언
- 생성 : new LinkedList<Integer>(); 형태로 생성
- 초기화 : 사이즈를 지정하는 것이 없기 때문에 초기화가 필요 없음
- 값 추가 : linkedList.add({추가할 값}) 형태로 값을 추가
- 값 중간에 추가 : linkedList.add({추가할 순번}, {추가할 값}) 형태로 값을 중간에 추가
- 값 수정 : linkedList.set({수정할 순번}, {수정할 값}) 형태로 값을 수정
- 값 삭제 : linkedList.remove({삭제할 순번}) 형태로 값을 삭제
- 전체 출력 : linkedList.toString() 형태로 전체 값을 대괄호[]로 묶어서 출력
- 전체 제거 : linkedList.clear() 형태로 전체 값을 삭제
ⓒ Stack : 수직으로 값을 쌓아놓고, 빼서 조회하는 형식으로 데이터를 관리한다. (Last In First Out) 즉, 바구니처럼 제일 먼저 들어간 데이터가 가장 바닥에 있다.
- 값을 밑에서 위로 쌓고, 꺼낼 때는 위에서부터 꺼내는 형식이다.
- 최근 저장된 데이터를 나열하고 싶거나 데이터의 중복 처리를 막고싶을 때 사용한다.
- 기능 :
Stack의 기능
- 선언 : Stack<Integer> intStack 형태로 선언
- 생성 : new Stack<Integer>(); 형태로 생성
- 추가 : intStack.push({추가할 값}) 형태로 값을 추가
- 조회 : intStack.peek() 형태로 맨 위값을 조회
- 꺼내기 : intStack.pop() 형태로 맨 위값을 꺼냄 (꺼내고 나면 삭제됨)
2) Queue : 한 쪽에서 데이터를 넣고 반대쪽에서 데이터를 뺄 수 있는 집합 ( 빨대같다. )
- First In First Out : 먼저 들어간 순서대로 값을 조회할 수 있다.
- 생성자가 없는 인터페이스라 바로 생성할 수 없다.
- 생성자가 존재하는 클래스인 LinkedList를 사용해 Queue를 생성해서 받을 수 있다.
- 즉, LinkedList를 생성하면 Queue를 사용할 수 있다. (Queue가 부모, LinkedList가 자식)
- 기능 :
Queue의 기능
- 선언 : Queue<Integer> intQueue 형태로 선언
- 생성 : new LinkedList<Integer>(); 형태로 생성
- 추가 : intQueue.add({추가할 값}) 형태로 값을 맨 위에 추가
- 조회 : intQueue.peek() 형태로 맨 아래 값을 조회
- 꺼내기 : intQueue.poll() 형태로 맨 아래 값을 꺼냄 (꺼내고 나면 삭제됨)
3) Set : 순서와 중복이 없는 데이터의 집합
- 순서도 없고 중복도 허용하지 않는다.
- 생성자가 없는 인터페이스라서 바로 생성할 수 없다.
- HashSet, TreeSet 등으로 응용해 사용할 수 있다.
- 생성자가 존재하는 클래스인 HashSet을 사용해 Set을 생성해서 받을 수 있다.
- 기능 :
Set의 기능
- 선언 : Set<Integer> intSet 형태로 선언합니다.
- 생성 : new HashSet<Integer>(); 형태로 생성합니다.
- 추가 : intSet.add({추가할 값}) 형태로 값을 맨 위에 추가합니다.
- 삭제 : intSet.remove({삭제할 값}) 형태로 삭제할 값을 직접 지정합니다.
- 포함 확인 : intSet.contains({포함 확인 할 값}) 형태로 해당 값이 포함되어있는지
- HashSet : 가장 빠르며 순서를 전혀 예측할 수 없다.
- TreeSet : 정렬된 순서대로 보관하며 정렬 방법을 지정할 수 있다.
- LinkedHashSet : 추가된 순서, 또는 가장 최근에 접근한 순서대로 접근 가능 (순서 보장)
4) Map : Key & Value, they're bestfriends the never be apart!
- key-value 형태로 데이터를 저장하기 때문에 기존 순번으로만 조회하던 방식에서 key값을 기준으로 value를 조회할 수 있다.
- key값 단위로 중복을 허용하지 않는다. ( key is unique, one and only!☆)
- HashMap, TreeMap 등으로 응용해 사용할 수 있다.
- 기능 :
Map의 기능
- 선언 : Map<String, Integer> intMap 형태로 Key타입과 Value타입을 지정해서 선언
- 생성 : new HashMap<>(); 형태로 생성
- 추가 : intMap.put({추가할 Key값},{추가할 Value값}) 형태로 Key에 Value값을 추가
- 조회 : intMap.get({조회할 Key값}) 형태로 Key에 있는 Value값을 조회
- 전체 key 조회 : intMap.keySet() 형태로 전체 key 값들을 조회
- 전체 value 조회 : intMap.values() 형태로 전체 value 값들을 조회
- 삭제 : intMap.remove({삭제할 Key값}) 형태로 Key에 있는 Value값을 삭제
- HashMap : 중복을 허용하지 않고 순서를 보장하지 않음. 키와 값으로 null이 허용
- TreeMap : key값을 기준으로 정렬 가능. 다만 저장 시 오름차순 정렬을 하기 때문에 저장시간이 다소 오래걸림
5) 길이값
- length : 배열의 길이를 조회
- length() : 문자열의 길이를 조회
- size() : 컬렉션 타입 목록의 길이를 조회
★새배개★
1. 린터 : 코드를 작성할 때 규약을 자동으로 맞춰주는 도구
2. 템플릿 메서드 패턴 : 여러 클래스에서 공통으로 사용하는 메서드를 템플릿화 하여 상위 클래스에서 정의하고, 하위 클래스마다 세부 동장 사항을 다르게 구현하는 패턴. 즉, 변하지 않는 기능(템플릿)은 상위 클래스에 만들어 두고 자주 변경되며 확장할 기능은 하위 클래스에서 만들도록 하여 상위의 메서드 실행 동작 순서는 고정하면서 세부 실행 내용은 다양화 될 수 있는 경우에 사용
'내일배움캠프 > TIL' 카테고리의 다른 글
[Spring_4기 본캠프] 3주차 - 계산기 lv2와 트러블 슈팅 | Day 24 (1) | 2024.11.19 |
---|---|
[Spring_4기 본캠프] 3주차 - 계산기 lv2 | Day 23 (0) | 2024.11.19 |
[Spring_4기 본캠프] 3주차 - 계산기 lv1 구현하기 | Day 21 (0) | 2024.11.15 |
[Spring_4기 본캠프] 2주차 - 자바 문법 종합반[배열과 클래스] | Day 19 (3) | 2024.11.13 |
[Spring_4기 본캠프] 2주차 - 자바 문법 종합반 | Day 18 (0) | 2024.11.12 |