매번 새로운 변수 생성하기 vs 변수 재사용하기 (feat. 무엇이 더 효율적인가?)
·
Dev/JAVA
외부 변수 재사용 vs 내부 변수 신규 생성알고리즘 풀다 궁금해졌다반복문 외부에 변수를 생성 후 재사용하기 vs 반복문 내부에 변수 생성 및 사용무엇이 더 효율적일까...?방법 1 (반복문 외부에 변수 생성 및 재사용)StringTokenizer st;for (int i = 0; i 방법 2 (반복문 내부에 변수 생성 및 사용)for (int i = 0; i 결론- 보통은 [방법 2]가 더 효율적이라고 한다 (그리고 더 권장되는 방식)- 이유는 각 반복마다 새로운 st 참조 변수가 스택(Stack) 메모리에 생성되는데 - 이때 반복이 끝나면 해당 st 변수는 스택에서 사라짐 - 그 변수가 가리키던 객체는 참조가 없어지므로 가비지 컬렉션(Garbage Collection)의 대상 - 즉, ..
JAVA에서 삽입, 삭제가 빈번할 때 LinkedList가 더 좋다! 에 대한 오해와 진실
·
Dev/JAVA
알고리즘을 풀다가 헷갈려서 이렇게 정리하게 됐다결론부터 말하면 아래 두줄로 요약할 수 있다1) 이론적으로는 LinkedList가 유리해 보인다2) 그러나 실제로는 캐시 효율성과 최적화로 인해 ArrayList가 거의 모든 상황에서 더 좋다그러면 왜 JAVA에서 삽입, 삭제가 빈번할 때 LinkedList가 더 좋다고 하는 경우가 있을까이에 대한 의견을 정리해보면 삽입, 삭제시, LinkedList는 O(1)이 걸리고, ArrayList는 O(N)이 걸리기 때문이다 그런데 여기에는 함정이 몇개 숨어있다 (위 명제는 항상 참이 아니다)- LinkedList가 중간에 있는 노드를 지우고 싶으면 거기까지 탐색하는데 (최악의 경우) O(N)이 걸리게 된다- ArrayList가 맨 끝에서 삽입, 삭제 시엔 O(1)..
JAVA에서 부동소수점 유의사항 (feat. 알고리즘 풀이 시 필수 지식)
·
Dev/JAVA
하하하 빌어먹을 부동소수점생각보다 내가 생각한 것과 굉장히 다르게 나올 수 있음 주의 ㅠ코드public class Temp { public static void main(String[] args) { double testDouble = 0.58; int testInt = (int) (testDouble * 100); System.out.println(testDouble * 100); System.out.println(testInt); System.out.println((int) testDouble); }}결과57.99999999999999570이렇게 나오는 이유는?부동소수점 연산의 특성과 명시적 형 변환으로 발생! ​앞선 코드를 보..
JAVA 문자열 비교 방법 3가지 (feat. StringBuilder 주의사항)
·
Dev/JAVA
사소한데 자꾸 헷갈려서 정리해보았다구문비교 기준사용 상황예시 설명S.compareTo(T) == 0내용의 사전순 비교 (0이면 같음)정렬이나 정밀 비교문자열 값만 비교S.equals(T)내용 직접 비교"논리적으로 값이 같은지" 확인문자열 값만 비교S == T객체 참조(메모리 주소) 비교객체 자체가 같은지 확인주소까지 같아야 true숫자는 당연하게도 == 붙이면, 그냥 냅다 그 값(value)를 비교하는 것이라 문제 없다 결국 알고리즘 풀 때는, 대부분 값(내용)의 동일성을 비교하는 경우가 많기 때문에 equals을 쓰는게 낫겠다는 생각...
배열 인자들 비교, 정렬하는 방법 (feat. JAVA compareTo)
·
Dev/JAVA
배열 인자들도 implements Comparable로 비교 가능하다난 이게 되나 하면서, 구현하면서도 의심했는데...되는게 맞았다 (너무 당연한 소리일지도...?)날 믿었어야 했음 근데 지식이 어중간했기 때문에 틀린 것이다이건 뭐 공부 더해야한단 소리죠@Overridepublic int compareTo(Info o) { for (int i = 0; i 핵심이다배열의 인자를 순차적으로 비교하면서 오름차순으로 정렬할 수 있도록, 중간에 다른 값이 나오면 해당 지점에서 return 한다코드 전문import java.util.Arrays;import java.util.Collections;class Info implements Comparable { int num; int[] point; ..
Queue 구현 시, LinkedList보다 ArrayDeque를 추천하는 이유
·
Dev/JAVA
Q를 쓸 때는 LinkedList보단 ArrayDeque를 쓰도록 하자사유는 ArrayDeque가 메모리 사용 & 속도 면에서 더 효율적이기 때문이다- Q는 인터페이스고 이것을 구현하는 구현체가 LinkedList & ArrayDeque가 있음- 근데 ArrayDeque가 메모리 사용 & 속도 면에서 더 효율적이라고 함 (오늘의 핵심)- LinkedList는 참조 객체 관리 비용 때문에 메모리 사용이 높다고...더보기참조 객체 관리 비용이란? 한줄 요약 : 각 노드가 누구를 가리키고 있는지 기억해둬야고, 이것 자체가 관리 비용이라는 것 LinkedList는 각 노드(Node)가 다음/이전 노드를 가리키는 "참조(Reference)"를 저장하는 방식으로 연결됨이것 자체가 추가적인 메모리와 CPU 비용이 발..
Comparator vs Comparable 공통점과 차이점
·
Dev/JAVA
어째서 매번 기억이 나지 않는게야...Comparator vs Comparable을 매번 헷갈리고 구현해야하는 타이밍도 헷갈려한다이게 맞나? 아무리 암기보단 이해를 우선시한다지만, 솔직히 다섯번 넘게 헷갈리고 틀렸으면 이건 외워야하는 것이 맞다고 본다지금부터 외워보자(1) 우선 짚고 넘어가야 할 기본 정보Comparable과 Comparator는 모두 객체를 정렬하는 인터페이스(interface)이다But, 사용방법과 목적이 다르다(2) 그렇다면 둘의 차이점은?Comparable과 Comparator의 역할은 비슷한 것 같은데 아래 내용을 두줄 요약하면 아래와 같다Comparable은 자기 자신과 매개변수 객체를 비교하는 것 (비교 기준 1개만 작성 가능, `int compareTo(T o)`)Compa..