JAVA SPRING/java

JAVA_007) 컬렉션 프레임워크 - List, Map, Set

오동순이 2023. 4. 3. 12:28

컬렉션 프레임워크(collection framework)란?

컬렉션 프레임워크(collection framework)란 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미

즉, 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것

이러한 컬렉션 프레임워크는 자바의 인터페이스(interface)를 사용하여 구현됨

 

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

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

위의 그림에서 <E>나 <K, V>라는 것은 컬렉션 프레임워크를 구성하는 모든 클래스가 제네릭으로 표현되어 있음

 

List : 순서가 있는 데이터의 집합 ArrayList, LikeList
Set : 순서가 없는 데이터의 집합 데이터 중복x Hashset
Map : key &value 데이터의 집합 HashMap

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

* List 의 Stack은 시스템 친화적 후입선출, 일반은 선입선출

ArrayList의 단점 보완 ->LinkedList

remove(Object o) < 프리미티어X 레퍼클래서 타입O
remove(int index)

<프레임 워크의 사용법!> 컬렉션 프레임 워크 리스트

사용 add  remove  contains    get  size  set new
설명 추가  제거 true/false
있나없나(중복검사용)
index안에 있는 값 
memory 주소값
데이터 읽기(가져오기)
length  교체,수정 생성

ex )데이터를 추가 할 위치까지 지정
    accountList.add(0,new AccountEx("급여통장2", 111111)); //0번 위치에 밀어 넣는 것

1. Arraylist   <- 순차조회를 많이 하면 이거 
// 순차 조회 전용 for 문 (일반배열 조회 에도 사용가능)
     for(AccountEx a : accountList) {
       a.showInfo();
     }

\// 우리가 해왔던 조회 방법
      for(int i=0; i<accountList.size(); i++){
      accountList.get(i).showInfo();
    }

* ArrayList 예제

import java.util.ArrayList;
import java.util.List;

public class CollectionEx {
  public static void main(String[] args) {
    Integer[] arr = {10, 20, 30};
    List<Integer> list = new ArrayList<Integer>(); //**젤많이씀 데이터 순차조회 //**수정은 데이터베이스에서 써요
    list.add(10);
    list.add(20);
    list.add(30);
    for(int i=0; i<list.size(); i++){
      System.out.println(list.get(i));
    }
    System.out.println("-----------------------------------");
    list.add(40);
    for(int i=0; i<list.size(); i++){
      System.out.println(list.get(i));
    }
    System.out.println("-----------------------------------");
    // list.remove(30); // 30번째 데이터 삭제 - 범위 넘어섬 remove(int index)// ** remove 주의 요망  
    
    // Integer rm = 30; // 30이라는 값을 삭제하고 싶을 때 //remove(Object o)
    // list.remove(rm);
    list.remove(2);
    for(int i=0; i<list.size(); i++){
      System.out.println(list.get(i));
    }
    Integer target = 30;
    // 현재 list에 Integer 값 30이 있는가? // 중복검사하기 쉽쥬?
    System.out.println(list.contains(target));
    List<Integer> list2 = new ArrayList<Integer>();
    list2.add(10);                // 10      10 X(remove)      
    list2.add(40);                // 20            --> 20 만 남음 ( list.에서 removeAll(list2 에 있는것)) 결과 20남음
    list.removeAll(list2);        // 40      40 X(remove)          (교집합제거)동일한 값만 제거/ 안에 들어있는 것만 제거
    System.out.println(list);     // list    list2
  }

}


2. LinkedList <- 수정이 많이 일어날거 같으면 이거
-> 둘중에 아무거도 해도 되! 컴터가 좋아져서

* LinkedList 예제

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class CollectionEx {
  public static void main(String[] args) {
    Integer[] arr = {10, 20, 30};
    List<Integer> list = new LinkedList<Integer>(); //**젤많이씀 데이터 순차조회 //**수정은 데이터베이스에서 써요
    list.add(10);
    list.add(20);
    list.add(30);
    for(int i=0; i<list.size(); i++){
      System.out.println(list.get(i));
    }
    System.out.println("-----------------------------------");
    list.add(40);
    for(int i=0; i<list.size(); i++){
      System.out.println(list.get(i));
    }
    System.out.println("-----------------------------------");
    // list.remove(30); // 30번째 데이터 삭제 - 범위 넘어섬 remove(int index)// ** remove 주의 요망  
    
    // Integer rm = 30; // 30이라는 값을 삭제하고 싶을 때 //remove(Object o)
    // list.remove(rm);
    list.remove(2);
    for(int i=0; i<list.size(); i++){
      System.out.println(list.get(i));
    }
    Integer target = 30;
    // 현재 list에 Integer 값 30이 있는가? // 중복검사하기 쉽쥬?
    System.out.println(list.contains(target));
    List<Integer> list2 = new ArrayList<Integer>();
    list2.add(10);                // 10      10 X(remove)      
    list2.add(40);                // 20            --> 20 만 남음 ( list.에서 removeAll(list2 에 있는것)) 결과 20남음
    list.removeAll(list2);        // 40      40 X(remove)          (교집합제거)동일한 값만 제거/ 안에 들어있는 것만 제거
    System.out.println(list);     // list    list2
  }

}


3. Vector <- 우리가 썻던 배열과 같다 (사용방법은 위와 같다)

*Vector 예제

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Vector;

public class CollectionEx {
  public static void main(String[] args) {
    Integer[] arr = {10, 20, 30};
    List<Integer> list = new Vector<Integer>(); //**젤많이씀 데이터 순차조회 //**수정은 데이터베이스에서 써요
    list.add(10);
    list.add(20);
    list.add(30);
    for(int i=0; i<list.size(); i++){
      System.out.println(list.get(i));
    }
    System.out.println("-----------------------------------");
    list.add(40);
    for(int i=0; i<list.size(); i++){
      System.out.println(list.get(i));
    }
    System.out.println("-----------------------------------");
    // list.remove(30); // 30번째 데이터 삭제 - 범위 넘어섬 remove(int index)// ** remove 주의 요망  
    
    // Integer rm = 30; // 30이라는 값을 삭제하고 싶을 때 //remove(Object o)
    // list.remove(rm);
    list.remove(2);
    for(int i=0; i<list.size(); i++){
      System.out.println(list.get(i));
    }
    Integer target = 30;
    // 현재 list에 Integer 값 30이 있는가? // 중복검사하기 쉽쥬?
    System.out.println(list.contains(target));
    List<Integer> list2 = new ArrayList<Integer>();
    list2.add(10);                // 10      10 X(remove)      
    list2.add(40);                // 20            --> 20 만 남음 ( list.에서 removeAll(list2 에 있는것)) 결과 20남음
    list.removeAll(list2);        // 40      40 X(remove)          (교집합제거)동일한 값만 제거/ 안에 들어있는 것만 제거
    System.out.println(list);     // list    list2
  }

}


하나만 익혀놓으면 사용방법이 같음!

 

 

참고 사이트

http://www.tcpschool.com/java/java_collectionFramework_concept

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com