Java/java

java :) collection 프레임워크, collection의 전체 그림/collection의 주요 메소드/List인터페이스 및 구현체 설명/ Set인터페이스 및 구현체 설명

euncheol kim 2022. 5. 18. 00:06

goal

자바의 collection framework 이해

자바의 collection 인터페이스의 주요 메소드

자바의 List 인터페이스의 개념과 설명

자바의 List<E> 구현체 -> ArrayList 클래스

자바의 List<E> 구현체 -> LinkedList 클래스

자바의 Set 인터페이스의 개념과 설명

자바의 Set<E> 구현체 -> HashSet 클래스

자바의 Set<E>구현체 -> TreeSet 클래스

 

 

1 ] 자바의 collection framework


1. 개념


  • 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합
  • 즉, 데이터를 저장하는 자료 구조데이터를 처리하는 알고리즘구조화하여 클래스로 구현해 놓은 것이다.
  • 컬렉션 프레임워크는 자바의 인터페이스(interface)를 사용하여 구현된다.

 

 

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


  1. List 인터페이스
  2. Set 인터페이스
  3. Map 인터페이스
인터페이스 설명 구현클래스
List<E> 순서가 있으며 중복을 허용한다. Stack, Queue, ArrayList, LinkedList, Vector
Set 순서가 없으며 중복을 허용하지 않는다. HashSet, TreeSet
Map<K, V> 키와 값이 한 쌍으로 이루어지는 데이터 집합
- 순서가 없다.
키는 중복을 허용하지 않지만, 값은 중복될 수 있다.
HashMap, TreeMap, Hashtable, Properties

 

 

3. 주요 컬렉션 프레임워크 간의 상속 관계


image

참고 자료 : JAVA Collection Framework (1) - 컬렉션 프레임워크란?, https://hudi.blog/java-collection-framework-1/, @Hudi

 

 

4. 컬렉션 클래스


  • 컬렉션 프레임워크에 속하는 인터페이스를 구현한 클래스를 컬렉션 클래스라고 한다.

 

 

5. Collection 인터페이스


  • Collection 인터페이스에서 List와 Set과 관련한 공통 부분을 정의한다.
  • 그리고, 구현체들은 collection 인터페이스를 상속 받는다.
  • 다른 말로 하자면, Collection 인터페이스는 컬렉션을 다루는데 가장 기본적인 동작들을 정의하고 그것들을 메소드로 제공한다.

[1] Collection 인터페이스의 주요 메소드


메소드 설명
boolean add(E e) 주어진 객체를 컬렉션에 추가
boolean addAll(Collection c) 주어진 컬렉션의 객체들을 컬렉션에 추가
void clear() 해당 컬렉션의 모든 요소를 제거한다.
boolean contains(Object o) 주어진 객체가 저장되어 있는지 여부 확인
boolean containsAll(Collection c) 주어진 컬렉션이 저장되어 있는지 여부 확인
boolean equals(Object o) 해당 컬렉션과 전달된 객체가 같은지를 확인한다.
- 결국, 객체가 같은지 확인하기 때문에 메모리 주소를 비교한다.
boolean isEmpty() 해당 컬렉션이 비어있는지를 확인한다.
Iterator<E> iterator() 해당 컬렉션의 반복자(iterator)를 반환한다.
- 현재로서는 이해가 되지 않는부분..
- 따로 정리가 필요하다.
boolean remove(Object o) 해당 컬렉션에서 전달된 객체를 제거하고 성공 여부를 반환한다.
- 컬렉션프레임워크.remove(index) :: index로 객체를 삭제한다.
- 컬렉션프레임워크.remove("요소명") :: 요소명으로 객체를 삭제한다.
- 참고 블로그 :: 컬렉션 프레임워크(List 컬렉션 1), https://dustink.tistory.com/98, DUKI의 개발
boolean removeAll(Object o) 해당 컬렉션에서 전달된 컬렉션을 삭제하고 성공 여부를 반환한다.
int size() 해당 컬렉션의 요소의 총 개수를 반환한다.
- for문에서 순회할 때 자주 사용하는 문법이다.
Object[] toArray() 해당 컬렉션의 모든 요소를 Object 타입의 배열로 반환한다.
- 예시 코드는 아래 기입했다.
Object[] toArray(Object[] a) 주어진 배열에 컬렉션의 객체를 저장해서 반환한다.
boolean retainAll(Collection c) 주어진 컬렉션을 제외한 모든 객체를 컬렉션에서 삭제하고 컬렉션에 변화가 있는지 여부를 반환한다.

 

※ 컬렉션 프레임워크의 toArray() 사용방법

  1. 컬렉션 프레임워크 toArray() 리스트를 활용한 객체 반환 출력
