📌 기본형 변수 vs 참조형 변수
- 기본형 변수 : 실제 값을 저장하는 저장공간
원본 값이 Stack 영역에 저장
- 참조형 변수 : 원본값의 주소값을 저장하는 주소형 변수
원본 값이 Heap 영역에 저장 (Stack 영역에는 Heap 영역 주소를 저장)
❓ 자주쓰는 참조형 변수 ?
- int 의 참조형 변수 = Integer
- long 의 참조형 변수 = Long
- double 의 참조형 변수 = Double
- String 은 원래부터 참조형 변수 </aside>
📌 Stack 영역 vs Heap 영역
- Stack의 경우에는 정적으로 할당된 메모리 영역입니다.
- 그래서, 크기가 몇 byte 인지 정해져 있는 기본형 변수를 저장합니다.
- 추가로, 크기가 정해져 있는 참조형 변수의 주소 값도 저장합니다.
- Heap의 경우에는 동적으로 할당된 메모리 영역입니다.
- 그래서, 크기가 계속 늘어날 수 있는 참조형 변수의 원본을 저장합니다. </aside>


📌 컬렉션
1. List (Array List)
- 동적배열 (크기가 가변적으로 늘어난다) ↔ Array : 정적 배역 (크기를 고정하여 생성)
- 생성 시점에 작은 연속된 공간을 요청해서 참조형 변수들을 담아놓는다.
- 값이 추가될 때 더 큰 공간이 필요하면 더 큰 공간을 받아서 저장한다!
- 기능
- 선언 : ArrayList<Integer> intList 형태로 선언합니다.
- 생성 : new ArrayList<Integer>(); 형태로 생성합니다.
- 초기화 : 사이즈를 지정하는것이 없기 때문에 초기화가 필요 없습니다.
- 값 추가 : intList.add({추가할 값}) 형태로 값을 추가합니다.
- 값 수정 : intList.set({수정할 순번}, {수정할 값}) 형태로 값을 수정합니다.
- 값 삭제 : intList.remove({삭제할 순번}) 형태로 값을 삭제합니다.
- 전체 출력 : intList.toString() 형태로 전체 값을 대괄호[]로 묶어서 출력합니다.
- 전체 제거 : intList.clear() 형태로 전체 값을 삭제합니다.
2. List (Array List)
- 메모리에 남는 공간을 요청해서 여기저기 나누어서 실제값을 담아놓고, 실제값이 있는 주소값으로 목록을 구성하고 저장합니다.
- 특징
- 기본적인 기능은 ArrayList 와 동일하지만 LinkedList 는 값을 나누어 담기 때문에 모든값을 조회하는 속도가 느립니다. 대신에, 값을 중간에 추가하거나 삭제할때는 속도가 빠릅니다.
- 중간에 값을 추가하는 기능이 있습니다. (속도 빠름)<aside>
- 더보기
기능
- 선언 : LinkedList<Integer> linkedList 형태로 선언합니다.
- 생성 : new LinkedList<Integer>(); 형태로 생성합니다.
- 초기화 : 사이즈를 지정하는것이 없기 때문에 초기화가 필요 없습니다.
- 값 추가 : linkedList.add({추가할 값}) 형태로 값을 추가합니다.
- 값 중간에 추가 : linkedList.add({추가할 순번}, {추가할 값}) 형태로 값을 중간에 추가합니다.
- 값 수정 : linkedList.set({수정할 순번}, {수정할 값}) 형태로 값을 수정합니다.
- 값 삭제 : linkedList.remove({삭제할 순번}) 형태로 값을 삭제합니다.
- 전체 출력 : linkedList.toString() 형태로 전체 값을 대괄호[]로 묶어서 출력합니다.
- 전체 제거 : linkedList.clear() 형태로 전체 값을 삭제합니다.
3. Stack
- 값을 수직으로 쌓아놓고 넣었다가 빼서 조회하는 형식으로 데이터를 관리 합니다.
- 나중에 들어간 것이 가장 먼저 나온다(Last-In-First-out)
- 특징
- 상자에 물건을 넣고 빼는것처럼 밑에서 위로 쌓고, 꺼낼때는 위에서 부터 꺼내는 형식입니다.
- 그렇기 때문에 넣는 기능(push()) 과 조회(peek()), 꺼내는(pop()) 기능만 존재합니다.
- 이렇게 불편하게 쓰는 이유는 최근 저장된 데이터를 나열하고 싶거나 데이터의 중복처리를 막고싶을때 사용합니다.
- 기능
- 선언 : Stack<Integer> intStack 형태로 선언합니다.
- 생성 : new Stack<Integer>(); 형태로 생성합니다.
- 추가 : intStack.push({추가할 값}) 형태로 값을 추가합니다.
- 조회 : intStack.peek() 형태로 맨 위값을 조회합니다.
- 꺼내기 : intStack.pop() 형태로 맨 위값을 꺼냅니다. (꺼내고나면 삭제됨
4. . Queue🥤
- 특징
- First In First Out : 먼저들어간 순서대로 값을 조회할 수 있다.
- 그렇기 때문에 넣는 기능(add()), 조회(peek()), 꺼내는(poll()) 기능만 존재합니다.
- Queue 는 생성자가 없는 껍데기라서 바로 생성할수는 없습니다. (껍데기 = 인터페이스)
- 생성자가 존재하는 클래스인 LinkedList 를 사용하여 Queue 를 생성해서 받을 수 있습니다.
- 기능
- 선언 : Queue<Integer> intQueue 형태로 선언합니다.
- 생성 : new LinkedList<Integer>(); 형태로 생성합니다.
- 추가 : intQueue.add({추가할 값}) 형태로 값을 맨 위에 추가합니다.
- 조회 : intQueue.peek() 형태로 맨 아래값을 조회합니다.
- 꺼내기 : intQueue.poll() 형태로 맨 아래값을 꺼냅니다. (꺼내고나면 삭제됨)
5. Set📚
- 순서가 없는 데이터의 집합 (데이터 중복 허용 안함) - 순서없고 중복없는 배열
- 특징
- 순서가 보장되지 않는 대신 중복을 허용하지 않도록 유지할 수 있습니다.
- Set 은 그냥 Set으로 쓸수도있지만 HashSet, TreeSet 등으로 응용하여 사용할 수 있습니다.
- Set 는 생성자가 없는 껍데기라서 바로 생성할수는 없습니다. (껍데기 = 인터페이스)
- 생성자가 존재하는 클래스인 HashSet 를 사용하여 Set 를 생성해서 받을 수 있습니다.
- 기능
- 선언 : Set<Integer> intSet 형태로 선언합니다.
- 생성 : new HashSet<Integer>(); 형태로 생성합니다.
- 추가 : intSet.add({추가할 값}) 형태로 값을 맨 위에 추가합니다.
- 조회 : intSet.get({초회할 순번}) 형태로 순번에 있는 값을 조회합니다.
- 삭제 : intSet.remove({삭제할 값}) 형태로 삭제할 값을 직접 지정합니다.
- 포함확인 : intSet.contains({포함확인 할 값}) 형태로 해당값이 포함되어있는지 boolean 값으로 응답 받습니다.
🔎 HashSet 외에도 TreeSet, LinkedHashSet 이 있습니다.
-
- HashSet : 가장 빠르며 순서를 전혀 예측할 수 없음
- TreeSet : 정렬된 순서대로 보관하며 정렬 방법을 지정할 수 있음
- LinkedHashSet : 추가된 순서, 또는 가장 최근에 접근한 순서대로 접근 가능
- 즉, 보통 HashSet 을 쓰는데 순서보장이 필요하면 LinkedHashSet 을 주로 사용합니다.
6. Map 👫
- key-value 구조로 구성된 데이터를 저장할 수 있습니다.
- 특징
- key-value 형태로 데이터를 저장하기 때문에 기존에 순번으로만 조회하던 방식에서, key 값을 기준으로 vlaue를 조회할 수 있습니다.
- key 값 단위로 중복을 허용하지 않는 기능을 가지고 있습니다.
- Map 은 그냥 Map으로 쓸수도있지만 HashMap, TreeMap등으로 응용하여 사용할 수 있습니다.
- Map으로 쓸수도있지만 HashSet, TreeSet 등으로 응용하여 사용할 수 있습니다.
- 기능
- 선언 : 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 외에도 TreeMap 이 있습니다.
- HashMap : 중복을 허용하지 않고 순서를 보장하지 않음 , 키와 값으로 null이 허용
- TreeMap : key 값을 기준으로 정렬을 할 수 있습니다. 다만, 저장시 정렬(오름차순)을 하기 때문에 저장시간이 다소 오래 걸림
🔎 length vs length() vs size() - 길이값 가져오기
1. length
- arrays(int[], double[], String[])
- length는 배열의 길이를 조회해줍니다.
2. length()
- String related Object(String, StringBuilder etc)
- length()는 문자열의 길이를 조회해줍니다. (ex. “ABCD”.length() == 4)
3. size()
- Collection Object(ArrayList, Set etc)
- size()는 컬렉션 타입목록의 길이를 조회해줍니다.
'Language > JAVA1' 카테고리의 다른 글
| Singlton 디자인 패턴 응용 (0) | 2022.02.12 |
|---|---|
| [JAVA 13] static, Singleton 디자인, final, 상속 (0) | 2022.02.04 |
| [JAVA 12] 클래스, 접근권한 수식어 (접근제한자) (0) | 2022.02.02 |
| [JAVA 11] 정규 표현식, 클래스 (0) | 2022.02.02 |
| [JAVA 10] 문자열 메소드, 정규표현식 (0) | 2022.01.31 |