전체 보기

코테에서 내가 쓰는 자바 문법

작성일자
2023/05/05
태그
PS
프로젝트
책 종류
1 more property

1. 자료구조

1) 스택

Stack<Integer> stack = new Stack<>(); : 선언
push(): top에 삽입
pop(): top을 삭제&확인
peek(): top을 확인

2) 큐

Queue<Integer> queue = new LinkedList<Integer>(); : 선언
add(): rear에 삽입
poll(): front를 삭제&확인
peek(): front를 확인

3) 우선순위 큐

PriorityQueue<Integer> pq = new PriorityQueue<>(); : 선언
add() : rear에 삽입
remove() : front를 삭제&확인

2. 자료형

1) StringBuffer

StringBuffer bf = new StringBuffer(); bf.append("fds"); System.out.println(bf.toString());
Java
복사
String str = "abcde"; // reverse StringBuffer sb = new StringBuffer(str); String reversedStr = sb.reverse().toString();
YAML
복사

2) String

s.length()
string.charAt(), indexOf(), lastIndexOf(), length()
indexOf(char ch, int fromIndex)
str.charAt(0)이면 첫 글자
str.charAt(str.length()-1) 이면 마지막 글자
int findIndex = strValue.indexOf("Java", 10); 10번째 위치부터 찾기
str1.equals(str2)
String s = “010-5360-4256”; String[] s = str.split(”-”);
String s = s.repeat(10);
for(char c : skip.toCharArray())
str.toUpperCase();
Character.toUpperCase(’t);
str.trim(); // 공백 제거
String str = new StringBuffer(String.valueOf(12345)).reverse().toString(); return Stream.of(str.split("")).mapToInt(Integer::parseInt).toArray(); -> [5,4,3,2,1]
Java
복사
정규표현식
"."(dot)을 기준으로 문자열을 나누고 싶다면
FileName.split("\\.")[0]
HTML
복사
이렇게 사용하면된다.
* 참고 : 위와 같이 "\\" 처리 해줘야하는 문자들 **
물음표(?), 별(*), 더하기(+), 괄호( '(' , ')' ), 대괄호( '[' , ']' ), 중괄호( '{' , '}' )

3) Array

a.length
int[] arr = { 1, 2, 3, 4, 5 }; System.out.println(Arrays.toString(arr)); // 출력 Arrays.sort(arr); // 정렬 Arrays.copyOf(num_list, 5); // 5까지 복사 Arrays.fill(arr, -1); // -1로 전부 초기화 int[] arr1 = Arrays.copyOfRange(arr, 0, 3); // 슬라이스 -> 1,2,3 int[] arr2 = arr.clone();
Java
복사
2차원 배열의 열 기준으로 오름차순 정렬
int[][] arr = new int[n][2]; Arrays.sort(arr, new Comparator<int[]>() { public int compare(int[] s1, int[] s2) { if (s1[0] == s2[0]) { return s1[1] - s2[1]; } else { return s1[0] - s2[0]; } } } Arrays.sort(arr, (s1, s2) -> { if (s1[0] == s2[0]) { return s1[1] - s2[1]; } else { return s1[0] - s2[0]; } });
Java
복사
compare 메소드는 두 객체를 비교하고, 첫 번째 객체가 두 번째 객체보다 "작을 때" 음수를, "같을 때"는 0을, "클 때"는 양수를 반환해야 함
인자가 a, b일 때 a-b로 두면 a가 더 작을 때 음수가 되고 a를 앞에 두게 되어 오름차순 정렬이 되고,
b-a로 두면 a가 더 클 때 음수가 되고 a를 앞에 두게 되어 내림차순 정렬이 된다.
array stream
도입 전
int i=0; Form[] formList = new Form[infoList.length]; for(String info: infoList) { formList[i++] = Form.createInfoForm(info); }
Java
복사
도입 후
Form[] formList = Arrays.stream(infoList) .map(Form::createInfoForm) .toArray(Form[]::new);
Java
복사

4) ArrayList

