[3. 연산자]
연산자 우선순위
산술 > 비교 > 논리 > 대입
비트 연산
컴퓨터의 가장 작은 단위가 Bit이기 때문에 연산 중에서 Bit 연산이 가장 빠름
- << : 자릿수를 왼쪽으로 옮기는 횟수만큼 2의 배수로 곱셈 연산과 동일
- >> : 자릿수를 오른쪽으로 옮기는 횟수만큼 2의 배수로 나눗셈 연산과 동일
[4. 조건문, 반복문]
if문과 switch문의 차이점
1. if문은 복합 조건(괄호 안에 조건 여러개 지정가능)을 지원 / switch문은 피연산자 한개에 대한 조건만 지원
2. if문은 상대적으로 코드 중복이 많음 / switch문은 코드 중복이 적음
[5. 배열]
- 참조형 변수들처럼 new 명령을 통해서 생성하며 대괄호 안에 크기를 지정해줌
(참조형 변수이기 때문에 실제 값을 담지 않고 실제 값의 주소값 저장함)
ex) int array[] = new int[8];
- 초기값은 int는 0, boolean은 false, String은 null 값으로 초기화됨
- <배열 초기화 방법>
1. 중괄호 {} 사용
ex) int[] intArray = {1, 2, 3, 4, 5}, String[] stringArray = {"a", "b", "c", "d"};
2. for문 사용
3. Arrays.fill 메소드 사용
ex) Arrays.fill(intArray, 1); //배열의 모든 값을 1로 초기화
- <복사>
- 얕은 복사 → 주소값만 복사되고 실제 값은 1개로 유지되어서 요소값 변경 시 같이 변경됨
ex) int[] a = { 1, 2, 3, 4 }; int[] b = a; // 얕은 복사
- 깊은 복사 → 똑같은 실제 값을 가지는 배열 만들고 싶다면 깊은복사해야함
(1) for문 사용
(2) .clone() 사용 (단, 2차원이상 배열에서는 얕은 복사로 동작!)
(3) Arrays.copyOf(복사할배열, 배열.length)
String 배열
- char는 기본형 변수(소문자로 시작), String은 참조형 변수(대문자로 시작)이며 실제값의 주소값 저장함
- String을 더 많이 쓰는 이유 : 참조형 변수가 더 많은 기능 보유!
메소드 |
응답값 타입 |
기능 |
.length() |
int |
문자열 길이 반환 |
.charAt(int index) |
char |
해당 인덱스의 문자 반환 |
.substring(int from, int to) |
String |
문자열에서 해당 범위(from~to)에 있는 문자열을 반환 (to는 불포함) |
.equals(String str) |
boolean |
문자열 내용이 같으면 결과는 true, 다르면 false 반환 |
.toCharArray() |
char[] |
String → char[] 변환 |
new String(char[] charArr) |
String |
char[] → String 변환 |
다차원 배열
가변 배열
행마다 다른 길이의 배열 저장 가능
[6. 컬렉션]
- 배열보다 다수의 "참조형" 데이터를 더 쉽고 효과적으로 처리할 수 있는 기능 많이 가짐
: 크기 자동조정 / 추가 / 수정 / 삭제 / 반복 / 순회 / 필터 / 포함 확인 등
- 기본형 변수가 아닌 참조형 변수를 저장
- 컬렉션 종류 : List, Set, Queue, Map
List
순서가 있는 데이터의 집합 (데이터 중복허용) - 배열과 비슷
1. ArrayList
Array는 메모리에 연속된 공간을 요청한 사이즈만큼 받아서 실제 값을 저장하는 기본형 변수로 저장하는 정적배열,
ArrayList는 생성시점에 작은 연속된 공간을 요청해서 참조형 변수들을 담아놓고, 값이 추가될 때 더 큰 공간이 필요하면 받아서 저장하는 동적 배열이라 크기를 지정하지 않아도 됨.
- add(값) :추가, set(순번,값) :값 수정, remove(순번) :삭제 , toString() :[전체값출력] , clear() :전체값 삭제
2. LinkedList
메모리에 남는 공간을 요청해서 여기저기 나누어서 실제값을 담아놓고, 실제값이 있는 주소값으로 목록을 구성하고 저장
- 값을 나누어 담기 때문에 모든 값을 조회하는 속도가 느리지만, 값을 중간에 추가/삭제 시 속도 빠름
- add(값) :추가, add(순번,값) : 중간에 추가, set(순번,값) :값 수정, remove(순번) :삭제 ,
toString() :[전체값출력] , clear() :전체값 삭제
3. Stack (LIFO)
최근 저장된 데이터를 나열하고 싶거나 데이터의 중복 처리를 막고 싶을 때 사용
- push(값) :추가, peek() :맨위값 조회, pop() :맨위값 꺼냄
Queue (FIFO)
생성자가 없는 인터페이스 (LinkedList 사용)
- add(값) :추가, peek() :맨아래값 조회, poll() :맨아래값 꺼냄
Set
순서가 없는 데이터의 집합 (데이터 중복허용X) - 순서 없고 중복 없는 배열
- 그냥 Set으로도 쓸 수 있지만 HashSet, TreeSet 등으로 응용하여 사용가능
- HashSet : 가장 빠름, 순서 전혀 예측불가
- TreeSet : 정렬된 순서대로 보관하며 정렬 방법 지정가능
- LinkedHashSet : 추가된 순서, 또는 가장 최근에 접근한 순서대로 접근 가능
- 보통 HashSet 쓰는데, 순서보장 필요 시 LinkedHashSet 사용
- 생성자가 없는 인터페이스
- add(값) :추가, remove(값) :삭제, contains(값) :포함 확인으로 boolean반환
Map
순서가 없는 (Key,Value)쌍으로 이루어진 데이터의 집합 (Key값 중복 허용X)
- key값 기준으로 value 조회 (key값 중복X!)
- 그냥 Map으로도 쓸 수 있지만 HashMap, TreeMap 등으로 응용하여 사용가능
- HashMap : 중복 허용X, 순서보장X, key와 value로 null 허용
- TreeMap : key값 기준 정렬 가능, 저장 시 정렬(오름차순)하기 때문에 저장시간 다소 오래걸림
- put(key,value) :key에 value값 추가, get(key) :key에 대한 value값 조회, keySet() :전체 key값들 조회,
values() :전체 value값들 조회, remove(key) :key에 대한 value값 삭제
길이값 반환
1. length
- 배열의 길이 조회
- arrays(int[], double[], String[])
2. length()
- 문자열의 길이 조회
- String related Object(String, StringBuilder etc)
3. size()
- 컬렉션 타입 목록의 길이 조회
- Collection Object(ArrayList, Set etc)