코딩 테스트를 위한 자바 컬렉션 정리

mark1106·2024년 3월 10일
0

JAVA

목록 보기
11/11

라이브러리

import java.util.*;
import java.io.*;

Arrays

		int[] arr = {5,6,3,4,1};

        // 1. 오름차순
        Arrays.sort(arr);

        Arrays.sort(arr, Collections.reverseOrder()); // 사용 x
        // -> int는 Wrapper 클래스가 아니므로 Collections함수 x
        // -> Integer로 바꿔서 사용
        // int[] -> Integer[]
        Integer[] arrInteger = Arrays.stream(arr)
                .boxed()
                .toArray(Integer[]::new);
        
        // int[] -> List<Integer>
        List<Integer> list = Arrays.stream(arr)
                .boxed()
                .collect(Collectors.toList());
                
                

        // 2. int -> Integer로 바꾸고 내림차순
        Arrays.sort(integerArr, Collections.reverseOrder());

        // 3. 일부만 정렬(0 ~ 2면 0 ~ 1까지만 정렬)
        Arrays.sort(arr, 0, 2);

        // 4. 배열 -> ArrayList (마찬가지로 Integer 배열만 가능)
        List<Integer> list = Arrays.asList(integerArr);

        // 배열의 특정 범위 자르기
        int tmp1[] = Arrays.copyOfRange(arr, 0, 3);
        Integer tmp2[] = Arrays.copyOfRange(integerArr, 0, 3);

ArrayList

		List<String> list = new ArrayList<>();

        // 삽입
        list.add("aa");
        list.add("cc");
        list.add(1, "bb"); // {aa, bb , cc}

        // 삭제
        list.remove(1); // {aa, cc}

        // 수정
        list.set(1, "bb"); // {aa, bb}

        // 값 존재 유무 확인
        list.contains("cc"); // false
        list.contains("bb"); // true

        // 중복없이 값 넣을 때
        if(!list.contains("bb")){
            list.add("bb");
        }

String

		String str1 = "apple";

        //길이 반환
        str1.length();

        //빈 문자열 체크 -> "" 이면 공백
        System.out.println(str1.isEmpty());

        //문자 찾기("apple")
        str1.charAt(0); // 'a'
        str1.indexOf('p'); // 1 -> 가장 먼저 나타나는 위치
        str1.indexOf("pp"); // 1
        str1.lastIndexOf('p'); // 2 ->가장 마지막 위치

        //문자열 분리
        String[] split = str1.split("");

        //공백으로 문자열 분리
        String str2 = "aaa bbb ccc";
        String[] split1 = str2.split(" ");

        //문자 자르기 apple -> pp (1 ~ 2)
        String str3 = str1.substring(1, 3);
        System.out.println(str3);

        //문자열 비교
        str1.equals("apple"); // true, false

        //문자 사전순 비교
        /**
         * str1과 같다 -> 0
         * str1이 사전순 앞 -> -1
         * str1이 사전순 뒤 -> 양수(사전순 차이만큼)
         */
        str1.compareTo("apple");

        //기존 문자 바꾸기 apple -> bpple
        str1 = str1.replace('a', 'b');


        //문자열 바꾸기(str2가 바뀌는 것이 아님)
        //모든 공백을 제거하고 싶다 " " -> ""
        str2 = str2.replaceAll(" ", "");

        //앞뒤 공백 제거
        str2.trim();

        //문자<-> 숫자
        Integer.parseInt("100");
        Integer.toString(100);

StringBuilder

		StringBuilder sb = new StringBuilder();
        
        //문자열 추가
        sb.append("aaa");

        //특정 인덱스에 문자 삽입
        sb.insert(2, "bb"); // aabba

        //문자열 삭제
        sb.delete(2, 3); // 2 ~ 2 삭제 -> aaba

        //특정 인덱스 삭제
        sb.deleteCharAt(3); // aaba -> aab

        //문자열 뒤집기
        sb.reverse(); // aab -> baa

        //문자열 교체
        sb.replace(1, 2,"cc"); //baa -> bcca

        //StringBuilder -> String 변환
        String str1 = sb.toString();

Collectons

		int[] arr = {1,3,2,6,10};
        
        //Collection 함수 사용하려면 배열을 리스트로 바꿔야 함
        List<Integer> list = Arrays.stream(arr)
                .boxed()
                .collect(Collectors.toList());

        // Collection 오름차순 정렬
        Collections.sort(list);

        // Collection 내림차순 정렬
        Collections.sort(list, Collections.reverseOrder());

        // 정수형 List 중 최대, 최솟값
        Collections.max(list);
        Collections.min(list);

        //List 내 원소를 이진 탐색으로 찾기

        // ->{1,2,3,6,10} 으로 정렬됐다면 3의 위치인 2번째 index 반환
        // -> 5는 없는 숫자이므로 3과 6사이인 4번째에 - 붙여서 -4가 반환
        Collections.binarySearch(list, 3); // 2
        Collections.binarySearch(list, 5); // -4
        Collections.binarySearch(list, -4); // -1

Stack

		Stack<Integer> stack = new Stack<>();

        // 원소 추가
        stack.push(1);

        //요소 제거
        stack.pop();
        
        //최상단 원소 보기
        stack.peek();
        
        //스택 크기 체크
        stack.size();
        
        //스택이 비어있는지 유무 확인
        stack.empty();
        
        //스택에 존재하는지 확인
        stack.contains(1);

        //스택 비우기
        stack.clear();

