컬렉션 자료구조

2023. 2. 1. 21:07스파르타 내일배움캠프/Java

https://codingwell.tistory.com/17

 

List 컬렉션

 

 

List 인터페이스 메소드

 

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) - 주어진 객체를 삭제

 

List 컬렉션은 객체 자체를 저장하는 것이 아니라 객체의 번지를 저장한다. 또한 동일한 객체를 중복 저장할 수 있는데, 이 경우에는 동일한 번지가 저장된다. null 또한 저장이 가능하다.

 

ArrayList

배열이지만 기본 배열 타입과는 달리 제한 없이 객체를 추가할 수 있다.

List<E> list = new ArrayList<E>();
List<E> list = new ArrayList<>();
List list = new ArrayList();

ArrayList 컬렉션에 객체를 추가하면 인덱스 0번부터 차례대로 저장된다.

특정 인덱스의 객체를 제거하면 바로 뒤 인덱스부터 마지막 인덱스까지 모두 앞으로 1씩 당겨진다. 삽입할 때도 마찬가지이다.

따라서 중간에 삽입/제거가 이루어지면 많은 데이터 이동이 이루어진다. 빈번한 수정이 일어나는 곳에서는 ArrayList를 사용하지 않는 것이 좋다. -> LinkedList 이용할 것

 

Vector

ArrayList와 구조는 동일하나 동기화된 메소드로 구성되어 있다. 따라서 멀티 스레드 환경에서 안전하게 객체를 편집할 수 있다.

 

List<E> list = new Vector<E>();
List<E> list = new Vector<>();
List list = new Vector();

 

LinkedList

LinkedList는 인접 객체를체인처럼 연결해서 관리한다. 특정 위치에 객체를 삽입하거나 삭제하면 앞뒤 링크만 변경하므로 빈번한 객체 삭제와 삽입이 일어나는 곳에서 ArrayList보다 좋은 성능을 발휘한다.

 

https://dev-coco.tistory.com/19https://dev-coco.tistory.com/19

List<E> list = new LinkedList<E>();
List<E> list = new LinkedList<>();
List list = new LinkedList();

 

 

Set 컬렉션

List 컬렉션은 저장 순서를 유지하지만 Set 컬렉션은 저장 순서가 유지되지 않는다. 또 객체 중복 저장이 안되며 하나의 null만 저장할 수 있다.

 

Set 인터페이스 메소드

 

boolean add(E e) - 주어진 객체를 성공적으로 저장하면 true. 중복 객체면 false를 리턴

 

boolean contains(Object o) - 객체가 저장되어 있는지 확인

isEmpty() - 컬렉션이 비어 있는지 조사

Iterator<E> iterator() - 저장된 객체를 한 번씩 가져오는 반복자 리턴

int size() - 저장되어 있는 전체 객체 수 리턴

 

void clear() - 저장된 모든 객체를 삭제

boolean remove(Object o) - 주어진 객체를 삭제

 

Set 컬렉션은 인덱스가 없으므로 검색하는 메소드가 없다. 대신 객체를 하나씩 반복해서 가져올 수 있도록 iterator() 메소드가 있다.

Iterator<E>는 다음 메소드를 가지고 있다.

boolean hasNext() - 가져올 객체가 있으면 true, 없으면 false를 리턴

E next() - 컬렉션에서 하나의 객체를 가져온다.

void remove() - next()로 가져온 객체를 컬렉션에서 제거한다.

 

HashSet

Set<E> set = new HashSet<E>();
Set<E> set = new HashSet<>();
Set set = new HashSet();

동일한 객체는 중복 저장하지 않는다. 이때 동일한 객체를 hashCode() 메소드의 리턴 값이 같고, equals() 메소드가 true를 리턴하는 객체들을 의미한다.

public List<Integer> solution(int[] numbers) {
        int n = numbers.length;
        List<Integer> answer = new ArrayList<>();
        HashSet<Integer> set = new HashSet<>();
        for(int i=0; i<n; i++) {
            for(int j=i+1; j<n; j++) {
                set.add(numbers[i]+numbers[j]);
            }
        }
        Iterator<Integer> itr = set.iterator();
        while(itr.hasNext()) {
            answer.add(itr.next());
        }
        Collections.sort(answer);
        return answer;
    }

 

 

Map 컬렉션

key와 value로 구성된 Entry 객체를 저장하는 컬렉션. 키와 값 모두 객체이며 키는 중복 저장할 수 없지만 값은 중복 저장이 가능하다. 

