본문 바로가기
개발/Java

Collection API

by BellOne4222 2024. 1. 29.

Collection API


Wrapper 클래스

  • 기본 데이터 타입을 객체로 다룰 수 있도록 만들어진 클래스
  • wrapper 클래스를 사용하면 자동으로 boxing과 unboxing이 이루어진다.
  • boxing
    • 기본 데이터 타입을 해당하는 wrapper 클래스 객체로 변환하는 것
  • unboxing
    • wrapper 클래스 객체를 해당하는 기본 데이터 타입으로 변환하는 것
  • Auto-boxing
    • 기본 데이터 타입의 값을 해당하는 wrapper 클래스 객체로 자동 변환 하는 것
  • Auto-unboxing
    • wrapper 클래스 객체를 해당하는 기본 데이터 타입으로 자동 변환 하는 것

 

public class WrapperTest {
    public static void main(String[] args) {
        // 정수형 변수에 10을 저장하세요
        int a = 10; // 기본 자료형
        // Integer aa = new Integer(10); // 사용자 정의 자료형
        Integer aa = 10; // Integer는 클래스 -> auto-boxing, 메모리에 Integer 객체가 생성되고 10이 저장됨
        System.out.println(aa.intValue()); // intValue() : Unboxing(Integer -> Int) : 메모리의 10이라는 Int값을 하나 꺼내는 함수

        Integer bb = 20; // auto-boxing
        int b = bb; // Integer 안의 Int의 20을 자동으로 b에 할당 가능 -> auto-unboxing

        float f = 10.5f;
        Float ff = 45.6f; // auto-boxing
        System.out.println(ff.floatValue()); // auto-unboxing
        float aff = ff; // auto-unboxing
        System.out.println(aff);

    }
}

숫자와 문자열의 상호 변환

  • 숫자형 문자열을 정수로 변환
    • Integer.parseInt() 메서드를 사용
  • 정수를 문자열로 변환
    • String.valueOf() 메서드나 “” + 정수를 사용
public class IntergerStringTest {
    public static void main(String[] args) {
        String str1 = "123";
        String str2 = "123";
        System.out.println(str1+str2);

        int num = Integer.parseInt(str1) + Integer.parseInt(str2); // 숫자형 문자열을 정수로 변환
        System.out.println(num);

        int su1 = 123;
        int su2 = 123;
        System.out.println(su1+su2);

        String str = String.valueOf(su1) + String.valueOf(su2); // 정수를 문자열로 변환
        System.out.println(str);
        String str3 = "" + su1 + su2;
        System.out.println(str3);
    }
}

Collection Framework API

  • 자바에서 제공하는 데이터 구조인 컬렉션을 표현하는 인터페이스와 클래스의 모음
  • 개발자가 데이터를 저장하고 관리하는 다양한 방법 제공

 

public class CollectionBasic {
    public static void main(String[] args) {
        // ArratList에 10,20,30,40,50 5개의 정수(int)를 저장하고 출력하세요
        // ArrayList는 클래스만 넣을 수 있기 때문에 int 저장은 불가 -> Wrapper 클래스를 통해 Integer로 저장해야한다
        // 지금은 Auto boxing을 통해서 int를 자동으로 Integer타입으로 저장
        ArrayList<Integer> list = new ArrayList<Integer>();
        list.add(10); // auto boxing으로 원래 new Integer(10)으로 넣어야하지만 자동으로 Integer로 변환해서 저장 가능
        list.add(20); // auto boxing으로 원래 new Integer(10)으로 넣어야하지만 자동으로 Integer로 변환해서 저장 가능
        list.add(30); // auto boxing으로 원래 new Integer(10)으로 넣어야하지만 자동으로 Integer로 변환해서 저장 가능
        list.add(40); // auto boxing으로 원래 new Integer(10)으로 넣어야하지만 자동으로 Integer로 변환해서 저장 가능
        list.add(50); // auto boxing으로 원래 new Integer(10)으로 넣어야하지만 자동으로 Integer로 변환해서 저장 가능

        // int형으로 바로 값이 나올 수 있는 이유는 auto unboxing이 내부에서 작동하기 때문이다
        for (int data : list){
            System.out.println(data);
        }
    }
}

순서가 있고 중복 가능한 List API

  • ArrayList 클래스
    • add : 데이터 추가
    • get(idx) : 인덱스 위치의 요소 반환
    • remove(idx) : 인덱스 위치의 요소 제거
    • set(idx, 수정할 요소) : 인덱스 위치의 요소 수정
public class ListExample {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>(); // 중복이 가능하고 순서가 있는 ArrayList
        list.add("apple"); // new String("apple") 객체가 내부에서 만들어진다., 추가
        list.add("banana"); // new String("apple") 객체가 내부에서 만들어진다.
        list.add("cherry"); // new String("apple") 객체가 내부에서 만들어진다.
        list.add("banana"); // new String("apple") 객체가 내부에서 만들어진다.

        System.out.println(list.get(0)); // 정보 조회
        System.out.println(list.get(1));
        System.out.println(list.get(2));
        System.out.println(list.get(list.size()-1) );