Queue

		//Queue는 LinkedList
        Queue<Integer> queue = new LinkedList<>();
        
        //요소 추가
        queue.add(2); // 문제 상황에서 예외
        queue.offer(2); // 문제 상황에서 false
        
        //요소 제거
        queue.remove(); // 문제 상황에서 예외
        queue.poll(); // 문제 상황에서 null 리턴
        
        //큐 비우기
        queue.clear();
        
        //큐의 최전방 요소 확인
        queue.element();
        queue.peek();
        
        // pair 같은 경우는 그냥 구현해서 사용
		static class Node{
            int y;
            int x;
            int dist;
        
            Node(int y,int x,int dist){
                this.y=y;
                this.x=x;
                this.dist=dist;
           }
   }

      Queue<Node> queue=new LinkedList<>();
      queue.add(new Node(1,2,3));
      Node node= queue.poll();

PriorityQueue

		//오름차순
        PriorityQueue<Integer> pQ1 = new PriorityQueue<>();

        //내림차순
        PriorityQueue<Integer> pQ2 = new PriorityQueue<>(Collections.reverseOrder());

        //삽입
        pQ1.add(1); // 실패 시 예외
        pQ1.offer(1); //실패 시 false

        //삭제
        int top = pQ1.remove(); // 최상단 삭제후 반환, 공백이면 예외
        pQ1.remove(2); // 2삭제 true, false 반환
        pQ1.poll(); // 삭제된 value, 공백이면 null

        //최상단 원소
        pQ1.element(); // 공백이면 예외
        pQ1.peek(); // 공백이면 null

        //사용자 정의
        //a는 오름차순 ,a가 같다면 b는 내림차순
        PriorityQueue<Pair> pQ3 = new PriorityQueue<>(new Comparator<Pair>(){
            @Override
            public int compare(Pair p1, Pair p2){
                if(p1.a == p2.a){
                    return p2.b - p1.b;
                }
                return p1.a - p2.a;
            }
        });

        pQ3.add(new Pair(1,2));
        pQ3.add(new Pair(2,5));
        pQ3.add(new Pair(2,3));
        pQ3.add(new Pair(1,4));
        pQ3.add(new Pair(3,2));
        pQ3.add(new Pair(1,9));
        pQ3.add(new Pair(3,7));

		//삭제 후 자료형 반환은 poll
        //remove는 참 거짓을 반환하므로 peek, remove 해야함
        while (!pQ3.isEmpty()){
            Pair pair = pQ3.poll();
            System.out.println(pair.a + " " + pair.b);
        }

        /**
         * 1 9
         * 1 4
         * 1 2
         * 2 5
         * 2 3
         * 3 7
         * 3 2
         */
         static class Pair{
        int a;
        int b;

        Pair(int a, int b){
            this.a = a;
            this.b = b;
        }
    }

HashSet

HashSet : 중복 허용 x, 순서 x


        HashSet<Integer> hashSet = new HashSet<>();

        //요소 추가
        hashSet.add(1);

        //요소 삭제
        System.out.println(hashSet.remove(1)); // 삭제 되면 true
        System.out.println(hashSet.remove(2)); // 삭제 안되면 false

        //특정 포함 요소 확인
        hashSet.contains(1); // 있다면 true, 없다면 false

        //for-each문을 활용하여 hashSet 탐색
        for(Integer integer : hashSet){
            System.out.println(integer);
        }

TreeSet

TreeSet : 중복 허용 x, 순서 o


        //오름차순
        TreeSet<Integer> set1 = new TreeSet<>();
        //내림차순
        TreeSet<Integer> set2 = new TreeSet<>(Collections.reverseOrder());

        //pair class 정렬
        TreeSet<Pair> set3 = new TreeSet<>(new Comparator<>(){
            public int compare(Pair o1, Pair o2){
                // a는 오름차순 정렬, a가 같으면 b를 내림차순 정렬
                if(o1.a == o2.a){ 
                    return o2.b - o1.b;
                }
                return o1.a - o2.a;
            }
        });
        set3.add(new Pair(3,2));
        set3.add(new Pair(1,2));
        set3.add(new Pair(1,4));
        set3.add(new Pair(2,3));
        set3.add(new Pair(2,5));
        set3.add(new Pair(2,4));
        set3.add(new Pair(3,9));
        /*
        1 4
        1 2
        2 5
        2 4
        2 3
        3 9
        3 2
         */
        
    }
    static class Pair{
        int a;
        int b;

        Pair(int a, int b){
            this.a = a;
            this.b = b;
        }
    }

HashMap

<key, value>쌍, key값은 유일, 순서 x

		HashMap<String, Integer> hashMap = new HashMap<>();

        //요소 추가
        hashMap.put("aa", 1);
        hashMap.put("bb", 2);
        
        //기존 값 교체
        hashMap.put("aa", 3) // a값 1->3

        //요소 삭제
        hashMap.remove("aa");

        //key에 해당하는 value 가져오기
        System.out.println(hashMap.get("aa")); // null
        System.out.println(hashMap.get("bb")); // 2

        //key 포함 여부 확인
        hashMap.containsKey("aa");

        //특정 키가 없으면 초기값 설정, 키 존재한다면 기존 값 가져오기
        hashMap.put("cc", hashMap.getOrDefault("cc", 1) + 3); // 없으므로 초기값 1 + 3 = 4
        hashMap.put("cc", hashMap.getOrDefault("cc", 1) + 3); // 있으므로 기존값 4 + 3 = 7

        //key - value 출력
        for(String key : hashMap.keySet()){
            System.out.println("key = " + key + " value = " + hashMap.get(key));
        }

📚 참고

0개의 댓글