코테를 위한 자바
Collections
- List
- ArrayList : 메모리상에 연속적으로 존재함
- LinkedList
- Set
- HashSet : 중복을 허용하지 않고 순서가 없음
- LinkedHashSet : 중복을 허용하지 않고 순서가 있음
- TreeSet : 중복을 허용하지 않는 Binary Search Tree
List
public static void main(String[] args) throws InterruptedException {
int[] array = {1,2,3,4,5};
int[] array1 = new int[] {1,3,5,7,9};
int[] array2 = new int[5];
// 2차원 배열
int[][] array3 = {{1,2,3,4}, {5,6,7,8}};
}
int[] -> Integer[] 변환
int[] list = {4,2,2,1,3,4};
Integer[] result = Arrays.stream(list)
.boxed() // 레퍼런스 타입으로 변환
.distinct() // 중복제거
.toArray(Integer[]::new); // Integer형 배열로 변환
Arrays.sort(result, Collections.reverseOrder());
int[] result2 = Arrays.stream(result).mapToInt(Integer::intValue).toArray();
ℹ️
sort() 함수는 T 타입을 인자로 받는데 Java에서 Generic은 primitive type을 지원하지 않기 때문에 boxed()를 사용하여 reference type으로 변환해야 한다.
Arrays
Arrays.sort(a)
배열을 정리한다.
char[] c = new char[]{'c','b','d','a'};
Arrays.sort(c);
System.out.println(c);
Set
List to Set
String[] str1 = new String[]{"hihi"};
List<String> str2 = Arrays.asList(str1);
HashSet<String> set = new HashSet<String>(str2);
// Set<String> set = new HashSet<>(Arrays.asList(str1)); // 이 방법으로도 가능
Set.contains(a)
Set이 a를 포함하고 있는지 확인한다.
if(!ban.contains(w)) {}
.sort(a, b)
- 1 : b가 앞으로 와야함
- 0 : 순서 바꾸지 않음
- -1 : b가 뒤로 가야함
ArrayDeque
public static void main(String[] args) {
ArrayDeque<Integer> q = new ArrayDeque<>();
q.addFirst(1);
q.add(2);
q.addFirst(3);
q.add(5);
System.out.println(q.pollLast()); // 5
System.out.println(q.pollFirst()); // 3
System.out.println(q.peekFirst()); // 1
System.out.println(q.peekLast()); // 2
System.out.println(q.size()); // 2
}
java 8 버전 toList(), toArray()
a
import java.util.*;
import java.util.stream.Collectors;
int[] test = {1,2,3,4};
List<Integer> temp = Arrays.stream(test).boxed().collect(Collectors.toList());
Stack
import java.util.*;
public class Main {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<Integer>();
stack.push(5);
System.out.println(stack.size()); // 스택 사이즈 출력
System.out.println(stack.peek()); // 가장 최근에 넣은 항목 출력
System.out.println(stack.pop()); // 가장 최근에 넣은 항목 뽑음
System.out.println(stack.isEmpty()); // 비었는지 확
}
}
String
String
a.compareTo(b)
두 문자열을 비교한다.
- 0 : 같음
- 양수 : a가 더 큼
- 음수 : b가 더 큼
// 문자열 길이로 정렬, 만약에 같으면 사전순으로 정렬
letterList.sort((a,b) -> {
if (a.length() == b.length()) {
return a.compareTo(b);
} else {
return a.length() - b.length();
}
});
chartAt()
문자열에서 특정 인덱스에 있는 문자를 반환한다.
String s = "Hello";
char c = s.charAt(1); // e
replace()
문자열에서 특정 문자를 다른 문자로 바꾼다.
String s = "Hello";
String s2 = s.replace('e', 'a'); // Hallo
split()
첫 번째 인자 기준으로 나눈다. 2번째 인자가 있으면 그만큼 나눈다.
String s = "abc def ghi jkl hml nop";
String[] s2 = s.split(" "); // [abc, def, ghi, jkl, hml, nop]
s2 = s.split(" ", 2); // [abc, def ghi jkl hml nop]
s2 = s.split(" ", 3); // [abc, def, ghi jkl hml nop]
위는 2가 들어갔으므로 2개가 될 때까지 나누는데 처음에 들어간 abc에서 한 번 나눴을 때 두 개의 문자열이 되므로 더 이상 나누지 않는다.
.replaceAll(a, b)
a를 모두 b로 변경
// 정규표현식 \\W는 문자, 숫자, 밑줄(_)을 제외한 모든 문자를 나타낸다. (공백, 구두점도 포함)
String[] words = paragraph.replaceAll("\\W+", " ").toLowerCase().split(" ");
substring(x, y)
String의 x 이상 인덱스부터 y 미만 인덱스까지 반환한다.
String s = "Hello";
String s2 = s.substring(1, 3); // el
.toCharArray()
String s = "abcdefg";
char[] c = s.toCharArray();
char a = "c"; // 컴파일 에러
char b = 'c';
StringBuilder
StringBuilder("Some String").reverse()
문자열을 뒤집는다.
String s = "Hello";
String s2 = new StringBuilder(s).reverse().toString(); // olleH
Character
Character.toLowerCase()
문자를 소문자로 변환한다.
String s = "Hello";
char c = Character.toLowerCase(s.charAt(1)); // e
Character.toUpperCase()
문자를 대문자로 변환한다.
String s = "Hello";
char c = Character.toUpperCase(s.charAt(1)); // E
Character.isLetterOrDigit()
문자 또는 숫자인지 확인한다.
String s = "Hello";
boolean b = Character.isLetterOrDigit(s.charAt(1)); // true
Map
디폴트 밸류가 있는지 확인하고 없으면 0 반환
HashMap<String, Integer> map = new HashMap<>();
int value = map.getOrDefault("hi", 0);
가장 높은 밸류를 가진 키 찾기
Map<String, Integer> counts = new HashMap<>(
) {{
put("hi", 1);
put("im", 2);
put("fine", 3);
put("and", 4);
}};
String maxValue = Collections.max(counts.entrySet(), Map.Entry.comparingByValue()).getKey();
밸류 순으로 정렬된 키 리스트
Map<String, Integer> counts = new HashMap<>() {{
put("hi", 1);
put("im", 2);
put("fine", 3);
put("and", 4);
}};
List<String> sortedKeys = counts.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue()) // value를 기준으로 오름차순 정렬
.map(Map.Entry::getKey) // key 추출
.collect(Collectors.toList()); // List로 수집
Math
- round : 소수점 첫째 자리에서 반올림
double a = Math.round(1.0502);
System.out.println(a); // 1.0
- pow : 제곱
int a = Math.pow(2, 5); // 32
- ceil : 소수점 뒤에 1이상의 숫자가 있으면 올림
Math.ceil(10.0); // 10.0
Math.ceil(10.1); // 11.0
Math.ceil(10.9); // 11.0
- sqrt : 제곱근
long a = Math.sqrt(16); // 4
- log : 자연로그 함수 (밑이 e)
double a = Math.log(10); // 2.302585092994046
- log10 : 상용로그 함수 (밑이 10)
double a = Math.log10(100); // 2.0
- abs : 절대값
int a = Math.abs(-10); // 10