반응형 분류 전체보기714 TreeMap vs HashMap vs LinkedHashMap 개요 Java의 Collections 중에 Map이 있습니다. 평소에는 코딩 테스트에서 HashMap만 주로 사용하다보니 다른 Map은 접할 기회가 적었는데, 이번 시간에 한번 정리해보겠습니다. 목차 Map의 특징 key 저장순서 Map 종류별 특징 시간복잡도, 구현방식 Map의 특징 기본적으로 Map은 한 쌍으로 저장하는 방식이며 key를 통해서 value를 조회하는 구조입니다. Map은 구현방식에 따라 크게 3가지로 나뉘는데, key를 저장하는 순서와 조회 / 저장 시간복잡도에 따라서 갈립니다. 먼저 key의 저장순서를 먼저 알아보겠습니다. void insertAndPrint(AbstractMapmap){ int[] array = {1,-1,0}; for(int x: array){ map.put(x,.. 2020. 8. 25. DP 동적 프로그래밍은 Dynamic Programming이며 짧게 DP라고 줄여서 부릅니다. 이름 자체가 "동적" " 역동성" 이어서 난이도가 높아보이고 용어가 어려워 보이지만 그렇게 무서워할만한 파트는 아닙니다. 오히려 한번 감을 잡으면 아주 쉽게 풀 수 있습니다.(?) 동적 프로그래밍은 재귀적 알고리즘과 반복적으로 호출되는 부분으로 찾아내는 것이 관건입니다. 이를 찾은 뒤에 나중을 위해서 현재 결과를 캐쉬에 저장하면 됩니다. 캐쉬라는 것은 별 것 아니고 쉽게 말해 배열에 현재 결과 값을 저장하고 다음에 해당 값이 필요해지면 바로 꺼내 쓰기 위한 것입니다. 가장 흔한 예시로는 피보나치 수열이 있는데 아래 사진을 보면서 DP의 위력을 비교해보겠습니다. 문제를 해결할 때 N부터 시작하여 하위로 내려가는 방식을.. 2020. 8. 24. Interface vs Abstract Class 개요 Interface와 Abstract class는 쓰임새와 모양이 비슷합니다. 이번 기회에 2개의 문법적인 차이가 어떤 것이 있는지 알아보도록 하겠습니다 Interface 특징 interface PlayingCard { public static final int SPADE = 4; final int DIAMOND = 3; //항상 앞에 public static final이 붙는다 public abstract String getCarNumber(); String getCardKind(); // 항상 앞에 public abstract가 붙는다 default void newMethod() {} // default 메서드 static void something() {} // static 메서드 } - 추상 .. 2020. 8. 23. JIT Compiler 개요 흔히 개발자들이 작성하는 고수준 언어를 컴퓨터가 알아듣는 이진법의 저수준 기계어로 변환할 때 Compiler와 Interpreter 방식을 사용한다고 알고 있습니다. 그 중에서도, 자바의 JVM에서는 Interpreter 방식 뿐만 아니라 JIT 방식도 있다고 하는데, 정확한 차이를 잘 알지 못했습니다. 따라서 그 방식이 왜 나오게 돼었는지 이번 글에서 확인해보고자 합니다. JIT Compiler JIT은 Just In Time을 의미하는 용어로 JVM이 Byte-code를 해석할 때 사용하는 방식 중 하나로 Interpreter의 단점을 보완하기 위해 만들어진 Compiler입니다. 그렇다면 먼저 기존의 Interpreter 방식을 알아볼까요? Interpreter 방식은 Runtime 시, "명.. 2020. 8. 16. Hash 충돌 회피 알고리즘 개요 Hash 충돌에는 다양한 회피 알고리즘이 있습니다. 더 나은 성능을 위해서 계속 성능이 좋은 방식으로 진화하고 있으며, 대표적으로 HashMap에서 사용됩니다. 하지만 항상 최신 방법이 좋은 것은 아니며, 트레이드오프(trde-off)를 잘 따져보고 사용해야 합니다. 목차 Direct-Address Table Hash & HashTable 이란? Hash Function 나눗셈 방법 Collision 1. Chaining 2. Open Addressing - Linear Probing - Quadratic Probing - Double Hashing Open Addressing 성능 Direct-Address Table Direct-Address Table은 배열을 사용해서 실제 key값이 바로 해.. 2020. 7. 24. Iterator & Enumeration & ListIterator 개요 Enumeration, Iterator 둘 다 java.util pacakage에 있는 인터페이스이고 컬렉션 객체들의 요소들을 조회할 때 사용합니다. Enumeration과 Iterator의 차이점은 Iterator는 remove()를 제공한다는 것입니다. Enumeration은 legacy이며 Iterator를 쓰는 것이 더 좋습니다. Iterator와 Enumeration 메소드 Iterator와 Enumeration의 메서드를 표로 알아보겠습니다. 메서드명으로 직관적으로 해석이 되므로 따로 설명을 넣지 않았습니다. Iterator Enumeration hasNext() hasMoreElements() next() nextElement() remove() - 과연 어떤 인터페이스를 사용하는 것이.. 2020. 7. 23. Fail-Fast vs Fail-Safe 개요 자바에서는 Fail-Fast라는 용어가 있습니다. 말 그대로 빠르게 실패한다는 의미로, 자바 컬렉션을 사용할 때 언제 어떻게 사용한는지 알아보겠습니다. Fail-Fast vs Fail-Safe Iterator 자바 컬렉션은 fail-safe와 fail-fast 2가지 Iterator 타입이 있습니다. fail-safe는 컬렉션이 순환 도중에 변경이 가능한 경우이고, fail-fast는 컬렉션이 순환 도중에 변경이 불가능한 경우입니다. 즉, 비동기적인 작업 중에 동시적인 변경을 보장하지 못합니다. fail-fast를 해결하기 위해서는, 복사본을 사용하거나, 동기화를 보장하거나, Iterator 대신에 Enumeration을 사용하면 됩니다. 예를 들어, ArrayList의 경우, 순환을 할 때, 다른.. 2020. 7. 23. ArrayList & Vector 차이점 개요 ArrayList와 Vector는 배열을 이용해 구현되어 있습니다. 공통점과 차이점을 알아보겠습니다. 공통점 - 내부가 배열로 구현되어 있으며 동적으로 사이즈가 늘어난다. - 사용하는 메소드가 똑같다.(add, remove, get 등등) Vector의 특징 - 초기 JDK의 첫번째 버전으로서 java.util.Vector에 속해 있습니다. 1.2버전부터 vector는 List를 구현하고 컬렉션 프레임워크에 포함됩니다. - Vector의 모든 메소드는 동기화되어있습다.(syncrhonized) - 사이즈 변경시 현재의 2배로 늘어납니다. - Iterator 뿐만 아니라 Enumeration을 통해서도 조회할 수 있습니다. ArrayList의 특징 - 자바 1.2버젼에서 등장하였고 java.util... 2020. 7. 23. Compile vs Interpretation 개요 자바는 Interpreter를 사용하는 언어라고 합니다. 또한 C는 Compile을 하는 언어라고 합니다. 이 둘의 차이점이 뭔지 알아보겠습니다. Compile 컴파일은 바로 실행가능한 기계어로 변환합니다. 따라서 인터프리터보다 더 빠르고 효율적입니다. 메모리관리나 CPU 사용 등 하드웨어 측면에서도 개발자가 더 많은 관리가 가능합니다 컴파일 언어는 컴파일이 되고나면 빌드가 필요합니다. 만약에 코드에 변경이 필요하면 재빌드를 해야 합니다. Interpretation 인터프리터는 프로그램을 통해 한줄씩 동작하며 각 명령어를 실행합니다. 하지만 중간에 목적코드를 만들지 않기 때문에 메모리 관리는 훨씬 효율적입니다. 인터프리터 언어는 컴파일 언어보다 확연히 느렸지만, JIT 컴파일러 덕분에 그 차이가 많.. 2020. 7. 23. 이전 1 ··· 69 70 71 72 73 74 75 ··· 80 다음 반응형