분류 전체보기
-
[Java] LinkedHashMap은 무엇일까?Language/Java 2020. 4. 8. 18:48
HashMap에 대해서 간략하게라도 알고 있다면 LinkedHashMap을 이름만 봐도 LinkedList + HashMap 합쳐진 것이라고 추측할 수 있다. HashMap은 순서가 존재하지 않는다. (즉 버전에 따라 환경에 따라 달라진다는 뜻이다) 그래서 내가 추측했던 것 처럼 실제로 LinkedHashMap은 HashMap에서 자료들이 입력된 순서를 기억하는 것을 추가하기 위해 만든 클래스이다. 사실 왜 HashMap이 데이터의 순서를 유지하지 않는지?에 대해서는 깊게 생각해본적이 없다. 이번에 짧게라도 생각해보면서 공부한 것을 정리해보려 한다. HashMap이 데이터의 순서를 유지하지 않는 이유 HashMap은 연관 배열을 저장하기 위한 자료구조이다. (연관 배열이라는 말은 처음 들어본다) 그러면 ..
-
[Java] char배열과 String 클래스의 차이는?Language/Java 2020. 3. 31. 15:08
지금까지 여러 문자, 즉 문자열을 저장할 때 String타입의 변수를 사용했다. 사실 문자열이라는 용어는 '문자를 연이어 늘어놓은 것'을 의미하므로 문자배열인 char배열과 같은 뜻이다. 자바에서는 char배열이 아닌 String클래스를 이용해서 문자열을 처리하는 이유는 무엇일까? String클래스는 char배열에 기능(메서드)을 추가한 것이다. char배열과 String클래스의 한 가지 중요한 차이가 있는데, String객체(문자열)는 읽을수만 있을 뿐 내용을 변경할 수 없다는 것이다. 1 2 3 4 5 6 7 public class Test { public static void main(String[] args) { String str = "Java"; str = str + "8"; System.ou..
-
[Java] Java는 Call by Value 일까? Call by Reference 일까?Language/Java 2020. 3. 17. 15:32
https://devlog-wjdrbs96.tistory.com/44?category=830071 [JAVA]Call by Value 와 Call by reference 란 ? C언어를 주로 공부 했던 나는 Call by value 와 Call by reference 에 대해서 call by value 는 값을 넘기는 거고 call by reference 는 포인터를 이용해서 주소를 넘긴다고 알고 있다. 하지만 누군가 나에게 이.. devlog-wjdrbs96.tistory.com Call by Value와 Call by Reference에 대해서는 위에서 참고하길 바란다. 현재 운영하는 블로그는 스스로 공부한 것을 나중에 다시 찾아보기 쉽게 정리하는 공간입니다. 1. Java는 Call by Value..
-
[Java] try with resources란?Language/Java 2020. 2. 27. 22:40
자바를 이용해 외부 자원에 접근하는 경우 주의해야할 점은 외부자원을 사용한 뒤 반납을 해줘야 한다는 점이다. 1. 자원 반납과 finally 1-1) 자원반납 문제 1 2 3 4 변수1 = new 자원객체1(); // 자원 할당 변수1.작업(); 변수1.close(); // 자원 반납 위 코드에서 작업() 메소드가 에러없이 실행된 경우라면 close() 메소드가 정상적으로 작동해서 자원을 반납한다. 하지만 작업() 메소드에서 에러가 발생한다면 close( 메소드가 실행되지 않아서 자원이 반납하지 못하는 문제가 생긴다. 1-2) finally 블럭에서 자원 반납 1 2 3 4 5 6 7 8 9 10 11 12 13 변수1 = null; 변수2 = null; try { 변수1 = new 자원객체1(); 변수..
-
시간복잡도 (Time Complexity)란?Computer Science/Data_Structure 2020. 2. 18. 22:35
1. 알고리즘 복잡도 계산 항목 시간 복잡도: 알고리즘 실행 속도 공간 복잡도: 알고리즘이 사용하는 메모리 사이즈 2. 알고리즘 성능 표기법 Big O (빅-오) 표기법: O(N) 알고리즘 최악의 실행 시간을 표기 가장 많이/일반적으로 사용함 아무리 최악의 상황이라도, 이정도의 성능은 보장한다는 의미이다. 3. 시간복잡도 가장 널리 사용되는 알고리즘의 수행시간 기준 더보기 알고리즘이 실행되는 동안 수행하는 기본적인 연산의 수를 입력의 크기에 대한 함수로 표현 시간 복잡도가 높다는 것은 입력의 크기가 증가할 때 알고리즘의 수행 시간이 증가한다는 의미이다. 하지만 시간 복잡도가 낮다고 해서 언제나 더 빠르게 동작하는 것은 아니다. 입력의 크기가 작을 때는 시간 복잡도가 높은 알고리즘이 더 빠르게 동작할 수도..
-
소수 찾기(에라토스테네스의 체)Computer Science/Algorithm 2020. 2. 9. 21:51
일반 방법으로 "소수찾기" 알고리즘 문제를 풀면 시간초과를 경험하는 일이 많기 때문에 에라토스테네스의 체를 이용해서 소수를 구해보자. 2부터 n까지의 모든 수를 나열한다. 2는 소수이므로 소수로 입력한다. 후에 2의 배수들은 소수가 아니게 되므로 n까지의 자기 자신을 제외한 2의 배수를 모두 지운다. 3은 소수이기에 체크하고, 똑같이 3의 배수를 모두 지운다. 다음 소수인 5도 지워지지 않았기에, 5의 배수를 모두 지운다. 위의 과정을 n의 제곱근전의 최대 소수까지 반복을 해준다 (Math.sqrt())를 이용하자. https://programmers.co.kr/learn/courses/30/lessons/12921 코딩테스트 연습 - 소수 찾기 | 프로그래머스 1부터 입력받은 숫자 n 사이에 있는 소수..
-
이진 탐색(Binary Search) 란?Computer Science/Data_Structure 2020. 1. 30. 15:50
정렬된 배열에서의 이진 탐색 정렬된 배열의 탐색에는 이진 탐색(binary search)이 가장 적합하다. 이진 탐색은 배열의 중앙에 있는 값을 조사하여 찾고자 하는 항목이 왼쪽 또는 오른쪽 부분 배열에 있는지를 알아내어 탐색의 범위를 반으로 줄인다. 이러한 방법에 의해 매 단계에서 검색해야 할 배열의 크기를 반으로 줄인다. 10억명의 정렬된 배열에서 이진 탐색을 이용하여 특정한 이름을 찾기 위해서는 단지 30번만 비교하면 된다. 분할 정복 알고리즘과 이진 탐색 분할 정복 알고리즘 (Divide and Conquer) Divide: 문제를 하나 또는 둘 이상으로 나눈다. Conquer: 나눠진 문제가 충분히 작고, 해결이 가능하다면 해결하고, 그렇지 않다면 다시 나눈다. 이진 탐색 Divide: 리스트를..