기존에 저장된 키와 동일한 키로 값을 저장하면 기존의 값은 없어지고 새로운 값으로 대치된다.

 

Map 인터페이스 메소드

 

V put(K key, V value) - 주어진 키와 값을 추가, 저장이 되면 값을 리턴

 

boolean containsKey(Object key) - 주어진 키가 있는지 여부

boolean containsValue(Object value) - 주어진 값이 있는지 여부

Set<Map.Entry<K,V>> entrySet() - 키와 값의 쌍으로 구성된 모든 Map.Entry 객체를 Set에 담아서 리턴

V get(Object key) - 주어진 키의 값을 리턴

boolean isEmpty() - 컬렉션이 비어있는지 여부

Set<K> keySet() - 모든 키를 Set 객체에 담아서 리턴

int size() - 저장된 키의 총 수를 리턴

Collection<V> values() - 저장된 모든 값 Collection에 담아서 리턴

 

void clear() - 모든 Map.Entry를 삭제

V remove(Object key) - 주어진 키와 일치하는 Map.Entry 삭제, 삭제가 되면 값을 리턴

 

HashMap

Map<K, V> map = new HashMap<K, V>();
Map<K, V> map = new HashMap<>();

 

Hashtable

HashMap과 동일한 구조에 동기화된 메소드만 추가된 자료구조

Map<K, V> map = new Hashtable<K, V>();
Map<K, V> map = new Hashtable<>();

 

 

Properties

Hashtable의 자식 클래스. 키와 값을 String 타입으로 제한한 컬렉션

Properties는 주로 확장자가 .properties인 프로퍼티 파일을 읽을 때 사용한다.

프로퍼티 파일은 키와 값이 = 기호로 연결되어 있는 텍스트 파일이다.

// 읽는 방법
Properties properties = new Properties();
properties.load(Xxx.class.getResourceAsStream("application.properties");

 

TreeSet

이진 트리를 기반으로 한 Set 컬렉션이다. 이진 트리는 여러 개의 노드가 트리 형태로 연결된 구조로, 루트 노드라고 불리는 하나의 노드에서 시작해 각 노드에 최대 2개의 노드를 연결할 수 있는 구조이다.

 

TreeSet<E> treeSet = new TreeSet<E>();
TreeSet<E> treeSet = new TreeSet<>();

검색 관련 메소드가 TreeSet에만 정의되어 있기 때문에 TreeSet 타입으로 대입해준다.

 

E first() - 제일 낮은 객체를 리턴

E last() - 제일 높은 객체를 리턴

E lower(E e) - 주어진 객체보다 바로 아래 객체를 리턴

E higher(E e) - 주어진 객체보다 바로 위 객체를 리턴

E floor(E e) - 주어진 객체와 동등한 객체가 있으면 리턴, 만약 없다면 주어진 객체의 바로 아래의 객체를 리턴

E ceiling(E e) - 주어진 객체와 동등한 객체가 있으면 리턴, 만약 없다면 주어진 객체의 바로 위의 객체를 리턴

E pollFirst() - 제일 낮은 객체를 꺼내오고 컬렉션에서 제거함

E pollLast() - 제일 높은 객체를 꺼내오고 컬렉션에서 제거함

Iterator<E> descendingIterator() - 내림차순으로 정렬된 Iterator를 리턴

NavigableSet<E> descendingSet() - 내림차순으로 정렬된 NavigableSet을 리턴

NavigableSet<E> headSet - 주어진 객체보다 낮은 객체들을 NavigableSet으로 리턴, 주어진 객체 포함 여부는 두번째 매개값에 따라 달라짐

NavigableSet<E> tailSet - 주어진 객체보다 높은 객체들을 NavigableSet으로 리턴, 주어진 객체 포함 여부는 두번째 매개값에 따라 달라짐

NavigableSet<E> subSet - 시작과 끝으로 주어진 객체 사이의 객체들을 NavigableSet으로 리턴. 시작과 끝으로 주어진 객체 사이의 객체들을 NavigableSet으로 리턴. 시작과 끝 객체의 포함 여부는 두 번째, 네 번째 매개값에 따라 달라짐

'스파르타 내일배움캠프 > Java' 카테고리의 다른 글

스레드  (0) 2023.02.01
제네릭  (0) 2023.01.27
예외 처리  (0) 2023.01.13
중첩/익명 클래스  (0) 2023.01.12
인터페이스  (0) 2023.01.11