본문 바로가기

Java13

[JAVA] Enum 내부 동작원리를 중심으로 알아보기 처음 Enum 에 대해 배울 때 단순히 여러 상수를 정의할 때 사용하였다. 상수를 그냥 쓰다보면 예상치 못한 오류가 생길 수 있으므로 따로 열거형으로 정의해서 사용한다. JAVA 에서는 Enum 안에 함수도 들어가는 거 같고 생각보다 복잡한 느낌이 있어서 이번 기회에 재대로 정리해본다. 아래의 예시를 보자. class Korea { static final int SEOUL = 0; static final int DAEGU = 1; static final int BUSAN = 2; } class America { static final int LA = 0; static final int NEWYORK = 1; } public class Main{ private static void main(String[].. 2021. 2. 26.
[JAVA] ArrayList remove for loop ( ConcurrentModificationException) JAVA 에서 ArrayList 메소드중 remove를 루프문을 돌면서 사용하고 싶은 데 자칫하면 삭제된 인덱스가 꼬여서 java.util.ConcurrentModificationException 이 발생한다. ArrrayList를 루프문 돌면서 삭제는 Iterator 를 사용하면 깔끔하다. // ArrayList 초기화 ArrayList list = new ArrayList(); // list에 원소들 추가 list.add(1); list.add(2); ... // iterator 사용 Iterator it = list.iterator(); // 10 보다 작다면 삭제해버린다. while(it.hasNext()){ int next = it.next(); if( next < 10 ){ it.remove(.. 2021. 2. 24.
[JAVA] Comparator 란? (feat. Generics ) - Comparator : 기본 정렬기준이 아닌 다른 기준으로 사용하고 싶을 때 사용. Comparator는 인터페이스임. - Comparator 구조 Comparator 는 함수형 인터페이스이기 때문에 람다식으로도 표현할 수 있다. 함수형 인터페이스에 관한 내용은 나중에 자세히 다룰 것이다. 여기서 중요한 것은 Comparator 안에 있는 compare 함수다. 사실 Comparator 인터페이스 내부에는 많은 함수들이 존재하지만 compare에 관해서만 정리하겠다. compare 를 구현함으로써 임의의 클래스에 대해서 정렬 기준을 만들 수 있다. 예시를 들면서 살펴본다. - Comparator 예시 먼저 아래처럼 클래스들을 선언한다. Phone은 iphone 과 galaxy의 부모이다. 또한 모든 .. 2021. 2. 24.
[JAVA] Comparable 이란? Comparable = 기본적인 정렬기준을 구현 - Comparable 저게 끝이다. 자바에서 정렬이 가능한 객체는 모두 Comparable 을 구현하고 있다. 아래의 코드를 보자. 우리가 흔히 쓰는 Arrays.sort(); 도 역시 Comparable 을 구현한 클래스에 대해서 작동한다. 아래 코드를 보면 Integer 클래스는 인터페이스 Comparable 를 구현했다. - Comparable 구현 예시 Student 클래스를 하나 정의하자. height 는 키이고 score는 점수다. 그리고 Arrays.sort(); 를 이용해 정렬해보자. 그러면 아래와 같은 에러가 뜰것이다. 요약하면 Comparable를 구현하지 않은 클래스의 정렬을 시도해서 생겼다. 즉 정렬가능한 객체가 아니라는 소리다. 정.. 2021. 2. 19.
[JAVA] next_permutation, prev_permutation static boolean nextPermutation(int[] arr){ int i = arr.length-1; while(i>0 && arr[i-1]>=arr[i]) --i; if(i==0) return false; int j = arr.length - 1; while(arr[i-1]>=arr[j]) --j; int temp = arr[i-1]; arr[i-1] = arr[j]; arr[j] = temp; int k = arr.length-1; while(i 0 && arr[i - 1] 2020. 9. 19.
백트래킹을 이용한 순열 in java static ArrayList nPkV2(int[] arr,int k){ ArrayList ret = new ArrayList(); boolean[] visited = new boolean[arr.length]; int[] resList = new int[k]; nPkdfsV2(ret,arr,resList,visited,k,0); return ret; } static void nPkdfsV2(ArrayList ret, int[] arr, int[] resList, boolean[] visited, int k,int idx){ if(k==idx){ List tmp = new ArrayList(); for(int i=0;i 2020. 8. 30.
[JAVA] 비트 연산자를 이용하여 조합 & 부분집합 & 부분집합 여부파악 아래 배열을 계속 쓸 것이다. int[] arr = new int[]{1,2,3}; # 부분 집합 구하기 코드 생각 없이 그냥 부분 집합을 구한다고 하면 어떻게 구할까?? 1 2 3 1,2 1,3 2,3 1,2,3 그렇다면 비트 마스크로 한다면 아래처럼 될 것이다. 100 010 001 110 101 011 111 1 = 선택함을 의미 0= 선택하지 않음을 의미 예를 들어, 위 처럼 "011" 이라면 arr 의 1은 선택하지 않고 2와 3을 선택함을 의미한다. 그래서 "001" 부터 "111" 까지 루프를 도는 코드는 아래와 같다. for(int i=1;i 2020. 8. 30.
String[] To ArrayList<String>, ArrayList<String> To String[] 1) String[] To ArrayList String[] arr = ...; ArrayList list = new ArrayList(Arrays.asList(arr)); 2) ArrayList To String[] ArrayList list = ...; String[] arr = list.toArray(new String[list.size()]); 2020. 8. 25.
자바 String reverse String s="abc"; s = new StringBuffer(s).reverse().toString(); // s = "cba" 2020. 8. 24.