2023. 2. 1. 21:07ㆍ스파르타 내일배움캠프/Java
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보다 좋은 성능을 발휘한다.
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으로 리턴. 시작과 끝 객체의 포함 여부는 두 번째, 네 번째 매개값에 따라 달라짐