어제 TIL을 작성하지 못했다.
아직 습관이 안된 건지 작성하기로하고는 작성하지 않은 나를 다시 보게 되었다 반성중,,ㅠㅠ
늦게나마 일요일인 오늘 공부하여 적어보려한다.
지금 시간은 오후 4시 40분이다.
오늘의 목표는 JAVA문법 종합반 2주 차 완강이다.
그리고 한주의 시간을 어떻게 사용할지 시간별 공부를 나눠볼까 한다.
너무 무계획적으로 공부하다 보니 공부가 잘 안 되는 느낌이기도 하다.
MBTI가 ISFP이지만 어려운 계획을 세워보려 한다.
지금 이 글을 쓰는 것도 귀찮음이 있지만 그래도 나중을 위해 미래를 위해 성격을 습관으로 고쳐보려 한다.
(ISFP 특징이 만사 귀찮음이다... 공부하려는 나에게 너무 나쁜 특징.. ㅜㅜ)
어제 한 일
- 어제 그냥 퍼질러 놀았다.. ㄷㄷ (오래간만에 퇴사한 회사의 동료들과 배그를 하였는데 멈출 수 없었다. BIG 재미!)
오늘 할 일 (계획)
- 내일 배움 캠프 JAVA문법 종합반 강의 듣기 2주차 완강
- TIL 작성하기
- 시간별 공부계획 세우기
오늘 한 일 (회고)
- 내일배움캠프 JAVA문법 2주차 강의 정리
- TIL (2023.10.15) 작성
내일 할 일(계획)
- 내일배움캠프 JAVA문법 강의 듣기 3주 차 완강하기
- TIL 작성하기
시간별 공부 계획표
09시 ~ 10시 : 입실 체크 후 어제 배운 내용 복기
10시 ~ 13시 : 강의 수강
13시 ~ 14시 : 점심 식사
14시 ~ 18시 : 강의 수강 및 과제 구현, 배운 내용 연습
18시 ~ 19시 : 저녁 식사
19시 ~ 20시 : 부족한 부분 추가학습
20시 ~ 21시 : 오늘 공부한 내용 질문지 작성 및 질문, TIL 작성, 내일 할 일 정리
현재의 공부는 이렇게 계획 세워서 하기로 하였다.
공부가 계획대로 안될 수도 있겠지만 최대한 계획에 맞춰서 실행해 보려 한다.
그럼 지금부터 공부한 내용을 적어보려 한다.
혹시라도 이 글을 보시는 분이 있으시다면 TIL을 쓸 때 지적할 부분이나 제가 공부한 내용에 잘못된 부분이 있다면 언제든지 조언과 지적해 주시면 감사히 받아들이고 부족한 점 고쳐나가겠습니다!
말주변이 없어서 말이 이상해도 양해부탁드려요
오늘 배울 내용은 연산자, 조건문, 반복문, 배열, 컬렉션이다.
연산자
계산의 대상이 되는 것이 피연산자, 계산의 목적이 되는 게 연산자이다.
연산자: 덧셈 뺼셈처럼 계산할 기호
피연산자: 연산자로 인해 계산되는 숫자
2+1로 보았을 때 숫자 2,1은 피연산자이며, +는 연산자라 고한다.
코드로 보자면 아래와 같다.
public class W01 {
public static void main(String[] args) {
//x + y = z
int x = 5;
int y = 10;
int z = x + y; // x(피연산자) +(연산자) 10(피연산자)
System.out.println(z);
}
}
연산자의 종류
- 산술연산자
- 사칙 연산을 계산한 결괏값을 응답. 비트연산은 비트를 가지고 자릿수이동하여 계산
- 사칙연산: +(덧셈), - (뺄셈), *(곱셈), /(나눗셈/몫), % (나눗셈/나머지)
- 비트연산: <<(왼쪽으로 자리 옮기기), >>(오른쪽으로 자리이동)
- 비교연산자
- 값의 크고/작음을 비교하거나 같고/다름 을 비교하여 참(true)/거짓(false) 값인 boolean 값을 출력
- > (크다) , < (작다), >= (크거나 같다), <= (작거나 같다), == (같다),!= (다르다)
- 논리연산자
- 비교 연산의 결괏값으로 받을 수 있는 boolean 값을 연결하는 연산자
- 조건을 연결하였을 때의 boolean 값들을 조합하여 참(true)/거짓(false) 값인 boolean 값을 출력
- && (AND = 피연산자 모두 참), ||(OR = 피연산자 둘 중 하나라도 참),!(피연산자의 반대 boolean 값)
- 대입연산자
- 변수를 바로 연산해서 그 자리에서 저장하는 연산자
- 복합 대입 연산자가 있습니다. (+=, -=, *= …)
- 추가로, += 1는 ++ 과 동일합니다. (피연산자에 1 더해주기)
- 똑같이 -= 1 은 —-와 동일합니다. (피연산자에 1 빼주기)
- 주의 점!! 피연산자의 앞에 붙이냐 뒤에 붙이냐에 따라 연산순서가 달라짐
- 앞에 붙이면 연산 전에 피연산자에 1을 더하거나 빼준다.
- 뒤에 붙이면 연산 후 피연산자에 1을 더하거나 빼준다.
- 기타 연산자 (type),? :, instance of
- 형변환 연산자
- 괄호 안에 변환할 타입을 넣으면 피연산자의 타입이 변경됩니다.
- 삼항 연산자
- 비교 연산의 결괏값에 따라 응답할 값을 직접 지정할 수 있는 연산자입니다.
- 삼항 연산자는 3가지 피연산자가 존재하여 삼항 연산자 라고 합니다. (조건/참 결과/거짓결과)
- (조건)? (참 결과) : (거짓결과)
- 형변환 연산자
연산자 사용 시 유의사항
연산자는 우리가 알고 있는 수학과 거의 유사하다.
그래서 몇 가지 유의점만 정리하고 넘어가려 한다.
/ : 나눈 몫만 계산
% : 나누기 후 나머지만 계산
대입연산자 사용 시 앞에 붙이냐 뒤에 붙이냐 주의
연산자의 우선순의
산술 > 비교 > 논리 > 대입
- 연산자 여러 개가 함께 있는 연산을 계산할 때는 우선순위가 있다.
- 단, 괄호로 감싸주면 괄호 안의 연산이 최우선순위로 계산된다.
산술변환
연산 전에 피연산자의 타입을 일치시키는 것
- 두 피연산자의 타입을 같게 일치시킨다. (둘 중에 저장공간 크기가 더 큰 타입으로 일치
비트연산
Bit는 0,1 둘 중의 하나의 값만을 저장하는 컴퓨터가 저장(표현) 가능한 가장 작은 단위
연산중에서 Bit 연산이 제일 빠름
비트 연산을 통해 자릿수를 옮길수도 있다.
- <<(왼쪽으로 자리수 옮기기), >>(오른쪽으로 자리수 옮기기)
- 0,1 은 2진수 값이기 때문에,
- 자릿수를 왼쪽으로 옮기는 횟수만큼 2의 배수로 곱셈이 연산되는 것과 동일합니다.
- 자리수를 오른쪽으로 옮기는 횟수만큼 2의 배수로 나눗셈이 연산되는것과 동일합니다.
조건문 if, switch
if문
- if (조건) {연산}
- if의 조건이 만족하면 연산을 수행
- if (조건) {연산} else {연산}
- if의 조건이 만족하지 않으면 다음 연산을 수행
- if (조건) {연산} else if (조건) {연산}
- if의 조건이 만족하지 않으면 다음 if조건을 만족 시 연산을 수행
- 중첩 if(조건)
- if문 안에 else, else if로 해결 할 수 없을때 사용
- if 문 또는 else if문 또는 else 문 안에 if 문을 넣어 사용
switch(피연산자)/case(연산자)
- if문보다 가독성이 좋다.
- switch(피연산자) { case(조건): (연산) }
- case 조건 만족시 뒤에 있는 연산 수행
- case는 여러 개 설정 가능하다.
- 연산문의 마지막에 꼭 break;를 넣어줘야 한다.
- 안 넣을 시 과부하 걸려 먹통 됨.
반복문 - for, while, do-while
for 문
- for (초기값; 조건문; 증가연산) { (연산) }
- 특정 조건은 초기값과 조건문을 통해서 정의
- 반복할 때 만다 증가하려면 증가연산을 정의
- 조건문을 만족할 때까지 수행됨
향상된 for문
- for (변수 타입 변수 명 : 목록변수) { (연산) }
- 변수타입과 변수병은 for 문안에서 연산을 수행할 변수를 정의
- 배열을 사용하여 값 여러 개를 하나의 변수로 저장하고 싶을 때 사용
while 문
- 조건문만 명시하여 반복
- while(조건문) { (연산) }
- 조건문을 만족해야지만 연산이 반복수행
- 조건문이 불만족(false)이면 반복을 중단
do-while 문
- do { (연산) } while(조건문)
- 최초 1회 연산수행 후 조건문을 체크하여 더 반복할지 결정
- 반복하게 된다면 그 이후에는 한번 반복할 때마다 조건문을 체크해서 조건문이 불만족(false)이면 반복을 중단
break명령
- break; 명령을 호출하면 가장 가까운 블록의 for 문 또는 while 문을 중단합니다. (또는 switch)
- 반복문 안에서 break; 형태로 사용합니다.
continue 명령
- for 문 또는 while 문에서 해당 순서를 패스하고 싶을 때 continue 명령을 사용합니다.
- 반복문 안에서 continue; 형태로 사용합니다.
배열 (Array)
선언방법
- 타입 [ ] 변수;
- ex. int [] intArray;
- 타입 변수 [ ];
- ex. int intArray [];
생성방법
- 참조형 변수들처럼 new 명령을 통해서 생성하며, 대괄호[ ] 안에 크기를 지정
- 배열의 순서는 0번부터 시작한다.
- 배열이 생성될 때 각 타입별 초기값으로 채워진다. int는 0, boolean은 false, String는 null
- 참조형 변수이기 때문에 주소값을 저장한다. 실제값은 없음
순회
- 배열 안에 값을 하나씩 꺼내 쓰는 것을 순회라고 한다.
- 순회하는 방법은 반복문을 사용이 가장 일반적인 방법
- 대괄호 [ ] 안에 반복문 순번값 i를 넣어주면 됩니다.
. length() 메서드
length() 메서드는 배열이 지원하는 메서드로써 해당 배열의 길이값을 응답해 준다.
초기화
배열을 초기화할 때는 아래 3가지 방법이 있다.
- 중괄호{}를 사용해서 초기화
- 반복문 for문을 사용해서 초기화 (또는 향상된 for문)
- Arrays.fill 메서드를 사용해서 초기화
- Arrays 클래스는 Java에서 기본으로 제공하는 메서드가 담긴 클래스이다..
복사
- 얕은 복사
- 배열은 참조형 변수이며 실제값이 아닌 실제값의 주소값을 가진다.
- 배열 변수 간에 대임연산자 = 를 사용해서 복사를 하게 되면 주고 값만 복사된다.
- 이렇게 주소값만 복사되고 실제값이 1개만 있을 때 얕은 복사라고 한다,
주소값만 복사된다는 것은 변수명은 서로 다르지만 실제 값은 동일한다는 것이다.
- 깊은 복사
- 얕은 복사처럼 주소값만 가져오는 것이 아닌 값도 가져오는 것을 깊은 복사라 한다
- 반복문 for을 통해서 하나씩 꺼내서 복사해 주는 방법과 여러 메서드를 사용하는 방법이 있다.
- 이 부분은 코드를 통해 확인해 보자
// 깊은 복사
int[] a = { 1, 2, 3, 4 };
int[] b = new int[a.length];
for (int i = 0; i < a.length; i++) {
b[i] = a[i]; // 깊은 복사
}
b[0] = 3; // b 배열의 0번째 순번값을 3으로 수정했습니다. (1 -> 3)
System.out.println(a[0]); // 출력 1 <- 깊은 복사를 했기때문에 a 배열은 그대로 입니다.
// 깊은 복사 메서드
// 1. clone() 메서드
int[] a = { 1, 2, 3, 4 };
int[] b = a.clone(); // 가장 간단한 방법입니다.
// 하지만, clone() 메서드는 2차원이상 배열에서는 얕은 복사로 동작합니다!!
// 깊은 복사 메서드
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// 2. Arrays.copyOf() 메서드
int[] a = { 1, 2, 3, 4 };
int[] b = Arrays.copyOf(a, a.length); // 배열과 함께 length값도 같이 넣어줍니다.
}
}
String 배열
- 선언, 생성, 초기화
- 배열 중에서도 가장 많이 사용하게 될, 문자열 배열인, String 배열에 대해서 좀 더 자세히 알아봅시다.
- 선언하고 생성하는 방법은 기존 배열과 동일합니다.
String 배열 선언과 생성
// String 배열을 아래와 같이 선언과 생성할 수 있습니다.
String[] stringArray = new String[3];
String 배열의 초기화
// 선언 후 하나씩 초기화 할 수 있습니다.
String[] stringArray = new String[3];
stringArray[0] = "val1";
stringArray[1] = "val2";
stringArray[2] = "val3";
// 선언과 동시에 초기화 할 수 있습니다.
String[] stringArray1 = new String[]{"val1", "val2", "val3"};
String[] stringArray2 = {"val1", "val2", "val3"};
String 기능 활용 (= char 배열)
문자열 = 문자배열
문자배열은 연속된 문자인데… 이건 문자열이랑 같은 것 아닌가???라고 생각하실 텐데요!
맞습니다! char 배열은 “문자배열”이고 String 은 문자열입니다.
즉 수식으로 표현하면 아래와 같습니다.
- String = char [ ]
기본형 변수는 소문자로 시작하고 참조형 변수는 대문자로 시작
char배열에는 없는 String 만 가지고 있는 기능은 아래와 같습니다.
| 메서드 | 응답값 타입 | 설명 |
| length() | int | 문자열의 길이를 반환한다. |
| charAt(int index) | char | 문자열에서 해당 index의 문자를 반환한다. |
| substring(int from, int to) | String | 문자열에서 해당 범위(from~to)에 있는 문자열을 반환한다. (to는 범위에 포함되지 않음) |
| equals(String str) | boolean | 문자열의 내용이 같은지 확인한다. 같으면 결과는 true, 다르면 false가 된다. |
| toCharArray() | char[] | 문자열을 문자배열(char[])로 변환해서 반환한다. |
| new String(char[] charArr) | String | 문자배열(char[]) 을 받아서 String으로 복사해서 반환한다. |
다차원 배열
- 2차원 배열(2열 배열), 순회
- 1열로 구성된 배열, 이것은 말 그대로 1열로 되어있기 때문에 1열 배열 즉, 1차원 배열 이라고도 부릅니다.
- 1열 배열을 위로 쌓으면 2열 배열이 되고 이걸 2차원 배열이라고 합니다.
- 선언
- 2차원 배열을 선언할 때는 1차원 배열에 대괄호를 하나 더 추가해 주면 됩니다.
- int [ ][ ] array
- int array [ ][ ]
- int [] array [ ]
- 2차원 배열을 선언할 때는 1차원 배열에 대괄호를 하나 더 추가해 주면 됩니다.
- 생성
- 2차원 배열을 생성할 때도 대괄호를 하나 더 추가하면 됩니다.
- int [ ][ ] array = new int[ ][ ];
- 2차원 배열을 생성할 때도 대괄호를 하나 더 추가하면 됩니다.
- 초기화
- 2차원 배열을 초기화는 아래 2가지 방법이 있습니다.
// 중괄호를 사용해 초기화
int[][] array = {
{1, 2, 3},
{4, 5, 6}
};
// 반복문을 통한 초기화
int[][] array = new int[2][3]; // 최초 선언
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
arr[i][j] = 0; // i, j 는 위 노란색 네모박스 안에있는 숫자를 의미하며 인덱스 라고 부릅니다.
}
}
가변배열
행마다 다른 길이의 배열을 저장할 수 있는 배열을 가변 배열
// 가변 배열
// 선언 및 초기화
int[][] array = new int[3][];
// 배열 원소마다 각기다른 크기로 지정 가능합니다.
array[0] = new int[2];
array[1] = new int[4];
array[2] = new int[1];
// 중괄호 초기화할때도 원소배열들의 크기를 각기 다르게 생성 가능합니다.
int[][] array2 = {
{10, 20},
{10, 20, 30, 40},
{10}
};
컬렉션
컬렉션 기능 : 크기 자동조정/ 추가/ 수정/ 삭제/ 반복/ 순회/ 필터/ 포함확인 등….
- 컬렉션 종류
- Collection 에는 List, Set , Queue , Map 이 있습니다.
- List : 순서가 있는 데이터의 집합 (데이터 중복 허용) - 배열과 비슷
- Queue : 빨대처럼 한쪽에서 데이터를 넣고 반대쪽에서 데이터를 뺄 수 있는 집합
- First In First Out : 먼저 들어간 순서대로 값을 조회할 수 있다.
- Set : 순서가 없는 데이터의 집합 (데이터 중복 허용 안 함) - 순서 없고 중복 없는 배열
- Map : 순서가 없는 (Key, Value) 쌍으로 이루어진 데이터의 집합 (Key값 중복 허용 안 함)
❓ 자주 쓰는 참조형 변수 몇 개만 간단히 알아볼까요?
- int의 참조형 변수 = Integer
- long의 참조형 변수 = Long
- double의 참조형 변수 = Double
- String 은 원래부터 참조형 변수
List
순서가 있는 데이터의 집합 (데이터 중복 허용) - 배열과 비슷
ArrayList
ArrayList는 배열(Array)처럼 일렬로 데이터를 저장하고 조회하여 순번값(인덱스)으로 값을 하나씩 조회할 수 있습니다.
배열(Array)처럼 크기가 정해져 있지 않고 필요할 때마다 크기가 점점 더 늘어납니다.
- 기능
- 선언 : ArrayList <Integer> intList 형태로 선언합니다.
- 생성 : new ArrayList <Integer>(); 형태로 생성합니다.
- 초기화 : 사이즈를 지정하는 것이 없기 때문에 초기화가 필요 없습니다.
- 값 추가 : intList.add({추가할 값}) 형태로 값을 추가합니다.
- 값 수정 : intList.set({수정할 순번}, {수정할 값}) 형태로 값을 수정합니다.
- 값 삭제 : intList.remove({삭제할 순번}) 형태로 값을 삭제합니다.
- 전체 출력 : intList.toString() 형태로 전체 값을 대괄호[]로 묶어서 출력합니다.
- 전체 제거 : intList.clear() 형태로 전체 값을 삭제합니다.
LinkedList
LinkedList는 메모리에 남는 공간을 요청해서 여기저기 나누어서 실제값을 담아놓고, 실제값이 있는 주소값으로 목록을 구성하고 저장
- 특징
- 기본적인 기능은 ArrayList와 동일하지만 LinkedList는 값을 나누어 담기 때문에 모든 값을 조회하는 속도가 느립니다. 대신에, 값을 중간에 추가하거나 삭제할 때는 속도가 빠릅니다.
- 중간에 값을 추가하는 기능이 있습니다. (속도 빠름)
- 기능
- 선언 : LinkedList <Integer> linkedList 형태로 선언합니다.
- 생성 : new LinkedList <Integer>(); 형태로 생성합니다.
- 초기화 : 사이즈를 지정하는 것이 없기 때문에 초기화가 필요 없습니다.
- 값 추가 : linkedList.add({추가할 값}) 형태로 값을 추가합니다.
- 값 중간에 추가 : linkedList.add({추가할 순번}, {추가할 값}) 형태로 값을 중간에 추가합니다.
- 값 수정 : linkedList.set({수정할 순번}, {수정할 값}) 형태로 값을 수정합니다.
- 값 삭제 : linkedList.remove({삭제할 순번}) 형태로 값을 삭제합니다.
- 전체 출력 : linkedList.toString() 형태로 전체 값을 대괄호[]로 묶어서 출력합니다.
- 전체 제거 : linkedList.clear() 형태로 전체 값을 삭제합니다.
Stack
Stack 은 값을 수직으로 쌓아놓고 넣었다가 빼서 조회하는 형식으로 데이터를 관리합니다.
이걸 “나중에 들어간 것이 가장 먼저 나온다(Last-In-First-out)” 성질을 가졌다고 표현하며, 주로 상자와 비유해서 설명합니다.
- 특징
- 상자에 물건을 넣고 빼는 것처럼 밑에서 위로 쌓고, 꺼낼 때는 위에서부터 꺼내는 형식입니다.
- 그렇기 때문에 넣는 기능(push()) 과 조회(peek()), 꺼내는(pop()) 기능만 존재합니다.
- 이렇게 불편하게 쓰는 이유는 최근 저장된 데이터를 나열하고 싶거나 데이터의 중복처리를 막고 싶을 때 사용합니다.
- 기능
- 선언 : Stack <Integer> intStack 형태로 선언합니다.
- 생성 : new Stack <Integer>(); 형태로 생성합니다.
- 추가 : intStack.push({추가할 값}) 형태로 값을 추가합니다.
- 조회 : intStack.peek() 형태로 맨 위값을 조회합니다.
- 꺼내기 : intStack.pop() 형태로 맨 위값을 꺼냅니다. (꺼내고 나면 삭제됨)
Queue
Queue 은 빨대🥤처럼 한쪽에서 데이터를 넣고 반대쪽에서 데이터를 뺄 수 있는 집합입니다.
- 특징
- First In First Out : 먼저 들어간 순서대로 값을 조회할 수 있다.
- 그렇기 때문에 넣는 기능(add()), 조회(peek()), 꺼내는(poll()) 기능만 존재합니다.
- Queue는 생성자가 없는 껍데기라서 바로 생성할 수는 없습니다. (껍데기 = 인터페이스)
- 생성자가 존재하는 클래스인 LinkedList를 사용하여 Queue 를 생성해서 받을 수 있습니다.
// LinkedList 를 생성하면 Queue 기능을 할 수 있습니다. (Queue 가 부모/ LinkedList 가 자식이기 떄문) Queue<Integer> intQueue = new LinkedList<Integer>(); - 기능
- 선언 : Queue <Integer> intQueue 형태로 선언합니다.
- 생성 : new LinkedList <Integer>(); 형태로 생성합니다.
- 추가 : intQueue.add({추가할 값}) 형태로 값을 맨 위에 추가합니다.
- 조회 : intQueue.peek() 형태로 맨 아래값을 조회합니다.
- 꺼내기 : intQueue.poll() 형태로 맨 아래값을 꺼냅니다. (꺼내고 나면 삭제됨)
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을 주로 사용합니다.
Map
여태까지 value 값들만 넣어서 관리하는 분류통(자료구조)을 배웠다면 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 값을 기준으로 정렬을 할 수 있습니다. 다만, 저장 시 정렬(오름차순)을 하기 때문에 저장시간이 다소 오래 걸림
2주 차 강의는 이렇게 마쳤는데요.
내용이 많다 보니 몇 번 더 봐야겠습니다.
배열 이후 컬렉션부터는 다시 봐야겠어요. 생각보다 전채적인 내용이 많아서 컬렉션 부분은 한번 훑는 식으로 이런 게 있구나 정도로만 확인했습니다.
이후 강의를 다 듣고서 다시 한번 공부해야겠어요.ㅎㅎ
TIL을 이렇게 쓰는 게 맞는지 모르겠네요. 너무 공부한 거 일일이 다 적는 게 아닌지..
그래도 계속해서 매일매일 써보려 합니다.
바로 3주 차 강의 들으러 가볼게요!
'TIL(Today I Learned)' 카테고리의 다른 글
| [TIL] JAVA문법 (2023/10/19) (0) | 2023.10.19 |
|---|---|
| [TIL] 객체지향에 대해 배우다.(2023/10/18) (0) | 2023.10.18 |
| [TIL][내배캠_Spring_3기] Java문법(2023/10/17) (4) | 2023.10.17 |
| [TIL][내배캠_Spring_3기] Java문법(2023/10/16) (2) | 2023.10.17 |
| [TIL][내배캠_Spring_3기] Java문법(2023/10/12~13) (2) | 2023.10.13 |