Java
-
[Java] 빌더패턴 Builder PatternJava 2016. 11. 5. 23:04
빌더패턴 필드가 많은 객체를 생성할 경우 생성자를 이용하면 다루기 어렵고 헷갈릴 수 있다.public class Pet { private final Animal animal; private final String petName; private final String ownerName; private final String address; private final String telephone; private final String emailAddress; //선택사항 private final Date dateOfBirth; //선택사항 }Pet 객체를 만들려면 필요한 모든 필드와 조합할 수 있는 옵션 필드를 포함하도록 매개변수를 갖는 생성자가 4개 이상 필요하다.여기에 더 많은 옵션이 생긴다면 관리하기가..
-
[Java] 자료구조Java 2016. 11. 4. 21:33
리스트 - ArrayList와 LinkedList 일반적으로 사용리스트 크기가 작아지면 메모리 용량이 작아지고 크기 지정에 한계가 없다. 배열과의 차이@Test public void arrayDefinitions() throws Exception { final int[] integers = new int[3]; final boolean[] bools = {false, true, false, true}; final String[] strings = new String[] {"one", "two"}; final Random r = new Random(); final String[] randomArrayLength = new String[r.nextInt(100)]; assertEquals(true, bool..
-
[Java] 이진탐색 Binary SearchJava 2016. 11. 4. 16:00
이진검색 - 데이터가 정렬되어있다는 전제하에 중간값을 계속 비교하면서 원하는 값을 찾는 방식 public void binarySearch(int num[], int find) { if (num.length == 1) return; int start = 0; int end = num.length - 1; boolean check = true; while(check && start find) { end = center - 1; } else { start = center + 1; } } }
-
[Java] 합병정렬 Merge SortJava 2016. 11. 3. 00:07
합병정렬 - 배열을 두 부분으로 계속 나눈 뒤 다시 나눠진 배열을 비교해 나가면서 합치면서 정렬된다. 재귀적 시간복잡도 O(n log n)각각의 병합 시간 O(n)각 재귀 호출은 주어진 리스트 숫자의 절반만큼 발생 public void mergeSort(int num[], int length) { int center = length / 2; int leftNum[] = new int[center]; int rightNum[] = new int[length - center]; if (length == 1) return; //왼쪽배열 for (int i = 0; i < center; i++) { leftNum[i] = num[i]; } //오른쪽배열 for (int i = 0; i < length - cen..
-
[Java] 퀵 정렬 Quick SortJava 2016. 11. 2. 22:31
퀵 정렬 - pivot 이라는 임시원소를 하나 설정하고 pivot에 의해 작은원소 큰 원소들로 정렬된다. 재귀적 pivot은 어떤걸 지정해도 상관이 없다. 밑의 코드는 중간에 위치한 원소를 pivot으로 지정하였다. 두개의 리스트로 분리하는 시간복잡도는 O(n) 이고각각의 재귀 호출은 각 리스트 숫자의 절반만큼 발생한다평균 복잡도 O(n log n)최악의 경우 O(n^2) public void sort(int num[], int start, int end) { if (start >= end) return; int left = start; int right = end; int pivot = num[(left + end) / 2]; do { while (num[left] < pivot) left++; whi..
-
[Java] 삽입정렬 Insertion SortJava 2016. 10. 29. 16:14
삽입정렬 - 현재 위치에서 그 이하의 배열들을 비교하여 자신이 들어갈 위치를 찾아 삽입하는 방법 최악의 경우 : 역순으로 정렬되어 있는 경우평균 시간 복잡도 O(n^2) 123456789101112public static void insertionSort(int[] numbers) { int i, j; for (i = 1; i 0; j--) { if (numbers[j-1] > tmp) { numbers[j] = numbers[j-1]; numbers[j-1] = tmp; } } }}Colored by Color Scriptercs 중간에 원소를 삽입하면 그 뒤에 있는 모든 원소를 한칸씩 뒤로 이동시켜야 한다.몇백만개의 원소가 있는 배열이라면 이런 부분은 큰 부담이다.=>LinkedList를 사용 123..
-
[Java] 버블정렬 Bubble SortJava 2016. 10. 29. 13:59
버블 정렬 - 인정한 원소를 검사하여 정렬해나가는 방식 구현하기 간단하지만 비효율적 최선의 경우 : 자료가 이미 정렬되어 있는 경우최악의 경우 : 역순으로 정렬되어 있는 경우 평균 시간 복잡도 O(n^2) 1234567891011121314 public void bubbleSort(int[] numbers) { boolean check_switch; do { check_switch = false; for (int i = 0; i numbers[i+1]) { int tmp = numbers[i+1]; numbers[i+1] = numbers[i]; numbers[i] = tmp; check_switch = true; } } } while (check_switch); }Colored by Color Scri..