ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [알고리즘/JAVA] 자바 문법 정리
    Algorithm/문법 정리 2024. 9. 18. 22:08
    반응형

     


     

    - 문자열 관련 

    String str = "abcde";
    
    str.charAt(2) // 인덱스로 문자 찾기, c 반환
    str.equals("abcde"); // str과 abcde를 비교해서 같으면 true, 다르면 false
    // 문자열에 포함된 기존 문자를 -> 바꿀문자로 치환
    str.replace("b", "t"); // 결과는 "atcde" 이다
    str.replaceAll("0",""); // 모든 0을 제거
    str.substring(1); // 1번째 문자부터 끝 문자까지 자름
    str.split(" "); // 띄어쓰기로 구분된 문자열 분리해서 String[] 배열 반환
                    // String[] arr = str.split(" ");
    str.split(" ", -1); // 모든 공백을 유지하고, 연속된 공백도 빈 문자열로 처리

     

     

    - String.format

    문자열 형식 설정할 때 사용

    // 문자열 소수점 4째자리까지 형태일 때
    String.format("%s %.4f%n", s, percentage);

     

    // 시분초 HHMMSS 형식으로 포맷 (EX) 11시 01분 00초)
    for(int h = 0; h <= N; h++) { // 시
                for(int m = 0; m <= 59; m++) { // 분
                    for(int s = 0; s <= 59; s++) { // 초
                       // 현재 시각을 HHMMSS 형식으로 포맷
                        String time = String.format("%02d%02d%02d", h, m, s);
    
                        if(time.contains(K)) {
                            count++;
                        }
                    }
                }
            }

     

    - String과 StringBuilder의 차이 ??
    • StringBuilder는 가변 객체이므로, 기존 객체를 그대로 사용하여 문자열을 수정할 수 있습니다.
    • 문자열을 추가하거나 삭제하는 작업이 반복될 때마다 새로운 객체를 생성하지 않기 때문에, 성능이 뛰어나고 메모리 효율이 높습니다.
    • 문자열을 반복적으로 수정하는 상황에서는 항상 String보다 StringBuilder가 더 효율적입니다.

    StringBuilder sb = new StringBuilder();
    sb.append("abc"); // 문자열 추가
    sb.length(); // sb의 길이
    // 문자열로 변환
    sb.toString();
    // 안에 있던 문자열 초기화
    sb.setLength(0);

     


     

     

    - StringTokenizer

    공백(구분자)를 기준으로 문자열을 나눠준다.

    StringTokenizer st = new StringTokenizer(br.readLine());
    
    
    StringTokenizer.countTokens() // 현재 가지고있는 토큰의 개수를 반환

     

     

     


     

    - 숫자 -> 문자열 변환

    String.valueOf();
    Integer.toString();
    Long.toString();

     

     

    - 숫자 변환

    Integer.parseInt();
    Long.parseLong();

    Integer.parseInt()는 문자열을 숫자로 변환할 때 사용하는 메서드로 char 변환에는 부적합합니다. ( char 타입을 int로 변환하려면 ASCII 값을 직접 활용하거나 Character 관련 메서드를 사용해야 합니다.)

     

    - 숫자 -> 이진수로 변환

    Integer.toBinaryString(4); // 110

     

    - 정렬 관련 함수

    Arrays.sort()는 1차원 배열에만 사용 가능하다

    ArrayList<String> list = new ArrayList<>();
    Collections.sort(list);
    
    -- 역순 정렬 관련
    String[] str = Long.toString(n).split("");
    Arrays.sort(str, Collections.reverseOrder());

     


    - ArrayList 관련

    ArrayList<String> list = new ArrayList<>();
    ArrayList<Integer> list2 = new ArrayList<>();
    
    list.add("안녕"); // 값 추가 
    list.get(0); // 0 위치의 값 반환
    list2.contains(1); // 1이라는 값이 포함되어 있으면 true, 아니면 false
    
    // HashMap.values()로 값 추출 후 리스트에 저장 -> 값이 리스트에 저장됨
     ArrayList<Integer> list = new ArrayList<>(hm.values());
    // 배열은 Arrays.sort()로 정렬하고 ArrayList는 Collections.sort로 정렬하기
     Collections.sort(list, Collections.reverseOrder());

     


     

    - Stack 관련

    Stack<Integer> stack = new Stack<>();
    stack.push(1); // stack에 1 삽입
    stack.pop(); // 가장 위에 있는 값 삭제
    stack.size(); // 크기 반환
    stack.empty() // 비어있으면 true, 아니면 false
    stack.peek() // 가장 위에 있는 값 출력 (제거 X), 비어있으면 null 반환

    - Queue 관련

    Queue<Integer> queue = new LinkedList<>();
    
    queue.add(1); // 큐에 1추가
    queue.size(); // 큐 사이즈
    queue.poll(); // 큐의 첫번째 값 반환(제거o)
    queue.peek(); // 큐의 첫번째 값 출력(제거x)
    queue.isEmpty(); // 비어있으면 true , 안 비어있으면 false
    queue.contains(1); // 큐에 1이 있다면 true, 없다면 false
    queue.remove(a); // 큐에서 a 지우기

     

    - PriorityQueue 우선순위 큐

    우선순위 큐에 있는 원소들은 최솟값만 보장될 뿐 나머지 원소들이 순서대로 정렬되지는 않을 수 있다!

    PriorityQueue<Integer> pq = new PriorityQueue<>();
    pq.add(1); // pq.offer(1);과 동일
    pq.poll(); // 최솟값 제거

     

    높은 수가 우선이 되게 할 때는 아래와 같이 사용 

     // Collections.reverseOrder() 써서 높은 수가 우선이 되게
     PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());

     

    - 가장 큰 수 / 가장 작은 수

    int max = Integer.MAX_VALUE;
    int min = Integer.MIN_VALUE;

    - HashSet

    중복을 허용하지 않고 순서도 없고, 정렬도 안된 상태 

     Set<Integer> hs = new HashSet<>();
     hs.add(1); // 값 추가
     
     // HashSet을 오름차순 정렬된 배열로 변환시 
     hs.stream().sorted().mapToInt(i -> i).toArray();

     

    - HashMap

    HashMap<Integer, String> hm = new HashMap<>();
    hm.put(1, "안녕"); // 값 삽입
    hm.get(1); // "안녕" 출력
    hm.values(); // 키의 값 출력 
    hm.containsKey(1); // true
    hm.containsValue("안녕"); // true
    
    // 처음 나오는 크기면 1로 초기화, 기존에 있던 크기면 값 증가
    hm.put(arr[i], hm.getOrDefault(arr[i], 0) + 1);
    // arr[i]가 hm에 없으면 0반환, 있으면 키의 값 반환
    hm.getOrDefault(arr[i],0);
    
    // 모든 hm1의 키를 순회
    HashMap<String, Integer> hm1 = new HashMap<>();
    for(String key : hm1.keySet()) {
        ...
    }

     

    - TreeMap

    키값이 알파벳순(오름차순)으로 정렬된 상태로 출력

    TreeMap<String, Integer> tm = new TreeMap<>();

     

    - getOrDefault()

    // getOrDefault 메소드 이용해 name이 한번 더 나오면 +1 아니면 기본값 0 삽입
    tm.put(name, tm.getOrDefault(name, 0)+1);

     

     

    - Entry

     키, 값 둘 다 출력 필요할 때는 Entry 사용

            for(Map.Entry<String, Integer> entry : tm.entrySet()) {
                String s = entry.getKey();
                int num = entry.getValue();
            }

    - 문자가 숫자인지 확인하는 함수

    Character.isDigit('a'); // false
    Character.isDigit('1'); // true

     

     

    반응형

    'Algorithm > 문법 정리' 카테고리의 다른 글

    [JAVA] 트리 구현  (0) 2024.06.17
Designed by Tistory.