        list.remove(0); // 삭제
        list.set(1, "orange"); // 수정

        for(String str : list){
            System.out.println(str);
        }
    }
}
public class MovieListExample {
    public static void main(String[] args) {
        ArrayList<Movie> list = new ArrayList<Movie>();
        list.add(new Movie("괴물","봉준호","2006", "한국"));
        list.add(new Movie("기생충","봉준호","2019", "한국"));
        list.add(new Movie("완벽한 타인","이재규","2018", "한국"));

        for(Movie str : list){
            System.out.println(str);
        }

        System.out.println("+----------------+--------+-------+------+");
        System.out.println("+영화제목         |감독     |개봉년도|국가   |");
        System.out.println("+----------------+--------+-------+------+");
        for(Movie m : list) {
            System.out.printf("|%-14s|%-8s|%4s|%-6s|\n",m.getTitle(),m.getDirector(),m.getYear(),m.getCountry());
        }
        System.out.println("+----------------+--------+-------+------+");

        String searchTitle = "기생충";
        // 순차검색 -> 이진 검색(*)
        for (Movie m : list){
            if(m.getTitle().equals(searchTitle)){
                System.out.println(m);
                break;
            }
        }

    }
}

순서가 없고 중복 불가능한 Set API

  • HashSet 클래스
    • 순서가 없고 중복 불가능한 Set API
    • add : 데이터 추가
    • remove(index) : 인덱스 위치의 요소 제거
    • set.contains(요소) : 요소가 set에 있는지 확인
    • set.clear() : set 요소 초화
    • charCountMap.containsKey(c) : c라는 key가 들어있는지 확인
public class HashSetExample {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();

        set.add("Apple");
        set.add("Banana");
        set.add("Cherry");
        set.add("Apple"); // 중복 x

        System.out.println(set.size()); // 3

        for(String str : set){
            System.out.println(str);
        }

        set.remove("Banana");
        for(String str : set){
            System.out.println(str);
        }

        boolean contains = set.contains("Cherry");
        System.out.println(contains); // true

        set.clear();
        boolean isEmpty = set.isEmpty();
        System.out.println(isEmpty); // true

    }
}
public class UniqueNumbers {
    public static void main(String[] args) {
        int[] nums = {1,2,3,4,5,2,4,6,7,1,3};

        Set<Integer> uniqueNums = new HashSet<>();
        for(int number : nums){
            uniqueNums.add(number);
        }

        for(int number : uniqueNums){
            System.out.println(number);
        }
    }
}

Key-Value로 데이터를 관리하는 MapAPI

  • MapAPI
    • put(key, value) : key : value 구조로 데이터 추가
    • get(key) : key에 해당하는 value 출력
    • 이미 있는 key에 value를 다르게 해서 put을하면 데이터 수정
    • remove(key) : 요소 삭제
    • getKey(), getValue() : 요소 전체 출력
    • Map 전체 출력
      • Map에 값을 전체 출력하기 위해서는 entrySet(), keySet() 메소드를 사용하면 되는데 entrySet() 메서드는 key와 value의 값이 모두 필요한 경우 사용하고, keySet() 메서드는 key의 값만 필요한 경우 사용합니다.
      • https://tychejin.tistory.com/31
for (Map.Entry<String, String> entry : map.entrySet()) {
    System.out.println("[key]:" + entry.getKey() + ", [value]:" + entry.getValue());
}
출처: https://tychejin.tistory.com/31 [너나들이 개발 이야기:티스토리]
public class MapExample {
    public static void main(String[] args) {
        Map<String, Integer> stdScores = new HashMap<>();
        stdScores.put("Kim", 95); // 정보 추가
        stdScores.put("Lee", 85);
        stdScores.put("Park", 90);
        stdScores.put("Choi", 80);

        System.out.println(stdScores.get("Kim")); // 정보 조회

        stdScores.put("Park", 92); // 정보 수정

        stdScores.remove("Choi"); // 정보 삭제

        for(Map.Entry<String, Integer> entry : stdScores.entrySet()){
            System.out.println(entry.getKey());
            System.out.println(entry.getValue());
        }
    }
}
public class CharacterCount {
    public static void main(String[] args) {
        String str="Hello, World";
        Map<Character, Integer> charCountMap=new HashMap<>();
        char[] strArray=str.toCharArray(); //{'H','e','l','l','o',','......}

        for(char c : strArray){
            if(charCountMap.containsKey(c)){
                charCountMap.put(c,charCountMap.get(c)+1);
            }else{
                charCountMap.put(c, 1);
            }
        }
        System.out.println("Character Counts");
        for(char c : charCountMap.keySet()){
            System.out.println(c + ":" + charCountMap.get(c));
        }
    }
}

'개발 > Java' 카테고리의 다른 글

Collection Framework API  (1) 2024.01.29
제네릭(Generic)  (0) 2024.01.29
인터페이스 기반의 프로그래밍  (0) 2024.01.29
자바 String 클래스  (1) 2024.01.29
자바 API  (0) 2024.01.29