본문 바로가기
프로그래밍 언어/Java 프로그래밍

Java Day10 - 컬렉션 프레임워크(ArrayList, HashMap, ...)

by Hyeon_ 2021. 11. 13.

컬렉션 프레임워크(Collection Framework)

  • ArrayList
  • LinkedList
  • Stack & Queue
  • HashMap & Hashtable
  • TreeMap

자료 타입

  • 자바에서 추가적으로 제공되는 자료 타입
    • 자료구조의 한 종류
    • 쉽게 쓰기 위해서 미리 클래스가 정의

리스트

  • List 인터페이스를 구현한 클래스들
    • ArrayList, LinkedList
    • 선형 자료구조의 한 종류
    • 배열의 크기는 고정되어 있음. 그것을 가변적으로 하기 위해

ArrayList

package Standard_Java;

import java.util.ArrayList;

public class ArrayList01 {
    public static void main( String [] args ) {
        // 객체 생성
        ArrayList arr = new ArrayList();

        // 원소를 추가 하는 방법(add)
        arr.add("10");
        arr.add("20");
        arr.add("30");

        // 배열의 내의 원소를 확인(get)
        System.out.println(arr.get(0));

        // 배열의 크기를 확인하고 싶은 경우(size)
        System.out.println(arr.size());

        // 배열에 원소를 삽입하는 경우(add)
        arr.add(1, "15");

        // 배열내의 모든 원소를 확인하고 싶은 경우에는 순회
        for( int i = 0; i < arr.size(); i++) {
            System.out.println(arr.get(i));
        }

        // 배열의 원소를 검색하는 경우
        System.out.println( arr.contains("15"));

        // 배열에서 원소를 삭제하는 경우(remove)

        // 매개변수가 객체인 경우(기본타입이 아닌 경우)
        arr.remove("10");
        for( int i = 0; i < arr.size(); i++) {
            System.out.println(arr.get(i));
        }

        System.out.println();

        // 매개변수가 숫자(인덱스)인 경우

        arr.remove(1);
        for( int i = 0; i < arr.size(); i++) {
            System.out.println(arr.get(i));
        }
    }
}

Generics(제네릭스)

  • 명시된 타입 이외에 다른 타입의 원소를 넣을 수 없음
  • 자동으로 타입이 확인되는 이점이 존재한다.
  • 기본 형태
ArrayList<String> arr = new ArrayList()
  • 예제
package Standard_Java;

import java.util.ArrayList;

public class Generics01 {
    public static void main(String[] args) {
        ArrayList arr = new ArrayList();

        // 원소의 타입이 String임을 알고 있음
        arr.add("Java");
        arr.add("Python");
        arr.add("C++");

        // 객체에 들어갈 타입을 명시해주는 것
        ArrayList<String> arr1 = new ArrayList<String>();

        arr1.add("Java");
        arr1.add("Python");
        arr1.add("C++");

        // 별도의 타입 체크가 필요 없음
        String str = arr1.get(0);
        System.out.println(str);

    }
}

Map(맵)

  • Key & Value 형태의 자료형
    • 배열은 인덱스가 정해져 있음 (0부터 순차적으로 번호 부여)
    • 인덱스 대신에 사용자가 지정한 키를 가지고 인덱싱 가능
  • Map 인터페이스를 구현해서 정의된 여럭자ㅣ 클래스들
    • HashMap, LinkedHashMap, TreeMap, ...

HashMap

public class HashMap01 {
    public static void main(String[] args) {

        HashMap<Key, Value> map = new HashMap<Key, Value >();
    }
}
  • 예제 - 1
import javax.swing.text.html.parser.Entity;
import java.util.HashMap;
import java.util.Map;

public class HashMap01 {
    public static void main(String[] args) {

        HashMap<String, String> map = new HashMap<String, String >();

        // 원소를 추가하는 경우(put)
        map.put("first", "김준면");
        map.put("second", "김민석");

        // 원소를 확인하는 방법(get)
        System.out.println(map.get("first"));

        // 전체 원소를 확인하려면
        System.out.println(map.entrySet());

        // for each
        for(Map.Entry<String, String> item: map.entrySet()){
            System.out.printf("key: %s, value: %s\n", item.getKey(), item.getValue());
        }

        // 키만 확인
        System.out.println(map.keySet());

        for(String key: map.keySet()) {
            System.out.println(map.get(key));
        }

        // 원소를 삭제하는 경우(remove)
        // 키에 해당하는 원소를 삭제하면 해당 값 돌려줌
        System.out.println(map.remove("first"));

        // 크기 확인(size)
        System.out.println(map.size());
    }
}