기록의 공유

잊지않기 위한 기록의 공유

Backend/Java 38

[Java] ArrayList, LinkedList

ArrayListArrayList는 배열을 기반에 두고있다.ArrayList는 내부적으로 object[] 즉 배열을 가지고 있으므로배열의 동작과 비슷하다.그래서 인덱스를 통한 조회는 O(1)로 상당히 빠르다. ArrayList는 연속적인 데이터의 리스트이므로 데이터는 연속적으로 들어가야하며 중간에 빈공간이 있으면 안된다.설정하지않으면 기본 capacity는 10이다capacity를 넘으면 내부 저장공간인 배열을 copy해서 용량을 알아서 늘린다.그때 지연이 발생하게 된다. 장점 : 인덱스를 통한 데이터의 삽입,삭제,조회가 편하다. ( 조회는 O(1), 끝부분 삽입 삭제는 O(1), 다른부분 삽입 삭제는 O(n) )단점 : 리스트의 끝 부분이 아닌 데이터의 추가,삭제가 느리다. get / set..

Backend/Java 2022.12.03

Collections.sort() 와 Arrays.sort() 시간복잡도, 사용법

Collections.sort() 시간복잡도 평균 : O(NlogN) 최악 : O(NlogN) 내부 알고리즘 : Timsort(삽입+병합 정렬) Arrays.sort() 시간복잡도 평균 : O(NlogN) 최악 : O(N^2) 내부 알고리즘 : DualPivotQuicksort Collections.sort() 사용법 public static void main(String[] args)throws IOException { List numbers = new ArrayList(); numbers.add(5); numbers.add(2); numbers.add(1); numbers.add(4); Collections.sort(numbers); bw.write(numbers.toString()); bw.flus..

Backend/Java 2022.12.03

[Java] BufferedReader, BufferedWriter

Scanner보다 빠른 입출력 BufferedReader, BufferedWriter 버퍼를 통해서 입출력을 전달해준다. BufferedReader, BufferedWriter가 Scanner보다 더 효율이 좋은 이유는 버퍼를 이용해서 그렇다고한다. 누를때마다 정보를 이동시키는것보다는 중간에 메모리 버퍼를 둬서 데이터를 묶어서 전송시키는것이 효율적이고 빠르다고 한다. 흙을 퍼 나를때 삽으로 한번뜨고 옮기는것보다는 수레에 한번에 담아서 옮기는것이 더 효율적이고 빠른것처럼. IOException BufferedReader나 BufferedWriter의 메소드를 사용하려면 사용할곳에서 try catch를 두르거나 해당 클래스의 throws IOException처리를 해줘야한다. public static voi..

Backend/Java 2022.12.03

자바 StringTokenizer 문자열분리,문자열구분! + split [미완]

Stringtokenizer는 3가지 사용방법이 있다. 1. 문자열만 전달 StringTokenizer st = new StringTokenizer(temp); 문자열만 전달하면 기본구분자인 (공백,줄바꿈 등) 공백 문자들" \t\n\r\t"으로 구분된다. 2. 문자열 , 구분자 st = new StringTokenizer(temp, ","); 문자열뒤에 원하는 구분자를 넣어주면 해당 구분자를 기준으로 나눠준다. temp = "a,,,b,c,,,,d,eeeee,rrrr,,,tttt"; st = new StringTokenizer(temp, ","); 만약 들어오는 값이 구분자가 여러번 쓰였을때는? 구분자가 몇개들어오든 구분자를 기준으로 나눠준다. -> 구분자가 아닌것들만 모아주는 느낌 3. 문자열,구분자..

Backend/Java 2022.10.29

자바 1차원 배열,2차원 배열 출력하기 Arrays.toString(),Arrays.deepToString()

자바에서 1차원배열을 출력할때 반복문을 이용하지않을때 사용하는 Arrays.toString() int[] a = new int[]{1,2,3,4}; bw.write(Arrays.toString(a)); 2차원배열일때? int[][] a = new int[][]{{1,2,3,4},{4,5}}; bw.write(Arrays.toString(a)); 이런결과가 나온다. int [] 인 {1,2,3,4} 의 주소값과 {4,5} 의 주소값이 출력된것이다. 반복문하나 돌려서 각각 Arrays.toString() 해도되지만 한방에 하는방법이 있다. Arrays.deepToString() int[][] a = new int[][]{{1,2,3,4},{4,5}}; bw.write(Arrays.deepToString(a)..

Backend/Java 2022.10.28

char형 변수 null 체크할때

char형 변수는 primitive(원시)타입이여서 null을 사용할 수 없다. 원시타입, 참조타입(Primitive Type, Reference Type) boolean저장 가능한 범위 true/ falseJava가 데이터를 다루는 최소 범위가 1 Byte 이기 때문에 낭비적이지만 1 Byte를 사용한다.charJava의 경우 Unicode를 사용, 동양의 글자의 경우 2 Byte 필요하기때문에 char velog.io char형 변수는 아스키코드를 이용한다. 아스키코드에서 숫자0은 null을 의미한다. char형 변수가 null값인지 체크하고 싶다면 0을 이용해서 비교하면 된다! https://okky.kr/articles/785626 OKKY - Java 에서 char null 비교 java에서 c..

Backend/Java 2022.10.28

순열,중복순열,조합,중복조합 정리

순열 (Permutation) -> 시간복잡도 O(n!)서로 다른 N개에서 R개를 뽑아 정렬하는 경우의 수 서로다른 N개에서 R개를 뽑는것은 순열,중복순열,조합,중복조합 모두 같다. 하지만 순열은 "정렬"하는 경우의 수를 생각한다는것이 다른점이다. 두가지원소 1,2를 뽑아 [1,2]로 정렬하는 경우와1,2를 똑같이 뽑고 [2,1]로 정렬하는 경우가 서로다르다고 카운팅하는것이 순열이다. 이런 순열을 자바에서는 어떻게 구현할까일단 순열은 기본적으로 재귀적인 방식으로 구현하는 완전탐색 방식이며 순열을 이용할때 주의사항* 순열은 조합과 다르게 반복문 시작인덱스를 매개변수로 보내지않아도되고, 0으로 반복문을 시작하면 된다 (반복문 시작 인덱스가 0 이라는것은 ,순서가 다르게도 뽑겠다는뜻)* 조합과 다르게 visi..

Backend/Java 2022.10.17