1) 증감 연산자
- ++ 또는 --를 붙이면 피연산자가 1 더해지거나 1 빼기가 된다.
- 주의할 점. 피 연산자 뒤에 붙이냐, 앞에 붙이냐에 따라 연산순서가 달라진다.
- 이처럼 대입 연산할 때 뿐만 아니라 연산을 직접할 때도 선/후 작용으로 나뉜다.
public class w06 {
public static void main(String[] args) {
// 대입연산자에서 주의해야 할 점!!
// ++, --
int a = 10;
int b = 10;
int val = ++a + b--;
System.out.println(a);
System.out.println(b);
System.out.println(val);
}
}
- result = 11, 9, 21
- why? 선/후 작용을 생각하지 않는다면 1 더해지고 1 빼졌기에 val = 20 이 나오겠지만
- b-- 는 10의 값을 먼저 계산한 후에 -1 을 해주었기에 val = 21이 나온다.
2) 삼항 연산자
// (2) 삼항연산자
// 비교연사자와 항상 함께 쓰인다.
// 비교연산자의 결과 : true or false -> 이 결과의 값에 따라 결정되는 무언가?
// 조건 ? 참 : 거짓
int x = 1;
int y = 9;
boolean b = (x == y) ? true : false;
System.out.println(b);
String s = (x != y) ? "정답" : "오답";
System.out.println(s);
int max = (x > y) ? x : y;
System.out.println(max);
int min = (x < y) ? x : y;
System.out.println(min);
- result : false, 정답, 9, 1 순서로 답이 나온다.
- why? 처음엔 1과 9는 다르기에 거짓이다. 그렇기에 false가 나온다.
- x 와 y 값은 엄연히 다르기 때문에 참이 되었고 그렇기에 앞에 있는 정답이 나온다.
- 위에 같은 방법으로 두 수를 비교할 수 있다.
3) if 문과 switch 문의 차이점.
- 차이점 1. 복합조건
- if 문은 복합조건을 지원한다.
- 복합조건 : 괄호() 안에 조건 여러개를 지정하여 조건문을 수행할 수 있다.
- if 문은 복합조건을 지원한다.
-
- switch 문은 피연산자 한개에 대한 조건만 지원.
- 차이점 2. 코드 중복
- if 문은 상대적으로 코드 중복이 많습니다.
- switch 문은 코드중복이 적습니다.
- 즉 상황에 따라 적절한 조건문을 사용해주면 되는데, 예를 들어 숫자를 입력하면 내가 원하는 계절이 나오게끔 하고 싶다면 switch 문이 더욱 적절하고, 사용자의 나이, 성별, 거주지 등 여러 조건에 맞추는 상황이라면 if 문을 사용하는 것이 좋다.
4) Collection
- Java에서 컬렉션은 배열보다 다수의 참조형 데이터를 더 쉽고 효율적으로 처리할 수 있는 기능을 많이 가지고 있다.
- 기능 : 크기 자동조정, 추가, 수정, 삭제, 반복, 순회, 필터, 포함확인 등...
- 컬렉션 종류.
- collection 에는 List, Set, Queue, Map 이 있다.
- List - 순서가 있는 데이터의 집합(데이터 중복 허용) - 배열과 비슷
- Queue - 빨대처럼 한쪽에서 데이터를 넣고 반대쪽에서 데이터를 뺼 수 있는 집합.
- First In First Out (FIFO) : 먼저 들어간 순서대로 값을 조회할 수 있다.
- Set - 순서가 없는 데이터의 집합(데이터 중복 허용 안함) - 순서없고 중복없는 배열
- Map - 순서가 없는(Key Value) 쌍으로 이루어진 데이터의 집합(Key값 중복 허용 안함)
- collection 에는 List, Set, Queue, Map 이 있다.
- 사용할 때 주의 사항.
- Collection은 기본형이 아닌 참조형 변수를 저장.
- int = Integer, long = Long, double = Double 등등..
4 - 1 ) List
public class Col1 {
public static void main(String[] args) {
// List
// 순서가 있는 데이터의 집합 => Array
// 처음에 길이를 몰라도 만들 수 있음!
// 1) Array -> 정적 배열
// 2) List(ArrayList) -> 동적배열(크기가 가변적으로 늘어난다)
// - 생성 시점에 작은 연속된 공간을 요철해서 참조형 변수들을 담아놓는다.
// - 값이 추가될 때 더 큰 공간이 필요하면 더 큰 공간을 받아서 저장하니깐 상관없다.
ArrayList<Integer> intList = new ArrayList<Integer>(); //선언 + 생성
intList.add(99);
intList.add(15);
intList.add(3);
System.out.println(intList.get(1));
// 2번째 있는 값(15)를 바꿔보자.
intList.set(1, 10);
System.out.println(intList.get(1));
// 삭제
intList.remove(0);
System.out.println(intList.get(0));
intList.clear();
System.out.println(intList.toString());
}
}
- result : 15, 10, 10, []
- .add 말 그대로 배열에 데이터 추가
- .get() 원하는 데이터 선택
- .set() 데이터 수정
- .remove() 삭제, clear() 전체 삭제
- .toString() 전체 출력
4 - 2 ) Linked List
public class Col2 {
public static void main(String[] args) {
// linked list
// 메모리에 남는 공간을 요청해서 여기 저기 나누어서 실제 값을 담아놔요.
// 실제 값이 있는 주소값으로 목록을 구성하고 저장하는 자료구조.
// 기본적 기능은 -> ArrayList와 동일
// Linked List는 값 -> 여기저기 나누어서 : 조회하는 속도가 느리다.
// 값을 추가하거나, 삭제할 때는 빠릅니다.
LinkedList<Integer> linkedList = new LinkedList<Integer>();
linkedList.add(5);
linkedList.add(10);
linkedList.add(3);
System.out.println(linkedList.get(0));
System.out.println(linkedList.get(1));
System.out.println(linkedList.get(2));
System.out.println(linkedList.toString());
linkedList.add(200);
System.out.println(linkedList.toString());
linkedList.add(2, 4);
System.out.println(linkedList.toString());
linkedList.set(1, 30);
System.out.println(linkedList.toString());
linkedList.remove(1);
System.out.println(linkedList.toString());
linkedList.clear();
System.out.println(linkedList.toString());
}
}
- result :
5
10
3
[5, 10, 3]
[5, 10, 3, 200]
[5, 10, 4, 3, 200]
[5, 30, 4, 3, 200]
[5, 4, 3, 200]
[]
용어는 List와 거의 동일.
4 - 3 ) Stack
public class Col3 {
public static void main(String[] args) {
// stack
// 수직으로 값을 쌓아놓고, 넣었다가 뺀다. FILO
// push, peek, pop
// 최근 저정된 테이더를 나열하고 싶거니, 데이터의 중복 처리를 막고 싶을 때 사용.
Stack<Integer> intStack = new Stack<Integer>();
intStack.push(10);
intStack.push(15);
intStack.push(1);
while(!intStack.isEmpty()) {
System.out.println(intStack.pop());
}
intStack.push(10);
intStack.push(15);
intStack.push(1);
System.out.println(intStack.peek());
System.out.println(intStack.size());
}
}
- result :
1
15
10
1
3 - .push() - 데이터 추가
- .peek() - 데이터 조회 , 맨 위 값을 조회
- .pop() - 꺼내기, 맨 위 값을 꺼냄
- .isEmpty - 비어져 있는 지.
4 - 3 ) Queue
public class Col4 {
public static void main(String[] args) {
// Queue : FIFO
// add, peek, poll
// Queue : 생성자가 없는 인터페이스 <-
Queue<Integer> intQueue = new LinkedList<Integer>(); //queue 선언, 생성
intQueue.add(1);
intQueue.add(5);
intQueue.add(9);
while (!intQueue.isEmpty()) {
System.out.println(intQueue.poll());
}
intQueue.add(1);
intQueue.add(5);
intQueue.add(9);
intQueue.add(10);
// peek
System.out.println(intQueue.peek());
System.out.println(intQueue.size());
}
}
- result :
1
5
9
1
4 - .add() - 추가
- .peek() - 조회, 맨 아래값을 조회
- .poll() - 꺼내기, 맨 아래값을 꺼냄
4 - 4 ) Set
public class Col5 {
public static void main(String[] args) {
// 집합 : 순서 없고 중복 없음.
// 순서가 보장되지 않는 대신 중복을 허용하지 않도록 하는 프로그램에서 사용할 수 있는 자료구조
// Set -> 그냥 쓸 수도 있음. 그러나 Hashset, Treeset 등으로 응용해서 같이 사용 가능
// Set은 생성자가 없는 껍데기라서 바로 생성할 수 없음!
// 생성자가 존재하는 Hashset을 이용해서 -> Set을 구현해 볼 수 있음.
Set<Integer> intSet = new HashSet<Integer>();
intSet.add(1);
intSet.add(12);
intSet.add(5);
intSet.add(9);
intSet.add(1);
intSet.add(12);
for(Integer value : intSet) {
System.out.println(value);
}
// contains
System.out.println(intSet.contains(2));
System.out.println(intSet.contains(5));
}
}
- result :
1
5
9
12
false
true - .add()
- .get()
- .remove()
- .contains() - 해당값이 포함되어있는지 boolean 값으로 응답 받음.
4 - 5 ) Map
public class Col6 {
public static void main(String[] args) {
// Map : key - value pair -> 중요
// Key라는 값으로 unique하게 보장되어야 함.
// Map -> Hashmap, Treemap 응용
Map<String, Integer> intMap = new HashMap<>();
// 키 값
intMap.put("일", 11);
intMap.put("이", 12);
intMap.put("삼", 13);
intMap.put("삼", 14); //중복 키
intMap.put("삼", 15); //중복 키
intMap.put("삼", 16);
// key 값 전체 출력(향상된 for문)
for (String key : intMap.keySet()) {
System.out.println(key);
}
// value 값 전체 출력(향상된 for문)
for (Integer key : intMap.values()) {
System.out.println(key);
}
System.out.println(intMap.get("삼"));
}
}
- result :
이
일
삼
12
11
16
16 - .put() - 추가, key에 value 값을 추가한다.
- .get()
- .keySet() - 전체 key값 조회
- .values() - 전체 value 조회
- .remove()
- length VS length() VS size()
- length
- length는 배열의 길이를 조회.
- length()
- 문자열의 길이를 조회
- size()
- 컬렉션 타입목록의 길이 조회
- length
'TIL > Java' 카테고리의 다른 글
TIL 2024-10-16 (Java 종합만 문법) (2) | 2024.10.16 |
---|---|
TIL 2024-10-15 (Java 문법 종합반) (2) | 2024.10.15 |
TIL 2024-10-14 (Java 문법 종합반) (2) | 2024.10.14 |
TIL 2024-10-11 (Java 문법 종합반) (0) | 2024.10.11 |
TIL 2024-10-08 (Java 문법 종합반) (3) | 2024.10.08 |