al.size()
ArrayList<Integer>[] A = new ArrayList[N+1]; // ArrayList형 배열 선언 // 초기화 for(int i=1; i<=N; i++) { A[i] = new ArrayList<Integer>(); } ArrayList<Integer> B = new ArrayList<Integer>(); // ArrayList 선언 및 초기화 A[S].add(E); // 값 추가 B.add(E) // 정렬 for(int i=1; i<=N; i++) { Collections.sort(A[i]); } Collections.sort(B); // ArrayList 값들 조회 for(int i: B) { ... } // 값 찾기 A.indexOf(3);
Java
복사

5) HashSet

HashSet<String> set = new HashSet<String>(); set.add("a"); String[] strArr = ...; Set<String> set = new HashSet<>(Arrays.asList(strArr));
Java
복사
String[] a = { "apple", "banana", "xylophone" }; String[] b = { "banana", "carrot", "dog", "xray", "xylophone" }; Set<String> setA = new HashSet<>(Arrays.asList(a)); Set<String> setB = new HashSet<>(Arrays.asList(b)); ArraySet arraySet = new ArraySet(); arraySet.retainAll(setA, setB);
Java
복사

6) HashMap

HashMap<Integer,String> map = new HashMap<Integer,String>(); map.put(1,"b");
Java
복사
map.forEach((key, value) -> { System.out.println(key + " : " + value); });
Java
복사
String getName = (String) hashMap.get("name"); // key to value
Java
복사

7) LinkedList

String[] players = {"안녕","나야"}; LinkedList<String> list = new LinkedList<String>(Arrays.asList(players)); list.addFirst(1);//가장 앞에 데이터 추가 list.addLast(2);//가장 뒤에 데이터 추가 list.add(3);//데이터 추가 list.add(1, 10);//index 1에 데이터 10 추가 for(Integer i : list) { //for문을 통한 전체출력 System.out.println(i); } System.out.println(list.contains(1)); //list에 1이 있는지 검색 : true System.out.println(list.indexOf(1)); //1이 있는 index반환 없으면 -1 String[] stringArray = list.toArray(new String[0]);
Java
복사

3. 형변환

배열과 List 변환

// 문자열 배열을 List로 변환 String[] arr = "abcde"; List<String> list = new ArrayList<>(Arrays.asList(arr)); // List를 문자열 배열로 변환 List<String> list = new ArrayList<>(); String[] arr = list.toArray(new String[list.size()]); // 정수 배열을 List로 변환 int[] fnumbers = { 1123, 1412, 23, 44, 512132 }; List<Integer> numberList = new ArrayList<>(); for (int number : numbers) { numberList.add(number); } // List를 정수 배열로 변환 List<Integer> list = new ArrayList<>(); int[] arr = list.stream().mapToInt(i->i).toArray();
Java
복사

String에서 다른 자료형으로 변환하기

String sNum = "1234"; // String -> int int i1 = Integer.parseInt(sNum); int i2 = Integer.valueOf(sNum); // String -> double, float, long, short (형태 전부 같음) double d1 = Double.parseDouble(sNum); double d2 = Double.valueOf(sNum); // String -> char[] char[] c1 = sNum.toCharArray();
Java
복사

다른 자료형에서 String으로 변환하기

// int, double, float, long, short, char[] -> String (형태 전부 같음) String str = String.valueOf(i1); // char[] => String for(int i=0; i<c1.length; i++) str += String.valueOf(c1[i]);
Java
복사
// char to int int i1 = c1 - '0';
Java
복사

진법 변환

Integer.toString(25,3) // 10 -> 3 Integer.parseInt("10001",3) // 3 -> 10
YAML
복사

Reverse

4. Math

Math.pow(3,2)=3^2, Math.sqrt(9)=root(9)=3
반올림, 올림, 버림
Math.round(12.345*100)/100 // 12.35
Math.ceil(12.345*100)/100 // 12.35
Math.floor(12.345*100)/100 // 12.34
public boolean sosu(int n) { if(n < 2) return false; for(int i=2; i<= (int)Math.sqrt(n); i++) { if(n % i == 0) return false; } return true; }
SQL
복사
Math.abs(-3.14)=3.14

