ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 컬렉션 프레임워크
    JAVA 2020. 2. 1. 19:06

     

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

    : 배열의 단점을 해결하고자, 널리 알려져 있는 자료구조(Data Structure)를 바탕으로 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 java.util 패키지에 컬렉션과 관련된 인터페이스와 클래스들을 포함 한것.

     

    컬렉션이란?

    사전적 의미로 요소를 수집해서 저장하는 것을 말하며, 자바 컬렉션은 객체를 수집해서 저장하는 역할

     

    프레임워크란 ?

    사용방법을 미리 정해 놓은 라이브러리

     

    1.1 List 컬렉션

    - List 컬렉션은 객체를 일렬로 늘어놓은 구조

    - 객체를 인덱스로 관리

    - 객체를 저장하면 자동 인덱스가 부여되고 인덱스로 객체를 검색, 삭제할 수 있는 기능을 제공

    - 객체 자체를 저장하는 것이 아닌 객체의 번지를 참조

    - 동일한 객체를 중복 저장할 수 있으며, 동일한 번지가 참조

    - null도 저장 가능하지만 해당 인덱스는 객체를 잠조하지 않음.

    셀 전체 선택

    객체 추가

    boolean add(E e)

    주어진 객체를 맨 끝에 추가

    void add(int index, E element)

    주어진 인덱스에 객체를 추가

    set(int index, E element)

    주어진 인덱스에 저장된 객체를 주어진 객체로 바꿈

     

    객체 검색

    boolean contains(Object o)

    주어진 객체가 저장되어 있는지 여부

    E get(int index)

    주어진 인덱스에 저장된 객체를 리턴

    isEmpty()

    컬렉션이 비어 있는지 조사

    int size()

    저장되어 있는 전체 객체 수를 리턴

     

    객체 삭제

    void clear()

    저장된 모든 객체를 삭제

    E remove(int index)

    주어진 인덱스에 저장된 객체를 삭제

    boolean remove(Object o)

    주어진 객체를 삭제

     

    package collectionFrameworkEx;
     
    import java.util.*;
     
    public class ArrayListEx {
        public static void main(String[] args) {
            List<String> list = new ArrayList<String>();
            
            list.add("java");
            list.add("JDBC");
            list.add("Servlet/JSP");
            list.add(2,"Database");
            list.add("iBATIS");
            
            int size = list.size();
            System.out.println("총 객체수" + size);
            
            String skill = list.get(2);
            System.out.println("2: "+skill);
            
            System.out.println();
            System.out.println("list 속성 get");
            for(int i=0; i<list.size(); i++){
                String str = list.get(i);
                System.out.println(i +": "+str);
            }
            
            list.remove(2);
            list.remove(2);
            list.remove("iBATIS");
            
            for(int i=0; i<list.size(); i++){
                String str = list.get(i);
                System.out.println(i +"(after remove): "+str);
            }
            
            List<String> list2 = Arrays.asList("soli","gongyoo","jeongjae");
            for(String name : list2){
                System.out.println(name);
            }
        }
    }
     
    cs

     

     

    1.2 Set 컬렉션

    - 저장 순서가 유지되지 않는다.

    - 중복 저장이 안되며, 하나의 Null만 저장 가능.

    - 인덱스로 관리되지 않음

    객체 추가

    boolean add(E e)

    주어진 객체를 저장, 객체가 성공적으로 저장되면 true를 리턴하고 중복 객체면 false를 리턴

    객체 검색

    boolean contains(Object o)

    주어진 객체가 저장되어 있는지 여부

    isEmpty()

    컬렉션이 비어 있는지 조사

    Iterator<E> iterator()

    저장된 객체를 한 번씩 가져오는 반복자 리턴

    int size()

    저장되어 있는 전체 객체 수 리턴

    객체 삭제

    void clear()

    저장된 모든 객체를 삭제

    boolean remove(Object o)

    주어진 객체를 삭제

    Iterator

    - 컬렉션 프레임워크에서는 컬렉션에 저장된 요솓ㄹ을 읽어오는 방법을 표준화

    - 컬렉션에 저장된 각 요소에 접근하는 기능을 가진 Iterator인터페이스를 정의

    - Collection인터페이스에는 Iterator(Iterator를 구현한 클래스의 인스턴스)를 반환하는 iterator()를 정의

    - Collection인터페이스의 자손 List, Set에도 포함

     

    Set 컬렉션은 인덱스로 객체를 검색해서 가져오는 메소드가 없기 때문에 대신, 전체 객체를 대상으로 한번씩 반복해서 가져오는 반복자(Iterator)를 제공.

    반복자는 Iterator 인터페이스를 구현한 객체를 말하며, iterator() 메소드를 호출하여 얻는다.

    boolean

    hasNext()

    가져올 객체가 있으면 true를 리턴하고 없으면 false를 리턴

    E

    next()

    컬렉셔에서 하나의 객체를 가져온다.

    void

    remove()

    Set 컬렉션에서 객체를 제거

    import java.util.*;
     
    public class SetIteratorEx {
        public static void main(String[] args) {
            Set<String> set = new HashSet<String>();
            
            set.add("JAVA");
            set.add("JDBC");
            set.add("Servlet/JSP");
            set.add("JAVA"); //"java는 한번만 저장됨. 중복 불가
            set.add("iBATIS");
            
            int size = set.size();
            System.out.println("set Size : "+size);
            
            Iterator<String> iterator = set.iterator();
            while(iterator.hasNext()){
                String element = iterator.next();
                System.out.println(element);
            }
            
            set.remove("JDBC");
            set.remove("iBATIS");
            
            System.out.println("Set SIZE after remove : "+set.size());
            
            iterator = set.iterator();
            while(iterator.hasNext()){
                String element = iterator.next();
                System.out.println(element);
            }
            
            set.clear(); //모든 객체 제거
            if(set.isEmpty()){
                System.out.println("값 없음.");
            }
        }
        
        
    }
    cs

     

     

    1.3 Map 인터페이스

    - 키(Key)와 값(Value)을 하나의 쌍으로 묶어서 저장하는 컬렉션 클래스를 구현하는 데 사용

    - 키는 중복될 수 없지만, 값은 중복 허용

    - 기존에 저장된 데이터와 중복된 키와 값을 저장하면 기존의 값은 없어지고 마지막에 저장된 값이 남겨짐

    void clear() Map의 모든 객체를 삭제
    boolean containsKey(Object key) 지정된 key객체와 일치하는 Map의 key객체가 있는지 확인
    boolean containsValue(Object value) 지정된 value 객체와 일치하는 Map의 value객체가 있는지 확인
    Set entrySet() Map에 저장되어 있는 Key-value쌍을 Map.Entry타입의 객체로 저장한 Set으로 반환
    boolean equals(Objext o) 동일한 Map인지 비교
    Object get(Object key) 지정한 key객체에 대응하는 value객체를 찾아서 반환
    int hashCode() 해시코드를 반환
    boolean isEmpty Map이 비어있는지 확인
    Set keySet() Map에 저장된 모든 key객체를 반환
    Object put(Object key, Object value) Map에 value객체를 key객체에 연결(mapping)하여 저장
    void putAll(Map t) 지정된 Map의 모든 key-value쌍을 추가
    Object remove(Object key) 지정한 key객체와 일치하는 key-value객체를 삭제
    int size() Map에 저장된 key-value쌍의 개수를 반환
    Collection values() Map에 저장된 모든 value객체를 반환
    //저장된 객체 객체를 대상으로 하나씩 얻고 싶을 경우 두 가지 방법을 사용한다.
     
    //1. keySet()
    Map<K,V> map = ~;
    Set<K> keySet = map.keySet();
    Iterator<K> keyIterator = keySet.iterator();
    while(keyIterator.hasNext()){
        K key = keyIterator.next();
        V value = map.get(key);
    }
     
    //2.entrySet()
    Set<Map.Entry<K,V>> entrySet = map.entrySet();
    Iterator<Map.Entry<K,V>> entryIterator = entrySet.iterator();
    while(entryIterator.hasNext()){
        Map.Entry<K,V> entry = entryIterator.next();
        K key = entry.getKey();
        V value = value.getValue();
    }
    cs

    Map.Entry인터페이스

    - Map인터페이스의 내부 인터페이스

    - 내부 클래스와 같이 인터페이스도 인터페이스 안에 인터페이스를 정의하는 내부 인터페이스를 정의하는 것이 가능

     

    Map에 저장되는 key-value쌍을 다루기 위해 내부적으로 Entry인터페이스를 정의해 놓았다.

     

     

     

    **참고서적

    자바의 정석

    이것이 자바다

    'JAVA' 카테고리의 다른 글

    Stack & Queue  (0) 2020.02.01
Designed by Tistory.