진법 변환
- 진수는 8비트 기준으로 1, 2, 4, 8, 16 ... 배수로 나타냄
- 2진수: 11011000 = 1 + 2 + 8 + 16 = 27
- 16진수: 2진수에서 4개를 묶어서 읽기, 0 ~ 9 ABCdef 로 표현
00000110 = 2 + 4 = 06
10진수 | 숫자 |
2진수 | 0B 붙임 |
8진수 | 0 붙임 |
16진수 | 0x 붙임 |
10진수 ▶ n진수
//1. 10진법 ▶ 3진법
String a = ""; //값을 더해주려고
while(n > 0) { //n이 0보다 클때까지 반복
a = (n % 3) + a; //문자열 앞에 3으로 나눴을때 나머지를 더해줌
n /= 3; //반복하기 위해 n을 3으로 나눠줌
}
//2. Integer.toString(문자열, 진법) 사용
a = Integer.toString(n, 3);
//2진법 - toBinaryString(int i);
//16진법 - toHexString(int i);
//8진법 - toOctalString(int i);
- int는 전부 10진수로 인식하기 때문에 나머지 진수는 String으로 받아야 함
- Integer의 toString(int n, int radix)로 사용 가능
앞의 0이 출력되지 않을 때?
- 9를 2진법으로 변환하여 출력할 때, 1001이 나오는데 01001로 출력하고 싶음
- String.format() 사용
int num = 9;
String answer = Integer.toBinaryString(num); //1001
answer = String.format("%05d", Integer.parseInt(answer));
- "%05d" - 5자리 정수 내에 공백이 있으면 0으로 표시
- "%5d" - 정수가 5자리 미만이면 공백으로 표시
n진수 ▶ 10진수
//2. 3진법 ▶ 10진법
//Integer.parseInt(문자열, 진법)
//문자열 형태로 변환 후, 뒤에 진법을 써주면 10진수 기준으로 1, 3번 가능
answer = Integer.parseInt(reverse, 3);
return answer;
- Integer.parseInt(문자열, 진법)으로 사용 가능
비트 연산자
& | 두 비트 모두 1인 경우 = 1 |
| | 두 비트 중 하나라도 1이면 = 1 |
^ | 두 비트가 서로 다르면 = 1 |
~ | 비트 반전 |
- 기본적으로 이진수에서 사용되며, 비트 단위 연산을 수행하는데 주로 사용
int num1 = 5; // 이진수: 0101
int num2 = 3; // 이진수: 0011
int result = num1 | num2; // result는 7이 됨 (이진수: 0111)
https://school.programmers.co.kr/learn/courses/30/lessons/17681
StringBuilder & StringBuffer
- 두 클래스의 차이점은 동기화 여부
StringBuilder
- String(immutable)과 다르게 수정 가능(mutable)
String은 값을 수정하려면 다른 값을 가진 String에 대입해야함
String객체는 데이터에 변화가 생기면 기존 객체를 재활용하지 않고, 새로운 객체 생성 → 메모리 과소비 - 새로운 객체 생성 시 속도가 느려지는 현상 발생 측면에서 개선된 클래스 → 기존 객체 재활용, 속도 ↑
- 복잡하거나 반복적인 문자열 수정시 사용 - for, while문에서 문자열을 계속 추가해야 하는 경우
- 인스턴스를 생성할 때 버퍼의 크기를 충분히 주지 않으면 성능이 저하 됨 - 작업 중에 더 큰 배열이 추가로 생성됨
- String 클래스와 다르게 equals()를 오버라이딩 하지 않음 (중요)
- 동기화를 보장하지 않음 ▶ 상대적으로 동작 속도가 빠름
- 스레드에 안전한지 여부가 관계 없을 때 사용
StringBuilder sb = new StringBuilder();
sb.append("str1");
sb.append("str2");
String result = sb.toString();
주요 메서드
메서드 | 내용 | 기타 |
append() | 기존 문자열의 뒤에 문자열 추가 | 마지막에 추가 |
insert(시작할인덱스, 문자열) | 특정 위치에 문자열 추가 | 중간에 추가 |
delete() | 문자열 삭제 | |
deleteCharAt() | 특정 인덱스의 문자 하나를 삭제 | |
replace() | 문자열의 일부분 → 다른 문자열로 대체 | " " → "" 공백제거 |
setCharAt() | 문자열에서 주어진 index의 문자 → 다른 문자로 대체 | |
toString() | 객체의 값을 문자열로 반환 | |
reverse() | 문자열을 거꾸로 뒤집음 | |
capacity() | 인스턴스의 버퍼 크기를 알려줌 | length()는 담긴 문자열의 크기 |
a = new StringBuilder(a).reverse().toString();
//빌더 쓸 생각을 못함
StringBuffer
- StringBuilder와 호환
- thread - safethread - safe
- 동시에 객체에 접근했을 때, 동시성을 제어해주는 기능이 존재
- 멀티스레드를 이용하여 하나의 문자열을 수정할 필요가 있을 때 사용
- 스레드에 안전한 프로그램이 필요하거나 안전한지 모를 경우 사용
StringBuffer sb = new StringBuffer();
sb.append("str1");
sb.append("str2");
String result = sb.toString();
2022.10.18 - [프로그래밍 언어/Java] - [Java] API_ java.lang (문자열, Math 등)
[Java] API_ java.lang (문자열, Math 등)
JAVA API : application programming interface 미리 만들어진 기능인 라이브러리 API안에 많은 패키지들이 존재 (lang, util, IO 등) 메서드 모형 읽는 법 접근제어자 + (매개변수) + ;(결과)반환유형 - 클래스가 선
j-won950101.tistory.com
Collections
2022.10.26 - [프로그래밍 언어/Java] - [Java] API_ Collection Framework (List, Set, Map)
[Java] API_ Collection Framework (List, Set, Map)
JAVA API : application programming interface 미리 만들어진 기능인 라이브러리 API안에 많은 패키지들이 존재 (lang, util, IO 등) 메서드 모형 읽는 법 접근제어자 + (매개변수) + ;(결과) 반환 유형 - 클래스가
j-won950101.tistory.com
위의 세가지 클래스에서 reverse() 메서드 제공
2022.10.28 - [프로그래밍 언어/Java] - [Java] Nested Class, Lambda, Stream API(ArrayList)
2022.10.25 - [프로그래밍 언어/Java] - [Java] API_ java.util (Arrays 클래스 - search, date, calendar, random)
Arrays.stream
//문자열 sort
import java.util.*;
class Solution {
public String solution(String my_string) {
char[] charArr = my_string.toLowerCase().toCharArray();
Arrays.sort(charArr); //알파벳 순으로 정렬
String answer = String.valueOf(charArr);
return answer;
}
}
//int 리스트 ▶ int 배열
//1. 배열 사용
int[] answer = new int[list.size()];
for(int i = 0; i < list.size(); i++) {
answer[i] = list.get(i).intValue();
}
//2. stream 변환, intValue 메서드 사용 (Integer.intValue())
int[] answer = list.stream()
.mapToInt(Integer::intValue)
.toArray();
//3. stream 변환, 람다식
int[] answer = list.stream()
.mapToInt(i -> i)
.toArray();
//String 배열 ▶ int 배열
int[] answer = Arrays.stream(stringArray).mapToInt(Integer::parseInt).toArray();
//String 리스트 ▶ String 배열
String[] myArray = myList.toArray(new String[myList.size()]);
//기본
for(int i = 0; i < list.size(); i++) {
answer[i] = list.get(i);
}
Integer 리스트 > int 배열 변환
- String 타입의 리스트를 배열로 변환할 때는 toArray()를 사용하면 변환
- int형과 같은 primitive 타입은 toArray()를 사용할 수 없고, int형과 같은 primitive 타입은 아래의 방법을 통해 가능
https://velog.io/@deannn/Java-int%ED%98%95-ArrayList-%EB%B0%B0%EC%97%B4-%EB%B3%80%ED%99%98
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Heap] Priority Queue(우선 순위 큐) (0) | 2023.06.12 |
---|---|
[Java] Enum(열거형) (0) | 2023.06.08 |
[Java] 정규 표현식, Network (0) | 2022.10.31 |
[Java] Process - Thread, synchronized, deadLock, semaphore (0) | 2022.10.31 |
[Java] Comparable VS Comparator (0) | 2022.10.29 |