목록CS (8)
지극히 개인적인 개발블로그
변수나 메소드 앞에 static이 붙는걸 많이 봤다. 무슨 의미이고 어떨때 사용될까? public class HousePark { static String lastname = "박"; public static void main(String[] args) { HousePark pey = new HousePark(); HousePark pes = new HousePark(); } } 이와같이 값이 변하지 않을 변수에 static을 사용하면 메모리 사용에 이점을 볼 수 있다. 다만 변수의 값이 변경되지 않기를 원한다면 static보다는 final을 사용하는것이 더 좋다. static을 사용하는 또 한가지 이유로 공유의 개념을 들 수 있다. static 으로 설정하면 같은 곳의 메모리 주소만을 바라보기 때문에 ..
String은 불변객체이다. 예를들어 String str1 = 'abc'; String str2 ='def';가 있을때 두개의 String을 더하면 새로운 String객체를 만들게 된다. 이는 메모리도 더 잡아먹을 뿐만 아니라 시간도 더 소요하기 때문에 효율적인 방법이라 할수 없다. 이를 해결하기 위한 메소드가 StringBuilder()이다. 이를 이용하면 String객체를 더할때 새로운 객체를 생성하는 것이 아니기 때문에 상대적으로 속도도 빠르며 메모리도 효율적으로 이용할 수 있다. StringBuilder sb = new StringBuilder(); sb.append("abc"); sb.append("def"); System.out.println(sb.toString()); 참고로 append()..
트리는 데이터 사이의 계층 관계를 나타내는 자료구조입니다. 노드가 왼쪽 자식과 오른쪽 자식을 갖는 트리를 이진트리라고 합니다. 이때 각 노드의 자식은 2명 이하만 유지해야 합니다. 루트부터 노드가 채워져 있으면서 같은 레벨에서는 왼쪽에서 오른쪽으로 노드가 채워져 있는 이진트리를 완전 이진트리라고 합니다. 위 예시또한 완전 이진트리라고 할 수 있습니다. import java.util.Comparator; public class BinTree { //노드 static class Node{ private K key; //키 값 private V data; //데이터 private Node left; //왼쪽 자식 노드 private Node right; //오른쪽 자식 노드 //생성자 Node(K key, V..
리스트는 데이터를 순서대로 나열한 자료구조 입니다. 그 중에서도 가장 간단한 구조를 선형 리스트또는 연결 리스트라고도 합니다. 선형 리스트는 배열 또는 포인터로 구현 가능 하지만 배열로 구현하는건 별로 추천드리지 않습니다. 쌓이는 데이터의 크기를 미리 알아야 한다. 데이터의 삽입, 삭제에 따라 데이터를 모두 옮겨야 하기 때문에 효율이 좋지 않다. 이 두가지가 커다란 단점이기 때문이죠. 그래서 포인터로 구현하는 선형 리스트를 알아보겠습니다. import java.util.Comparator; public class LinkedList { class Node{ private E data; private Node next; Node(E data, Node next){ this.data = data; this...
정렬알고리즘은 여러가지가 있는데 솔직히 왜 여러가지 쓰는지 모르겠습니다. 그냥 sort()쓰면 되는거 아닌가요? 근데 책은 샀고 책에 내용은 있으니 하기는 하겠습니다 버블 정렬은 이웃한 두 요소의 대소 관계를 비교하여 교환을 반복합니다. import java.util.Scanner; public class BubbleSort { static void swap(int[] a, int idx1, int idx2){ int t = a[idx1]; a[idx1] = a[idx2]; a[idx2] = t; } static void bubbleSort(int[] a, int n){ for(int i=0; ii; j--) if(a[j - 1] > a[j]) swap(a, j-1, j); } public static ..
재귀함수의 가장 대표적인 예라 할수 있지요. import java.util.Scanner; public class Factorial { static int factorial(int n){ if(n > 0) return n * factorial(n-1); else return 1; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.printf("정수를 입력하시오:"); int x = sc.nextInt(); System.out.println(x+"의 팩토리얼 값은 "+factorial(x)+"입니다."); } } 최대공약수 구하는 재귀함수도 있습니다. import java.util.Scanner..