Java

    [Java] Immutable Object (불변 객체) 에 대해

    보기 더 편한 양식은 여기서~!(github.com/Be-poz/TIL/blob/master/Java/Immutable%20Object%20(%EB%B6%88%EB%B3%80%20%EA%B0%9D%EC%B2%B4)%20%EC%97%90%20%EB%8C%80%ED%95%B4.md) Immutable Object (불변 객체) 에 대해 불변 객체는 생성 후에 그 상태를 바꿀 수 없는 객체를 말한다. 반대 말로는 가변 객체(mutable)가 있다. 불변 객체는 복제나 비교를 위한 조작을 단순화 시켜주고 성능 개선에 도움을 주지만, 변경 가능한 데이터를 많이 가지고 있는 경우에는 오히려 독이 되기도 한다. class Ex{ public int num; public Ex(int num){ this.num = nu..

    [Java] equals, ==, hashCode 의 차이와 재정의 시점에 대해

    equals, ==, hashCode 의 차이와 재정의 시점에 대해 보통 값 타입들을 비교할 때에 == 연산자를 사용한다. int a = 3; int b = 3; //a == b true 하지만, String 타입에서는 == 비교를 사용하면 원하는 결과값을 얻어내지 못할 것이다. 왜냐하면, == 연산은 정확히는 주소값을 비교하는 연산자이기 때문이다. String은 new를 사용해서 새롭게 인스턴스를 만들고 메모리에 올리기 때문에 다른 주소값을 참조하기에 == 연산 시에 false가 리턴된다. String a = "abcd"; String b = "abcd"; String c = new String("abcd"); String d = new String("abcd"); System.out.println(a..

    [자료구조] HashSet, LinkedHashSet, TreeSet 의 원리에 대해

    HashSet, LinkedHashSet, TreeSet 의 원리에 대해 HashSet과 TreeSet은 Set 인터페이스의 구현 클래스이다. LinkedHashSet은 HashSet을 상속받아 구현이 된다. Set은 알다시피 중복값을 허용을 안한다. LinkedHashSet은 HashSet과는 다르게 저장 순서를 유지해주고 TreeSet은 들어온대로 정렬을 해준다. 그렇다면 이들의 내부 코드는 어떻게 되어있길레 이런 기능들을 하는건지 살펴보자. public HashSet() { map = new HashMap(); } public int size() { return map.size(); } public boolean contains(Object o) { return map.containsKey(o); ..

    [자료구조] ArrayList의 원리에 대해

    ArrayList의 원리에 대해 ArrayList 는 LinkedList 와 같이 List 인터페이스를 구현하는 클래스이다. 배열은 처음에 할당된 만큼의 공간을 사용할 수 있는 반면 ArrayList는 계속해서 add 할 수 있다. 그래서 사용하기 엄청편한데, 그렇다면 내부구현이 어떤식으로 돌아가길레 계속 추가할 수 있는걸까 ?? ArrayList list = new ArrayList(); list.add(3); //ArrayList.java 내의 코드 /** * Shared empty array instance used for default sized empty instances. We * distinguish this from EMPTY_ELEMENTDATA to know how much to inf..

    [자료구조] LinkedList의 원리에 대해

    LinkedList의 원리에 대해 LinkedList(연결 리스트)는 노드로 이루어진 선형의 자료구조이다. public class LinkedList extends AbstractSequentialList implements List, Deque, Cloneable, java.io.Serializable { transient int size = 0; /** * Pointer to first node. */ transient Node first; /** * Pointer to last node. */ transient Node last; ... } private static class Node { E item; Node next; Node prev; Node(Node prev, E element, Node..

    Java EOF(End Of File) 처리하기

    EOF는 데이터에서 더 이상 읽을 수 있는 파일이 없는 것을 뜻한다. 말 그대로 End Of File. 알고리즘 문제를 풀다보면 데이터의 개수 n 개를 표기하지 않고 EOF 로 맺는 경우가 종종 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 /** * Scanner의 경우 */ while (sc.hasNextLine()) { sc.nextLine(); } while (sc.hasNextInt()) { sc.nextInt(); } /** * BufferedReader의 경우 */ String input = ""; while ((input = br.readLine()) != null) { //input 값 들어옴 } Colored by Color Scripter cs..

    Java System.arraycopy() 에 대해

    System.arrayCopy() 는 배열의 값을 원하는 크기를 원하는 위치에 복사할 때 쓰인다. 자매품으로는 clone() 메서드가 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class test { public static void main(String[] args){ int[] arr={1,2,3,4,5,6,7}; int[] arr2 = arr.clone(); int[] arr3 = new int[3]; System.arraycopy(arr, 4, arr3, 0, 3); for (Integer ar3 : arr3) { System.out.print(ar3); } } } Colored by Color Scripter cs 1~7 값을 가진 arr 배열이 있..

    Java 다익스트라 알고리즘(Dijkstra Algorithm)에 대해

    Java 다익스트라 알고리즘(Dijkstra Algorithm)에 대해

    다익스트라 알고리즘은 그래프에서 출발점에서 목표점 까지의 최단거리를 구할 때 사용하는 알고리즘이다. 이 때의 그래프의 가중치는 양수여야만 한다. 음수인 경우에는 벨만 포드 알고리즘을 사용해야한다. 동작순서는 다음과 같다. 1. 방문하지 않은 정점 중에서 그 거리가 최소인 점 x을 선택한다. 2. x를 방문 처리한다. 3. x와 연결된 정점들을 검사한다. 4. x와 연결된 정점들까지의 거리가 x를 거쳐 그 점까지의 거리와 비교해서 더 크다면 후자를 전자에 삽입한다. 5. 1~4 반복 다음과 같이 진행된다. 구현코드는 다음과 같다. 동작원리를 외워두는 것이 좋다. 특정 문제에서는 간선의 방향성이 주어지기도 하고, 갈 수 없는 점이 나오기도 하기 때문이다. 1 2 3 4 5 6 7 8 9 10 11 12 13..