[Java] Stack, Queue, Priority Queue

Featured image for [Java] Stack, Queue, Priority Queue

1. Stack Stack underflow와 overflow를 조심하자. 2. Queue Java의 java.util.Queue는 interface다. 구현체로는 대표적으로 ArrayDeque 또는 LinkedList를 사용한다. 대부분의 상황에선 LinkedList보다는 ArrayDeque를 사용하자. ArrayDeque 양쪽 끝에서 삽입, 삭제하기에 효율적이다. 3. Priority Queue 기본은 오름차순으로 정렬한다. 정렬의 순서를 자신이 원하는 방법으로 바꾸고 싶다. → Comparator를 추가한다. 또는 Comparable을 구현해도 된다. Data Structure Insertion Time Complexity Deletion Time … 더 읽기

[Java] 부분집합

Featured image for [Java] 부분집합

  종류 설명 기호 시간 복잡도 순열 N개의 원소 중 R개의 원소로 순서를 가진 부분집합을 만드는 경우의 수 nPr O(N!) 조합 N개의 원소 중 R개의 원소로 부분집합을 만드는 경우의 수 nCr O(n! /( r! x (n-r)!)) 부분집합 N개의 원소로 부분집합을 만드는 모든 경우의 수 nHr O(2^N) 집합에 포함된 원소들을 선택하는 것. 원소들의 그룹에서 최적의 부분 … 더 읽기

[Java] 순열과 조합

Featured image for [Java] 순열과 조합

  종류 설명 기호 시간복잡도 순열 N개의 원소 중 R개의 원소로 순서를 가진 부분집합을 만드는 경우의 수 nPr O(N!) 조합 N개의 원소 중 R개의 원소로 부분집합을 만드는 경우의 수 nCr O(n! / (r! x (n-r)!)) 부분집합 N개의 원소로 부분집합을 만드는 모든 경우의 수 nHr O(2^N) 1. 순열 가. 반복문 nPr에서 r이 고정되어 있고, 일반적으로 3중 … 더 읽기

[Java] 람다식

1. Lamda 표현식 고작 Inter.calc(1, 2)를 한 번 실행하기 위해서 Inter 인터페이스를 구현하는 InterImpl 클래스도 정의해야 하고 InterImpl impl 객체도 생성해야 하고 이를 s.m1()으로 전달까지 해야 한다. 결국 전달하고 싶은 것은 구체적으로 정의된Inter.calc() 메서드다. 이때 불필요한 코드를 획기적으로 줄일 수 있는 방법이 람다식이다. 가. Anonymous inner class InterImpl처럼 단 한 번만 사용하는데 .java 파일을 만드는 … 더 읽기

[Java] Collection

Featured image for [Java] Collection

1. Collection Framework 데이터를 저장하기 위한 개발자들의 몸부림. 한계점 : 한번 정해진 배열의 크기를 변경할 수 없다. 이미지 출처 : https://beginnersbook.com/java-collections-tutorials/ 모든 Collection은 Iterator interface를 구현한다. Iterator는 3 가지 메서드를 가지고 있다. 이러한 기능을 조합하면 다수의 데이터를 순차적으로 처리할 수 있다. Iterator (Java Platform SE 7 ) interface 특징 중복 종류 List 입력 순서가 있는 … 더 읽기

[Java] 예외 처리

Featured image for [Java] 예외 처리

1. 예외 처리   Error Exception 상황 프로그램을 잘못 작성자바가 해결할 수 없는 심각한 오류 프로그램을 잘못 작성한 경우프로그램의 작성 의도와 달리 사용되는 경우자바가 처리할 수 있는 오류 대처 디버깅으로 코드 개선 디버깅으로 코드 개선예외 처리 코드로 상황 수습 예 메모리 부족, stack overflow 등 null인 객체의 사용, 1/0, 읽으려는 파일이 없음. 가. 예외 클래스의 … 더 읽기

[Java] String

Featured image for [Java] String

1. String 객체의 불변의 원칙 String 문자열은 불변한다. ”java”는 “algo”로 변하지 않는다. 값이 “java”와 “algo”인 2개의 String 객체를 생성한다. ss는 참고값만 바꾼다. 하지만 기존의 객체(ss)는 변하지 않는다. toUpperCase()가 새로운 문자열을 결괏값으로 반환할 뿐이다. String만 예외적으로 불변이다. 2. String을 조심해서 사용해야 하는 이유 자바는 연산자 오버로드가 없기 때문에 특수한 과정을 겪게 된다. 대표적으로 + 하면 컴파일러는 … 더 읽기

[Java] 인터페이스

Featured image for [Java] 인터페이스

1. abstract class 가. 추상 클래스 정의 클래스들의 공통 모듈을 모아서 상속 구조로 정리 Vehicle에서 구현한 코드는 반드시 자손 클래스에서 재정의해서 사용하기 때문에 무의미함. 메서드의 선언부만 남기고 구현부는 ;로 대체 abstract 키워드를 메서드 선언부에 추가. 객체를 생성할 수 없다는 의미로 클래스 선언부에 abstract 추가. 이런 형태를 Abstract method design pattern이라고 한다. abstract 클래스는 상속 전용의 … 더 읽기