hyeonga_code
Java의 신2_Chapter 4_Collection List 본문
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)
// 매개변수로 넘어온데이터의 위치를 리턴
'Java' 카테고리의 다른 글
Java의 신2_Chapter 6_Collection Map (0) | 2024.04.03 |
---|---|
Java의 신2_Chapter 5_Collection Set Queue (0) | 2024.04.02 |
Java의 신2_Chapter 3_Generic (0) | 2024.04.02 |
Java의 신2_Chapter 2_ java.lang 패키지 (0) | 2024.04.02 |
Java의 신_Chapter 17_Annotation (0) | 2024.03.29 |