22장 자바랭 다음으로 많이 쓰는 애들은 컬랙션 - Part1(List)
- Collection 인터페이스를 구현하는 대표적인 3개의 자료구조는?
- List, Set, Queue
- 배열과 같이 순서가 있는 목록형을 나타내는 대표 인터페이스는?
- List
- ArrayList라는 클래스의 생성자 중 매개 변수가 없는 기본 생성자를 사용하면 기본적으로 몇개의 저장 공간을 가지는가?
- 10개
- 만약 ArrayList 클래스의 저장 공간 개수를 처음부터 지정하려면 어떤 생성자를 사용하면 되나요?
- 기본 생성자
- ArrayList 객체를 생성할 때 제네릭을 사용하는 이유는?
- 크기를 지정하는 것은 메모리 낭비로 이어지므로
- ArrayList에 데이터를 담는 메소드 이름 두가지는?
- add(), addAll()
- Collection 인터페이스를 구현한 클래스의 객체에서 사용할 수 있는 for 루프의 구조는 어떻게 되는가?
- 타입이름 변수 : 반복대상객체
- Collection 인터페이스를 구현한 클래스의 객체 크기를 확인하는 메소드는?
- size()
- ArrayList에서 특정 위치에 있는 데이터를 확인하는 메소드는?
- index()
- ArrayList에서 특정 위치에 있는 데이터를 삭제하는 메소드는?
- remove()
- ArrayList에서 특정 위치에 있는 데이터를 수정하는 메소드는?
- index( 위치 , 데이터 )
- java.util패키지에 있는 Stack이라는 클래스는 어떤 클래스를 확장하는가?
- vector
- Stack 클래스에서 데이터를 담는 메소드는?
- push()
- Stack 클래스에서 가장 위에 있는 데이터를 확인만 하는 메소드는?
- peek()
- Stack 클래스에서 가장 위에 있는 데이터를 삭제하고 리턴하는 메소드는?
- pop()
자바 컬렉션
자바 컬렉션(Collection)은 자바에서 데이터를 저장하고 관리하는 자료구조의 한 종류
- 순서가 있는 List 형
- 순서가 중요하지 않은 Set 형
- 먼저 들어온 것이 먼저 나가는 Queue 형
- key-value로 저장되는 Map 형
여기서 List, Set, Queue는 Collection이라는 인터페이스를 구현하고 있다. 이 Collection 인터페이스는 java.util 패키지에 선언되어 있다.
public interface Collection<E> extends Iterable<E>
Collection 인터페이스가 Iterable 인터페이스를 확장했다는 의미는, Iterator 인터페이스를 사용하여 데이터를 순차적으로 가져올 수 있다는 의미다
Collection 인터페이스의 주요 메소드
리턴 타입 | 메소드 이름 및 매개 변수 | 설명 |
boolean | add(E e) | 요소 추가 |
boolean | addAll(Collection) | 매개 변수로 넘어온 컬렉션의 모든 요소 추가 |
void | clear() | 컬렉션에 있는 모든 데이터 요소 삭제 |
boolean | contains(Object) | 매개 변수로 넘어온 객체가 해당 컬렉션에 있는지 확인하며 동일한 값이 있으면 true 리턴 |
boolean | containsAll(Object) | 매개 변수로 넘어온 객체들이 해당 컬렉션에 있는지 확인. 매개변수로 넘어온 컬렉션에 있는 요소들과 동일한 값들이 모두 있으면 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 인터페이스
Collection 인터페이스를 확장하였으며, 배열처럼 순서가 있다.
- ArrayList - Thread unsafe
- Vector - Thread safe
- Stack - Vector 클래스를 확장, LIFO (Last In First Out)
- LinkedList
ArrayList
java.lang.Object
-java.util.AbstractCollection<E>
-java.util.AbstractList<E>
-java.util.ArrayList<E>
- Serializable, Clonable, Iterable<E>, Collection<E>, List<E>, RandomAccss를 구현한 인터페이스
- 어떤 객체도 넣을 수 있지만, 보통 한 가지 종류의 객체만 저장한다. 여러 종류를 하나의 객체를 담을 때에는 되도록이면 DTO객체 사용
- 객체를 선언시에, 매개 변수를 넣지 않으면 초기 크기는 10
- 10개 이상의 데이터가 들어가면 내부적으로 크기를 자동으로 늘리나, 저장되는 데이터의 크기가 예측 가능하다면 초기 크기 지정을 권장
메소드
- add()
- 매개 변수로 넘어온 데이터를 가장 끝에 담는다
- add(int index, E e)
- 지정된 위치에 데이터를 담는다 => 기존 데이터들은 하나씩 밀려남
- for(타입이름 임시변수명 : 반복대상객체)
- addAll()
- 매개변수로 넘어온 컬렉션 데이터를 가장 끝에 담는다
- list의 값을 list2에 복사해야 할 일이 생긴다면, ArrayList<String> list2 = new ArrayList<String>(list);
- list2 = list;라는 문장은 list라는 객체가 생성되어 참조되고 있는 주소까지 사용하겠다는 의미. 즉, 두 객체의 변수는 다르지만 하나의 객체가 변경되면 다른 이름의 변수를 갖는 객체의 내용도 변경됨
- size()
- ArrayList객체에 들어가 있는 데이터의 개수를 가져옴. 저장 공간 개수
- get()
- ArrayList 객체에 있는 값을 가져올 때
- indexOf(), lastIndexOf()
- ArrayList는 중복을 허용하므로, 매개 변수로 넘어온 객체와 동일한 데이터의 위치 리턴
- toArray()
- 매개 변수가 없는 toArray() 메소드는 Object 타입의 배열로만 리턴. 그러므로 제네릭을 사용하여 선언한 ArrayList 객체를 배열로 생성할 때는 toArray(T[] a)를 사용 권장
- 지정한 크기 만큼 값이 없으면 null이므로, 크기가 0인 배열을 넘겨주는 것이 좋다.
- clear()
- 모든 데이터 삭제
- remove()
- 매개 변수로 넘어온 객체와 동일한 첫번째 데이터만 삭제
- removeAll()
- 매개변수로 넘어온 컬렉션에 있는 데이터와 동일한 모든 데이터 삭제
Thread Safe하게 하기 위한 방법
List lsit = Collections.synchronizedList(new ArrayList(...));
Stack 클래스
java.lang.Object
-java.util.AbstractCollection<E>
-java.util.AbstractList<E>
-java.util.Vector<E>
-java.util.Stack<E>
- Serializable, Clonable, Iterable<E>, Collection<E>, List<E>, RandomAccss를 구현한 인터페이스
- LIFO 기능 구현시 필요한 클래스
메소드
- peek()
- 객체 가장 위에 있는 데이터 리턴
- pop()
- 객체 가장 위에 있는 데이터 지우고 리턴
- push()
- 매개 변수로 넘어온 데이터를 가장 위에 저장
'JAVA > about java' 카테고리의 다른 글
[Collection] Map (0) | 2023.05.01 |
---|---|
[Collection] Set, Queue (0) | 2023.04.30 |
[Generic] 제네릭 (0) | 2023.04.30 |
[GC] Garbage Collector (0) | 2023.04.29 |
[Thread safe] Thread safe / unsafe 기준과 코드 설계 방법 (0) | 2023.04.25 |