[간단정리] String, StringBuilder, StringBuffer 특징 및 차이
·
개발메모/간단정리
개요 Java언어 대표 문자열 클래스 String, StringBuilder, StringBuffer의 각각 특징 및 차이점에 대해 알아보자 요약 String: 문자열 연산(추가, 삭제)이 거의 없는 경우 사용 StringBuilder: 동기화를 고려하지 않아도 되는 경우(단일쓰레드 환경 등) 문자열 연산이 자주 일어나는 경우 사용 StringBuffer: 동기화가 필요한 경우(멀티쓰레드 환경)에서 문자열 연산이 자주 일어나는 경우 사용 내용 Java 문자열 대표 클래스 Java 에서 문자열을 다루를 대표적인 클래스로 String , StringBuffer, StringBuilder 가 있습니다. 연산이 많지 않을때는 위에 나열된 어떤 클래스를 사용하더라도 이슈가 발생할 가능성은 거의 없습니다. 그러나 ..
[간단정리] List, Set, Map 특징 및 차이점(+ 구현체 )
·
개발메모/간단정리
개요 자료구조 List, Set, Map의 각각 특징 및 차이점에 대해 알아보자 요약 List: 순서가 있으며, 데이터(값) 중복 허용 Set: 순서가 없으며, 데이터(값) 중복을 허용하지 않음 Map: Key&Value 구조, Key는 중복을 허용하지 않으며, Value(값)는 중복을 허용 * 각각 인터페이스의 구현체별 특징까지 확인 필요! * 포스팅된 내용외에 각 인터페이스별 다양한 구현체 존재 내용 Collection(컬렉션) - Java에서 Collection(컬렉션)이란 데이터의 집합, 그룹을 의미 - JCF(Java Collection Framework)는 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미 Collection 주요 인터페이스 - Li..
[JAVA] 소수 구하기 + 실행시간 단축
·
JAVA/알고리즘
Contents소수(Prime Number) : 1과 자기 자신만으로 나누어 떨어지는 1보다 큰 양의 정수 Contents 첫번째, n 보다 작은 정수를 나누어 보며 소수 구하는 법 두번째, 1번 방법 마법의 코드 한줄을 통해 실행 시간 단축하는 법 세번째, n 보다 작은 소수를 나누어 보며 소수 구하는 법 첫번째, n 보다 작은 정수를 나누어 보며 소수 구하는 법 public class prime { public static void getPrime(int num){ boolean flag; //소수 판별을 위한 true/false int cnt = 0; //소수의 총 개수를 확인하기 위한 변수 for(int i=2; i
선형 큐(Linear Queue)
·
JAVA/알고리즘
- FIFO - First In First Out(선입선출)- 인큐(EnQueue)를 통해 자료 입력, 디큐(DeQueue)을 통해 자료 출력 * 매표소, 가장 먼저 줄서있는 사람에게 표를 먼저 제공한다. * 선형 큐 알고리즘은 Rear가 배열의 끝에 닿아 있으면, 앞에 배열의 빈 부분(Q[0])이 남아 있어도 더이상 삽입연산을 하지 못한다.메모리를 효율적으로 관리하지 못함. 이러한 문제점을 해결하기 위해 원형 큐가 만들어졌다. JAVA 소스코드123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778..
스택(Stack) 알고리즘(JAVA)
·
JAVA/알고리즘
- 제한적으로 접근할 수 있는 나열 구조(접근 방법은 언제나 목록의 끝에서만 가능)- 선형 구조 LIFO - Last In First Out(후입선출)- 푸쉬(push)를 통해 자료 입력, 팝(pop)을 통해 자료 출력 * 프링글스, 통 안에 가장 나중에 들어간(push) 감자칩부터 먹게 된다(pop). 스택 활용 예- 역순 문자열 만들기- 수식 괄호 검사- 수식 후위표기법으로 변환, 후위표기 수식의 연산 JAVA 소스코드1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848..
퀵 정렬(Quick Sort)
·
JAVA/기타
- 리스트 가운데서 하나의 원소를 고름(pivot 선정)- pivot 앞에는 pivot보다 작은 값이 오고, pivot 뒤에는 pivot보다 큰 값들이 오도록 리스트를 둘로 분할한다.- 분할된 두 개의 리스트에 대해 재귀함수를 통해 이 과정을 반복한다.- 시간복잡도 : 최악 O(n^2), 평균 O(nlogn) JAVA 소스코드12345678910111213141516171819202122232425262728293031323334public class Quick { public void sort(int[] data, int l, int r){ int left = l; int right = r; int pivot = data[(l+r)/2]; do{ while(data[left] pivot) right--..
삽입 정렬(Insertion Sort)
·
JAVA/기타
- 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함.- 배열의 두 번째 데이터 부터 연산을 시작함.- 시간복잡도 : O(n^2) [1회전] [2회전] [3회전] [4회전] JAVA 소스코드123456789101112131415161718192021222324252627public class Insertion { public void sort(int[] A){ int size = A.length; int temp = 0; int j = 0; for(int i = 1; i =0 && temp
선택 정렬(Selection Sort)
·
JAVA/기타
- 주어진 데이터 중 최소값을 찾음- 최소값을 맨 앞에 위치한 값과 교환- 정렬된 데이터를 제외한 나머지 데이터를 같은 방법으로 정렬- 시간복잡도 : O(n^2) [1회전] [2회전] [3회전] [4회전]선택 정렬의 장점- 데이터의 양이 적을 때 좋은 성능을 나타냄.- 작은 값을 선택하기 위해서 비교는 여러번 수행되지만 교환횟수가 적다. 선택 정렬의 단점- 100개 이상의 자료에 대해서는 속도가 급격히 떨어져 적절히 사용되기 힘들다. JAVA 소스코드12345678910111213141516171819202122232425262728293031public class Selection { public void sort(int[] data){ int size = data.length; int min; //최..
버블 정렬(Bubble Sort)
·
JAVA/기타
- 두 인접한 원소를 검사하여 정렬하는 방법- 시간복잡도 : O(n^2) [1회전] [2회전] [3회전] - 세번의 회전에 걸쳐 정렬은 완료되었지만 프로그램은 남은 데이터의 비교연산을 계속 처리함.- 정렬은 비교연산을 통해 가장 큰 데이터 부터 끝에 정렬됨. 버블 정렬의 장점- 구현이 쉽다.- 이미 정렬된 데이터를 정렬할때 가장 빠르다. 버블 정렬의 단점- 다른 정렬에 비해 정렬 속도가 느리다.- 역순배열을 정렬할때 가장 느리다. JAVA 소스코드1234567891011121314151617181920212223242526public class Bubble { public void sort(int [] data){ int temp = 0; for(int i=data.length-1; i>=0; i--){..