hyeonga_code

Java의 신2_Chapter 4_Collection List 본문

Java

Java의 신2_Chapter 4_Collection List

hyeonga 2024. 4. 2. 07:59
반응형

2024.04.01

 

- 컬렉션_Collection

-- 목록성 데이터를 처리하는 자료 구조

---- 자료구조_Data Structure

------ 하나의 데이터가 아닌 여러 데이터를 담는 것

 

-- 데이터를 담는 자료구조

---- List : 순서가 있는 목록

---- Set : 순서가 중요하지 않은 셋

---- Queue : 먼저 들어온 것이 먼저 나가는 큐

---- Map : 키-값으로 저장되는 맵

------ Map을 제외한 나머지는 Collection 인터페이스를 구현

 

더보기
Collection
    ㄴ Set
        ㄴ HashSet
            ㄴ LinkedHashSet
        ㄴ TreeSet
    ㄴ List
        ㄴ ArrayList
        ㄴ LinkedList ㄱ
    ㄴ Queue
        ㄴ LinkedList ㄱ
        ㄴ PriorityQueue

Map
    ㄴ HashMap
        ㄴ LinkedHashMap
    ㄴ TreeMap

 

-- Collection

public interfaceCollection<E> extends Iterable<E>

---- Iterable<E> 인터페이스를 확장하여 데이터를 순차적으로 가져올 수 있다.

 

더보기

---- Iterable<E>

Iterator<T> iterator()

 

---- Iterator

hashNext()
    // 추가 데이터가 있는지 확인
    
next()
    // 현재 위치를 다음 요소로 넘기고 값을 리턴
    
remove()
    // 데이터 삭제

 

-- Collection interface

더보기
boolean add(E e)
    // 요소를 추가

boolean addAll(Collection)
    // 매개변수로 넘어온 컬렉션의 모든 요소를 추가

void clear()
    // 컬렉션에 있는 모든 요소의 데이터를 제거

boolean contains(Object)
    // 매개변수로 넘어온 객체가 해당 컬렉션에 있는 경우 true

boolean containsAll(Collection)
    // 매개변수로 넘어온 객체들이 해당 컬렉션에 모두 있는 경우 true

boolean equals(Object)
    // 매개변수로 넘어온 객체와 같은 객체인지 확인

int hashCode()
    // 해시 코드 값을 리턴
    
boolean isEmpty()
    // 컬렉션이 비어있는 경우 true

Iterator iterator()
    // 데이터를 한 건씩 처리하기 위한 Iterator 객체 리턴

boolean remove(Object)
    // 매개변수와 동일한 객체를 제거

boolean removeAll(Collection)
    // 매개변수로 넘어온 객체들을 해당 컬렉션에서 제거

boolean retainAll(Collection)
    // 매개변수로 넘어온 객체들만 컬렉션에 남기고 나머지는 제거

int size()
    // 요소의 개수를 리턴

Object[] toArray()
    // 컬렉션에 있는 데이터들을 배열로 복사

<T> T[] toArray(T[])
    // 컬렉션에 있는 데이터들을 지정한 타입의 배열로 복사

 

- 리스트_List

-- 목록은 List 인터페이스에서 시작

---- List 인터페이스는 Collection 인터페이스를 확장

-- 배열과 같이 순서가 있다.

// 확장 가능한 배열
ArrayList	// Thread not safe
Vector		// Thread safe

Stack		// Vector 클래스를 확장하여 LIFO를 지원
LinkedList	// Queue에도 속함

 

-- ArrayList

더보기
- java.lang.Object
    ㄴ java.util.AbstractCollection<E>	// Collection 인터페이스에서 일부 공통 메소드를 구현
    	ㄴ java.util.AbstractList<E>	// List 인터페이스에서 일부 공통 메소드를 구현
            ㄴ java.util.ArrayList<E>
                - Serializable	// 원격으로 객체를 전송하거나 파일에 저장할 수 있음을 지정
                - Cloneable	// Object 클래스의 clone() 메소드가 수행될 수 있음을 지정(복사 가능 객체)
                - Iterable<E>	// foreach 를 사용할 수 있는 객체임을 지정
                - Collection<E>	// 여러 개의 객체를 하나의 객체에 담아 처리할 때의 메소드를 지정
                - List<E>	// 목록형 데이터를 처리하는 것과 관련된 메소드를 지정
                - RandomAccess	// 목록형 데이터에 보다 빠르게 접근할 수 있도록 임의로 접근하는 알고리즘

---- 생성자

ArrayList ( )
    // 객체를 저장할 공간이 10개인 ArrayList를 생성

ArrayList ( Collection< ? extends E > c)
	// 매개변수로 넘어온 컬렉션 객체가 저장되어 있는 ArrayList를 생성

ArrayList ( int initialCapacity )
	// 매개변수로 넘어온 개수 만큼의 저장공간을 가지는 ArrayList를 생성

 

---- 패키지 import

import java.util.ArrayList;

 

---- 서로 다른 종류의 객체를 하나의 배열에 넣지 않고 한 가지 종류의 객체만 저장한다.

---- 여러 종류를 하나의 객체에 담을 경우 DTO를 생성해 작업하는 것이 좋다.

---- JDK7 이후부터는 new 예약어 뒤인 생성자 호출 부분에 타입을 적지 않아도 무관하다.

 

---- 데이터 담기

