[Java] java.util 패키지와 Collection 프레임워크

재영양·2022년 11월 2일
0

Study

목록 보기
8/14
post-custom-banner

java.util 패키지


java.util 패키지

  • Java 프로그래밍에 유용한 클래스들을 모아둔 패키지
  • 날짜와 관련된 클래스인 Date / Calendar 클래스, 자료구조와 관련된 Collection 프레임워크와 관련된 인터페이스와 클래스 등이 포함되어 있음.

Collection 프레임워크


  • java.util 패키지의 자료구조 클래스들
  • 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합
  • 책을 보관하기 위해서 책장을 이용하는 것처럼 다양한 자료들을 다양한 방식으로 관리하기 위한 방법이 필요한데, 이러한 방법을 제공하는 것을 자료구조, 컬렉션 프레임워크이다.

컬렉션 프레임워크의 주요 인터페이스

주요 인터페이스 간의 상속관계

  • Collection 인터페이스

    • 컬렉션 프레임워크에서 가장 기본이 되는 interface로, 여기에 자료가 있다는 것을 표현함
    • 중복 허용, 순서 기억 x
    • 대표적인 메소드: add(), size(), iterator()
    • Collection은 저장된 자료를 하나씩 하나씩 꺼낼 수 있는 Iterator 인터페이스를 반환함
      • Iterator의 메소드
        : 꺼낼것이 있는지 없는지 살펴보는 hasNext()메소드와 하나씩 자료를 꺼낼때 사용하는 next() 메소드
  • Set 인터페이스

    • 중복 허용 x
    • Collection 인터페이스를 상속받는다.
    • add 메소드: 같은 자료가 있으면 false, 없으면 true를 반환
  • List 인터페이스

    • 중복 허용, 순서 기억
    • Set 인터페이스와 마찬가지로 Collection 인터페이스를 상속받는다.
    • get(int) 메소드: n번째 자료를 꺼냄
  • Map 인터페이스

    • Key와 Value를 가지는 자료구조
    • put() 메소드를 이용하여 key와 value를 함께 저장한다.
    • 원하는 값을 꺼낼때는 key를 매개변수로 받아들이는 get() 메소드를 이용하여 값을 꺼낸다.
    • Map에 저장되어 있는 모든 Key들은 중복된 값을 가지면 안된다.
    • Key의 이런 특징 때문에 Map은 자신이 가지고 있는 모든 Key들에 대한 정보를 읽어들일 수 있는 Set을 반환하는 keySet() 메소드를 가지고 있다.


Set 인터페이스


  • HashSet
    • 인스턴스의 해시값을 기준으로 저장하기 때문에 순서를 보장하지 않는다.
    • NULL 값을 허용한다.
    • TreeSet보다 삽입, 삭제가 빠르다.
  • LinkedHashSet
    • 입력된 순서를 보장한다.
  • TreeSet
    • 이진 탐색 트리(Red-Black Tree)를 기반으로 한다.
    • 데이터들이 오름차순으로 정렬된다.
    • 데이터 삽입, 삭제에는 시간이 걸리지만 검색, 정렬이 빠르다.
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class SetExam {
	public static void main(String[] args) {
		Set<String> set1 = new HashSet<>();

        boolean flag1 = set1.add("kim");
        boolean flag2 = set1.add("lee");
        boolean flag3 = set1.add("kim");

        System.out.println(set1.size());   //저장된 크기를 출력합니다. 3개를 저장하였지만, 이미 같은 값이 있었기 때문에 2개가 출력
        System.out.println(flag1);  //true
        System.out.println(flag2);  //true
        System.out.println(flag3);  //false

        Iterator<String> iter = set1.iterator();

		// 1️⃣ while문
        while (iter.hasNext()) {   // 꺼낼 것이 있다면 true 리턴.          
            String str = iter.next(); // next()메소드는 하나를 꺼낸다. 하나를 꺼내면 자동으로 다음것을 참조한다.
            System.out.println(str);
        }
        
        // 2️⃣ for문
        for (String str : set1) {
        	System.out.println(str);
        }
    }
}
  • 인덱스가 따로 존재하지 않기 때문에 Iterator 사용

List 인터페이스


  • LinkedList
    • 양방향 포인터 구조로 데이터 삽입, 삭제가 빠르다.
    • ArrayList보다 검색이 느리다.
  • ArrayList
    • 단반향 포인터 구조로 데이터 순차적 접근에 강점을 가진다.
    • 배열을 기반으로 데이터를 저장한다.
    • 데이터 삽입, 삭제가 느리다.
    • 데이터 검색이 빠르다.
import java.util.ArrayList;
import java.util.List;

public class ListExam {

	public static void main(String[] args) {
		List<String> list = new ArrayList<>();

		// list에 3개의 문자열을 저장합니다.
		list.add("kim");
		list.add("lee");
		list.add("kim");

		System.out.println(list.size()); //list에 저장된 자료의 수를 출력 (중복을 허용하므로 3 출력) 
		for(int i = 0; i < list.size(); i++){
			String str = list.get(i);
			System.out.println(str);
		}
	}   
}
import java.util.*;

public class ListExam{
    public List<String> addArray(String[]arr1, String[]arr2){
        List<String> list = new ArrayList<String>();
        
        for(String str : arr1){
            list.add(str);
        }
        for(String str : arr2){
            list.add(str);
        }
        
        return list;
    }
    
    public static void main(String[] args){  
        ListExam le = new ListExam();
        String[] arr1 = {"가", "나", "다"};
        String[] arr2 = {"라", "마", "바"};
        
        List<String> list = le.addArray(arr1, arr2);
        
        for (int i=0; i < list.size(); i++) {
            String str = list.get(i);
            System.out.println(str);
        }
        
    }
}

Map 인터페이스


  • HashMap
    • Key에 대한 중복이 없으며 순서를 보장하지 않는다.
    • Key와 Value 값으로 NULL을 허용한다.
    • 동기화가 보장되지 않는다.
    • 검색에 가장 뛰어난 성능을 가진다.
  • HashTable
    • 동기화가 보장되어 병렬 프로그래밍이 가능하고 HashMap 보다 처리속도가 느리다.
    • Key와 Value 값으로 NULL을 허용하지 않는다.
  • LinkedHashMap
    • 입력된 순서를 보장한다.
  • TreeMap
    • 이진 탐색 트리(Red-Black Tree)를 기반으로 키와 값을 저장한다.
    • Key 값을 기준으로 오름차순 정렬되고 빠른 검색이 가능하다.
    • 저장 시 정렬을 하기 때문에 시간이 다소 오래 걸린다.
public class MapExam {  
        public static void main(String[] args) {
            // Key, Value가 모두 String 타입인 HashMap인스턴스
            Map<String, String> map = new HashMap<>();

            map.put("001", "kim");
            map.put("002", "lee");
            map.put("003", "choi");
            map.put("001", "kang");

            System.out.println(map.size());

            System.out.println(map.get("001"));

            // map에 저장된 모든 key들을 Set자료구조로 꺼냅니다.
            Set<String> keys = map.keySet();

            Iterator<String> iter = keys.iterator();
            while (iter.hasNext()) {
                String key = iter.next();
                String value = map.get(key);
                System.out.println(key + " : " + value);
            }
        }
    }
post-custom-banner

0개의 댓글