List<String> list1 = new ArrayList<>();
    list1.add("A");
    list1.add("B");
    list1.add("C");
    String[] strList = list1.toArray(new String[0]);
    for (String str: strList)
        System.out.println(str);
        // str.getClass().getSimpleName() => String

        /* output
            ----------------------
            A
            B
            C
            ----------------------
        */
  1. 컬렉션 프레임워크 toArray() 리스트를 활용하지 않고 출력한 객체 반환
 List<String> list1 = new ArrayList<>();
        list1.add("A");
        list1.add("B");
        list1.add("C");

         for(int i = 0;  i < list1.size();i++) {
            System.out.println(list1.get(i));
            // list1.get(i).getClass().getSimpleName() => String
        }

         /* output
            ----------------------
            A
            B
            C
            ----------------------
        */

 

 

2 ] 컬렉션 프레임워크, List<E> 인터페이스


List 인터페이스는 객체를 일렬로 늘어놓은 구조이다.

  • 객체를 인덱스로 관리하며, 객체를 저장하면 자동적으로 인덱스가 부여된다.
  • 인덱스로 객체를 검색, 삭제할 수 있는 기능을 제공한다.

1. List<E> 인터페이스의 주요 메소드


기능 리턴 타입 메소드 설명
검색추가 void add(int index, Object element) 주어진 인덱스에 객체를 추가
  boolean addAll(int index, Collection c) 주어진 인덱스에 컬렉션을 추가
  Object set(int index, Object element) 주어진 위치에 객체를 저장
객체검색 Object get(int index) 주어진 인덱스에 저장된 객체를 반환
  int indexOf(Object o)
lastIndexOf(Object o)
순방향 / 역방향으로 탐색하여 주어진 객체의
위치를 반환한다.
  ListIterator listIterator()
listIterator(int index)
List의 객체를 탐색할 수 있는 ListIterator 반환
주어진 index부터 탐색할 수 있는 ListIterator반환
  List subList(int fromIndex, int toIndex) 주어진 인덱스에 저장된 객체를 삭제하고 삭제된 객체를 반환한다.
객체삭제 Object remove(int index) 주어진 인덱스에 저장된 객체를 삭제하고 삭제된 객체를 반환한다.
  boolean remove(Object o) 주어진 객체를 삭제
객체정렬 void sort(Comparator c) 주어진 비교자(comparator)로 List를 정렬

 

 

2. ArrayList


컬렉션 프레임워크에서 가장 많이 사용된다.

  • Vector와 동일하지만 Vector를 개선한 List인터페이스의 구현체
  • List 계열 자료구조의 특성을 이어받아 데이터가 연속적으로 존재한다.

 

 

[1] ArrayList의 장점


  • 기존의 배열은 크기가 고정되고, 크기를 변경할 수 없다.
  • 하지만ArrayList가변된 크기를 가진다. (즉, ArrayList 초과 용량이 들어오면 자동적으로 늘어남)

 

 

[2] ArrayList의 초기화 및 사용 예시


// List<타입 파라미터> 객체명 = new ArrayList<타입파라미터>(용량지정);

List<String> listArray = new ArrayList<String>();
// 초기 용량은 10개로 생성되며, ArrayList안에 10개의 객체를 저장할 수 있게 생성

List<String> listArray = new ArrayList<String>(100);
// 초기 용량은 100개로 생성되며, ArrayList안에 100개의 객체를 저장할 수 있게 생성한다.
import java.util.ArrayList;
import java.util.List;

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

        list.add("Java"); // String 객체 저장/추가
        list.add("python");
        list.add("javaScript");

        int size = list.size(); // 저장된 총 객체 수 얻기 <Collection interface>
        String skill = list.get(0); // 0번 인덱스의 객체 얻기

        for(int i = 0; i < list.size(); i++){// 저장된 총 객체 수 만큼 조회 <List interface>
            String str = list.get(i);
            System.out.println(i + ":" + str);
        }

        System.out.println("-------------------------------------");
        list.remove(0); // 0번 인덱스 객체 삭제
        for(int i = 0; i < list.size(); i++){// 저장된 총 객체 수 만큼 조회
            String str = list.get(i);
            System.out.println(i + ":" + str);
        }
    }
}

 

 

3. LinkedList


ArrayList와 사용법은 똑같으나 자료구조적인 차이가 존재한다.

  • 데이터를 효율적으로 추가, 삭제, 변경에 용이하다.
  • 메모리상에 불연속적으로 존재하며, Node마다 데이터는 서로 연결 되어있다.
  • 자료구조와 깊은 연관이 있으니 추후에 공부하고 사용법과 같이 포스팅할 예정

 

 

3 ] 컬렉션 프레임워크 Set<E>


Set은 요소의 중복을 허용하지 않으며 순서가 없다.

  • 집합과 같은 개념이다.
  • 대표적으로 HashSet과 TreeSet이 존재한다.

 

 

1. HashSet


[1]. HashSet<E> 실습


import java.util.*;

public class Main {

    public static void main(String[] args) {
        HashSet<String > languages = new HashSet<String>();

        languages.add("Java");
        languages.add("Python");
        languages.add("Javascript");
        languages.add("C++");
        languages.add("Kotlin");
        languages.add("Ruby");
        languages.add("Java");

        Iterator it = languages.iterator();

        while(it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

 

2. TreeSet

하 --.. 추후 포스팅