더보기
boolean add(E e)
    // 매개변수로 넘어온 데이터를 가장 끝에 추가

void add(int index, E e)
    // 매개변수로 넘어온 데이터를 지정된 index에 추가 > 이후 데이터는 한 칸씩 밀린다.

boolean addAll(Collection< ? extends E > c)
    // 매개변수로 넘어온 컬렉션 데이터를 가장 끝에 추가

boolean addAll(int index, Collection< ? extends E > c)
    // 매개변수로 넘어온 컬렉션 데이터를 지정된 index부터 추가

---- index가 저장되어 있는 데이터의 개수보다 큰 경우 IndexOutOfBoundsException 예외 발생

---- 다른 타입의 객체를 사용하여 데이터를 담을 수도 있어 Collection을 매개변수로 가지는 생성자와 메소드를 제공

---- 리스트를 다른 리스트로 치환하는 것도 가능하지만 참조되고 있는 주소를 사용한다는 의미이므로 값이 같이 변한다.

 

---- Shallow copy

------ 다른 객체에 원본 객체의 주소값만을 할당하는 것

------ list2 = list

 

---- Deep copy

------ 객체의 모든 값을 복사하여 복제된 객체에 있는 값을 변경해도 원본에 영향이 없는 것

------ arraycopy()

 

---- 데이터 꺼내기

더보기
int size() 
    // 객체에 들어있는 데이터의 개수를 반환
    
E get(int index)
    // 매개변수에 지정된 위치에 있는 데이터를 리턴

int indexOf(Object o)
    // 매개변수로 넘어온 객체와 동일한 데이터의 위치를 리턴

int lastIndexOf(Object o)
    // 매개변수로 넘어온 객체와 동일한 마지막 데이터릐 위치를 리턴
    
Object[] toArray()
    // ArrayList 객체에 있는 값들을 Object[] 타입의 배열로 생성

<T> T[] toArary(T[] a)
    // ArrayList 객체에 있는 값들을 매개변수로 넘어온 T 타입의 배열로 생성

---- 중복되는 데이터를 저장할 수 있다.

 

ArrayList<String> list = new ArrayList<String>();
list.add("A");

String[] strList = list.toArray(new String[0]);

---- 매개변수로 넘기는 배열은 의미 없이 타입만을 지정하기 위해 사용할 수도 있다.

---- 실제로는 매개변수로 넘긴 객체에 값을 담아준다.

---- ArrayList 객체의 데이터 크기가 매개변수로 넘어간 배열 객체의 크기보다 큰 경우 매개변수로 배열의 모든 값이 null로 처리된다.

---- 매개변수로 넘어간 배열 객체의 크기보다 작은 경우 모든 값이 null로 처리된다.

ArrayList<String> list = new ArrayList<String>();
list.add("A");

String[] temp = new String[1];
String[] strList = list.toArray(temp);

 

---- 데이터 삭제하기

더보기
void clear()
    // 모든 데이터를 삭제

E remove(int index)
    // 매개변수에서 지정한 위치에 있는 데이터를 삭제하며 데이터를 리턴

boolean remove(Object o)
    // 매개변수로 넘어온 객체와 동일한 첫 번째 데이터를 삭제

boolean removeAll(Collection<?> c)
    // 매개변수로 넘어온 컬렉션 객체이 있는 데이터와 동일한 모든 데이터를 삭제

 

---- 데이터 변경하기

더보기
E set(int index, E element)
    // 지정한 위치에 있는 데이터를 두 번째 매개변수로 넘긴 값으로 변경하고, 변경 전 데이터를 리턴

 

---- ArrayList 크기 변경하기

더보기
trimToSize()
    // ArrayList 객체 공간의 크기를 데이터의 개수만큼으로 변경

---- 객체를 원격으로 전송하거나 파일로 저장하는 경우 데이터의 크기를 줄일 수 있는 장점이 있다.

 

- 스택_Stack

-- List 인터페이스를 구현한 클래스

-- 마지막에 들어온 데이터를 가장 처음에 꺼낸다._ LIFO

---- 이보다 빠른 ArrayDeque 클래스가 존재하지만 스레드에 안전하지 못하다.

더보기
- java.lang.Object
    ㄴ java.util.AbstractCollection<E>	// Collection 인터페이스에서 일부 공통 메소드를 구현
    	ㄴ java.util.AbstractList<E>	// List 인터페이스에서 일부 공통 메소드를 구현
            ㄴ java.util.Vector<E>
                ㄴ java.util.Stack<E>
                    - Serializable
                    - Cloneable	
                    - Iterable<E>
                    - Collection<E>
                    - List<E>
                    - RandomAccess

---- 자바에서 상속을 잘못받은 클래스

---- Vector에 속해서는 안되지만 하위 호환성을 위해 상속관계를 계속 유지하고 있다.

 

---- 생성자

더보기
Stack()
    // 비어 있는 Stack 객체를 생성

 

---- 메소드

더보기
boolean empty()
    // 객체가 비어있는지 확인

E peek()
    // 객체의 가장 위에 있는 데이터를 리턴

E pop()
    // 객체의 가장 위에 있는 데이터를 삭제하면서 리턴

E push(E item)
    // 매개변수로 넘어온 데이터를 가장 위에 저장

int search(Object o)
    // 매개변수로 넘어온데이터의 위치를 리턴
반응형