5. 입출력

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); bw.write(...); bw.newLine(); ... bw.flush(); // 한 번에 출력
Java
복사

6. 날짜 시간

String to LocalDate
String dateString = "2022.01.03"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd"); LocalDate localDate = LocalDate.parse(dateString, formatter);
YAML
복사
덧셈뺄셈
public static void main(String args[]) { LocalDate todayLocalDate = LocalDate.now(); System.out.println("오늘 날짜: " + todayLocalDate); LocalDate fiveYearsAfterLocalDate = todayLocalDate.plusYears(5); System.out.println("5년 뒤: " + fiveYearsAfterLocalDate); LocalDate tenMonthsAfterLocalDate = todayLocalDate.plusMonths(10); System.out.println("10개월 뒤: " + tenMonthsAfterLocalDate); LocalDate threeWeeksAfterLocalDate = todayLocalDate.plusWeeks(3); System.out.println("3주 뒤: " + threeWeeksAfterLocalDate); LocalDate twentyAfterLocalDate = todayLocalDate.plusDays(20); System.out.println("20일 뒤: " + twentyAfterLocalDate);
YAML
복사

알고리즘

dfs, bfs, permutation
import java.util.LinkedList; import java.util.Queue; public class Test { public static void main(String[] args) { playDfs(); playBfs(); playPerm(); } public static void playDfs() { int n = 4; boolean[] visited = new boolean[n + 1]; int[][] map = { {0, 0, 0, 0, 0}, {0, 0, 1, 1, 0}, // 노드 1이 노드 2, 3과 연결됨 {0, 1, 0, 0, 1}, // 노드 2가 노으 1, 4와 연결됨 {0, 1, 0, 0, 1}, {0, 0, 1, 1, 0} }; dfs(1, n, visited, map); // 1번 노드에서 시작, 4개의 노드, 빈 방문기록[5], 지도[5][5] System.out.println(); } public static void playBfs() { int n = 4; boolean[] visited = new boolean[n + 1]; int[][] map = { {0, 0, 0, 0, 0}, {0, 0, 1, 1, 0}, {0, 1, 0, 0, 1}, {0, 1, 0, 0, 1}, {0, 0, 1, 1, 0} }; bfs(1, n, visited, map); // 1번 노드에서 시작, 4개의 노드, 빈 방문기록[5], 지도[5][5] System.out.println(); } public static void playPerm() { int n = 3; int[] input = {1, 2, 3}; int[] output = new int[n]; boolean[] visited = new boolean[n]; perm(input, output, visited, 0, n, 3); // 입력[3], 출력[3], 빈 방문기록[3], 0, nCr(n개 중 r개 고름) System.out.println(); } private static void dfs(int i, int n, boolean[] visited, int[][] map) { visited[i] = true; System.out.println(i + " "); for (int j = 1; j < n + 1; j++) { if (map[i][j] == 1 && !visited[j]) { dfs(j, n, visited, map); } } } private static void bfs(int i, int n, boolean[] visited, int[][] map) { Queue<Integer> q = new LinkedList<>(); q.add(i); visited[i] = true; while (!q.isEmpty()) { int temp = q.poll(); System.out.println(temp + " "); for (int j = 1; j < n + 1; j++) { if (map[temp][j] == 1 && !visited[j]) { q.offer(j); visited[j] = true; } } } } private static void perm(int[] input, int[] output, boolean[] visited, int depth, int n, int r) { if (depth == r) { for (int i = 0; i < r; i++) { System.out.print(output[i] + " "); } System.out.println(); return; } for (int i = 0; i < n; i++) { if (!visited[i]) { visited[i] = true; output[depth] = input[i]; perm(input, output, visited, depth + 1, n, r); visited[i] = false; } } } }
Java
복사
TODO
2-2 자료구조 때 배운 그래프 자바로 링크드리스트로 구현과 배열로 구현 둘다 연습해보며 복습…… (완벽히 기억 나지 않아서 코테에서 낭패봤음 ㅠ)
스택/큐로 후위 연산 구현하는 것도 자바로 다시 해보기