반응형
평소 C++을 코테 주 언어로 사용하는데, 백엔드 직무의 경우 Java로 코테를 응시해야 하는 경우가 있어 벼락치기용으로 Java 문법을 정리하고자 한다. (틈틈이 업데이트 중)
입출력
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
String str = br.readLine();
System.out.println(n);
System.out.println(m);
System.out.println(k);
System.out.println(str);
}
}
- BufferedReader가 Scanner보다 빠르다.
- 정수 타입 변수인 n, m, k를 저장할 때 str.nextToken()의 결과는 String 타입이고, 숫자 타입으로 저장하기 위해 parseInt 과정이 필요하다.
length, length(), size()
- length: 배열의 길이
- length(): 문자열(String)의 길이
- size(): 컬렉션의 요소의 개수
int[] numbers = {1, 2, 3, 4, 5};
System.out.println(numbers.length);
String text = "Hello, World!";
System.out.println(text.length());
ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("B");
System.out.println(list.size());
String
문자열 뒤집기
String str = "abcde";
StringBuffer sb = new StringBuffer(str);
str = sb.reverse().toString();
문자열 비교
==의 경우 참조 주소를 비교하므로, 값을 비교할 때는 equals()를 사용하자
2차원 ArrayList를 배열로 변환
int[][] answer = new int[arr1.length][arr1[0].length];
for (int i = 0; i < result.size(); i++) {
for (int j = 0; j < result.get(0).size(); j++) {
answer[i][j] = result.get(i).get(j);
}
}
ArrayList 정렬
// 오름차순
Collections.sort(list);
// 내림차순
Collections.sort(list, Collections.reverseOrder());
// 커스텀 정렬 with 람다식
list.sort((Integer a, Integer b) -> {
return a - b;
});
Pair
자바에는 C++의 pair나 tuple 같은 자료형을 제공하지 않으므로 클래스로 직접 구현해야 한다.
static class Pair {
int x;
int y;
Pair(int x, int y) {
this.x = x;
this.y = y;
}
}
Queue<Pair> q = new LinkedList<>();
q.offer(new Pair(1, 2));
큐와 우선순위 큐
- offer(): 원소 추가, 값 추가 실패 시 false 반환
- poll(): 첫 번째 값을 반환하고 제거, 비어있으면 null
- peek(): 값을 꺼내지 않고 확인만
add, remove는 실패 시 에러가 발생하므로 offer, poll을 사용하자. 큐와 우선순위 큐 둘 다 함수는 동일하다.
큐를 구현할 때 구현체로 LinkedList와 ArrayDeque를 사용할 수 있지만, 메모리와 속도 측면에서 ArrayDeque가 더 많은 장점을 가지고 있다.
// 큐 선언
Queue<Integer> q = new ArrayDeque<>();
// 우선순위 큐 선언 1 (작은 숫자 먼저)
PriorityQueue<Integer> pq = new PriorityQueue<>();
// 우선순위 큐 선언 2 (큰 숫자 먼저)
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
q.offer(1);
q.offer(6);
q.offer(2);
while(!q.isEmpty()) {
System.out.println(q.poll());
}
HasmMap 순회
Map<String, String> map = new HashMap<>();
for (String key : map.keySet()) {
map.get(key);
}
리스트 회전
List<Integer> arr = new ArrayList<>();
for (int i = 0; i < 5; i++) {
arr.add(i);
}
System.out.println(arr); // [0, 1, 2, 3, 4]
Collections.rotate(arr, 1);
System.out.println(arr); // [4, 0, 1, 2, 3]
반응형