본문 바로가기

자바

(9)
[JAVA] 자동 정렬해주는 Map TreeMap TreeMap공식문서에서의 TreeMap 소개A Red-Black tree based NavigableMap implementation.한국어로 번역하면 아래와 같다.TreeMap 클래스는 빨간-검은색 트리 (Red-Black Tree)를 기반으로 구현된 NavigableMap 인터페이스의 구현체다.그렇다면 Red-Black Tree에 대해 알아보자.Red-Black TreeRed-Black Tree는 정렬 된 정보를 빠르게 저장해주는 특수한 이진 검색 트리 데이터 구조를 가진다.이진 트리는 최악의 경우 트리의 높이(N)만큼 의 시간 복잡도를 가진다.반면 레드-블랙 트리의 경우 부모 노드보다 작은 값을 갖는 노드는 좌측으로, 큰 값을 갖는 노드는 우측 자식으로 배치한다.이를 통하여 트리가 균등하게 되어 ..
[JAVA] 반복자 Iterator을 사용해 컬렉션(List, Set, Map) 순회하기 Iterator에 대한 Java Oracle 문서에 정의된 내용은 아래와 같다. An iterator over a collection. An iterator allows the caller to traverse the elements of a collection without exposing the underlying implementation. 번역하면 아래와 같다. 컬렉션에 대한 반복자다. 반복자는 컬렉션의 요소를 노출하지 않고 순회할 수 있도록 한다. 즉, 간단하게 말하자면 List, Set, Map, Stack, Queue와 같은 컬렉션들을 순회하게 해준다. Iterator과 반복문의 차이점 엥? 근데 반복문으로 순회를 하면 되는거 아냐?란 생각이 들 수 있다. Iterator이 동작하는 순서는 ..
[JAVA] Map과 구현 클래스 코딩테스트를 준비하기 위해 코딩을 하다 보니 Map을 종종 사용할 때가 있다. 코드를 짜다 문득 Map과 HashMap의 차이점이 뭘까 해서 찾아봤다. 사실 주로 Map을 사용했었는데 이번에 HashMap을 사용했고, 둘이 다른 점이 있어서 기록할 겸 적어놓는다. 간단하게 말하자면 Map은 HashMap이 구현하는 인터페이스라고 생각하면 된다. 1. Map map = new HashMap(); 2. HashMap map = new HashMap(); HashMap을 사용하려면 위와 같이 생성할 수 있다. 1번 코드의 경우 Map 인터페이스의 참조 변수를 선언 후 HashMap인스턴스를 할당했다. 즉, Map 인터페이스의 메서드를 모두 사용할 수 있다는 소리다. 2번 코드의 경우 HashMap 클래스의 인..
[JAVA] Comparable & Comparator 객체를 비교하거나 정렬할때 주로 사용되는 Comparable과 Comparator 인터페이스를 알아보자. 인터페이스이기 때문에, 안에 내장된 메소드를 반드시 구현해야한다. Comparable을 사용하고자 한다면 compareTo(T o) 메소드를 재정의(Override/구현) 해야 한다. Comparator를 사용하고자 한다면 compare(T o1, T o2) 메소드를 재정의(Override/구현) 해야 한다. 본인은 Java에서 2차원 정렬을 사용하기 위해서 Comparator를 처음 접했기 때문에 정렬하는 용도가 주 기능인줄 알았다. 하지만 Comparable과 Comparator의 주 기능은 객체를 비교한다는 것이다. Java에서는 원시(primitive) 타입이 기본자료형이기 때문에 부등호를 갖..
[Java] 배열에 중복된 값 제거하는법 (Set) 배열에서 중복값을 제거하는 방법은 크게 2가지(Set, Stream)가 있다. 1. Set Java에서 Set은 중복을 허용하지 않는 컬렉션 인터페이스다. Set은 순서가 없는 요소들의 집합으로, 원소들이 추가된 순서나 삽입된 위치에 따라 인덱스를 갖지 않는다. Java에서는 Set 인터페이스를 구현한 여러 클래스들이 있다. 그 중 가장 일반적인 클래스로는 (HashSet, TreeSet, LinkedHashSet)들이 있다. 한번 순서대로 알아보자. 1-1 HashSet 해싱(Hashing) 알고리즘을 사용하여 요소들을 저장하는 Set입니다. HashSet은 중복을 허용하지 않으며, 순서가 보장되지 않는다. 코드 import java.util.Arrays; import java.util.HashSet;..
[JAVA] Hashtable, HashMap, ConcurrentHashMap 차이점 ConcurrentHashMap Map 인터페이스를 구현한 콜랙션 객체 중 비슷하면서 자주 사용되는 것들은 아래와 같다. Hashtable HashMap ConcurrentHashMap 특징 Hashtable HashMap ConcurrentHashMap 쓰레드 안전성 thread-safe thread-unsafe thread-safe 키와 값의 null 허용 여부 허용하지 않음 허용함 허용하지 않음 성능 느림 빠름 빠름 위 클래스는 Map 인터페이스를 구현한 콜렉션들이다. 이것들은 기본적으로 구조를 지닌다. 하나하나 무엇이 다른지 확인해보자. Hashtable put, get같은 주요 메소드에 synchronzed 키워드가 선언돼 있다. synchronzed는 메소드를 호출 전 쓰레드간 동기화 락을 걸..
[JAVA] BigDecimal 자바에서 BigDecimal은 숫자를 정확하게 저장하고 표현이 가능한 방법이다. double과 float는 범위의 한계가 정해져 있지만 BigDecimal은 한계로 부터 자유롭다. 단점이라면, 속도가 느리다. 그렇다면 double은 BigDecimal과 비교했을때 범위만 차이가 날까? Java는 IEEE 754 부동 소수점 방식을 사용해, 완벽에 가까운 근사치 값을 저장하기 값이 정확하게 나오지 않는다. 아래 코드를 보면 쉽게 이해가 갈 것이다. package test; public class Main { public static void main(String[] args) { double a = 10.0000; double b = 3.0000; System.out.println(a / b); } } a..
[Java] BigInteger 큰 숫자 다루기 int의 범위는 -2,147,483,648 ~ 2,147,483,647이고 long의 범위는 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807이다. 해당 범위를 넘는 숫자가 들어가게 되면 0으로 출력이 된다. 때문에 무한의 정수가 들어갈 가능성이 존재한다면 BigInteger 를 사용하는게 좋다. 자바 API에서는 이렇게 정의되어 있다. BigInteger: Immutable arbitrary-precision integers. (불변한 임의의 정말한 정수) BigInteger 는 문자열 형태로 이루어져 있기때문에 숫자의 범위가 무한하다. BigInteger는 java.math안에 있기 때문에 java.math.BigInteger로 불러와야 한다. BigI..