Collection
객체를 효율적으로 관리하기 위한 자바의 자료구조 모음
List
- 순서 유지
- 중복 가능
ArrayList
내부 저장 구조에 Array를 사용하는 List
저장용량이 초과하면 자동으로 저장용량을 늘림
List<String> list = new ArrayList<String>();
List<String> list = new ArrayList<String>(30);
Vector
ArrayList와 동일한 내주 저장 구조를 가짐
ArrayList와 다른 점은 동기화(Synchronized)
된 메소드를 가짐으로 ThreadSafety
하다는 것 Syncronized & ThreadSafety?
List<String> list = new Vector<String>();
List<String> list = new Vector<String>(30);
LinkedList
다음 객체의 주소를 참조하여 체인처럼 관리하는 List
List<String> list = new LinkedList<String>();
Method
add()
- [1] boolean add(E e)
- [2] void add(int index, E e)
set()
- set(int index, E e);
contains()
- boolean contains(Object o)
get()
- E get(int index)
isEmpty()
- boolean isEmpty()
size()
- int size()
clear()
- vold clear()
remove()
- E remove(int index)
- boolean remove(Object o)
Set
- 순서 없음
- 중복 불가
HashSet
객체의 hashCode()
로 비교한 후 같다면 equals()
로 다시 한번 두 객체를 비교하여 저장여부를 판단
Set<String> set = new HashSet<String>();
TreeSet
BinaryTree 기반의 Set Collection - BinaryTree?
Comparable
구현한 객체를 요구하며 구현하지 않은 객체는 Comparator
객체와 함께 생성되야 함 - ClassCastException
TreeSet<String> treeSet = new TreeSet<String>();
TreeSet<E> treeSet = new TreeSet<E>(new AscendingComparator());
TreeSet<E> treeSet = new TreeSet<E>(new DescendingComparator());
Search Method
first()
- 제일 낮은 객체 반환- E first()
last()
- 제일 높은 객체 반환- E last()
lower()
- 주어진 객체보다 바로 아래 객체 반환- E lower(E e)
higher()
- 주어진 객체보다 바로 위 객체 반환- E heighter(E e)
floor()
- 주어진 객체와 동등한 객체가 있다면 반환, 없다면 바로 아래 객체 반환- E floor(E e)
ceiling()
- 주어진 객체와 동등한 객체가 있다면 반환, 없다면 바로 위의 객체 반환- E ceiling(E e)
pollFirst()
- 제일 낮은 객체 반환 및 제거- E pollFirst()
pollLast()
- 제일 높은 객체 반환 및 제거- E pollLast()
Sort Method
descendingIterator()
- 내림차순으로 정렬된 Iterator 반환- Iterator<E> descendingIterator()
descendingSet()
- 내림차순으로 정렬된 NavigableSet 반환- NavigableSet<E> descendingSet()
- 오름차순 - descendingSet() x2
Range Method
headSet()
- 주어진 객체보다 낮은 객체들을 NavigableSet으로 반환, 두 번째 인자로 주어진 객체의 포함여부 파악- NavigableSet<E> headSet(E e, boolean inclusive)
tailSet()
- 주어진 객체보다 높은 객체들을 NavigableSet으로 반환, 두 번째 인자로 주어진 객체의 포함여부 파악- NavigableSet<E> tailSet(E e, boolean inclusive)
subSet()
- 시작과 끝으로 주어진 객체 사이의 객체들을 NavigableSet으로 반환, 포함여부는 위와 같음- NavigableSet<E> subSet(E fromE, boolean fromInclusive, E toE, boolean toInclusive)
Method
add()
- boolean add(E e)
contains()
- boolean contains(Object o)
isEmpty()
- boolean isEmpty()
size()
- int size()
iterator()
- Iterator<E> iterator()
hasNext()
- boolean hasNext()
next()
- E next()
remove()
- void remove()
- Set Collection 데이터에서 삭제
- Iterator<E> iterator()
Set<String> set = new HashSet<String>();
Iterator<String> iterator = set.iterator();
clear()
- vold clear()
remove()
- boolean remove(Object o)
Map
- Key & Value (Entry) 구조
- Key 중복 불가
HashMap
객체의 hashCode()
로 비교한 후 같다면 equals()
로 다시 한번 두 객체를 비교하여 저장여부를 판단
Map<String, Integer> map = new HashMap<String, Integer>();
Hashtable
HashMap과 동일한 내부 저장 구조
HashMapr과 다른 점은 동기화(Synchronized)
된 메소드를 가짐으로 ThreadSafety
하다는 것 Syncronized & ThreadSafety?
Map<String, Integer> map = new Hashtable<String, Integer>();
Properties
Hashtable의 하위클래스로 동일한 특징을 가짐
키와 값이 String 타입으로 제한되는 Map으로 파일에 저장된 .properties 파일을 읽을 때 주로 사용
Properties properties = new Properties();
properties.load(new FileReader("/memo.properties"));
Java File Part
File Part. 에서 다시 한번 자세하게 다룰 예정
TreeMap
BinaryTree 기반의 Set Collection - BinaryTree?
Key로 Comparable 구현한 객체를 요구하며 구현하지 않은 객체는 Comparator
객체와 함께 생성 - ClassCastException
TreeMap<String, Integer> treeMap = new TreeMap<String, Integer>();
TreeMap<K, V> treeMap = new TreeMap<K, V>(new AscendingComparator());
TreeMap<K, V> treeMap = new TreeMap<K, V>(new DescendingComparator());
Search Method
firstEntry()
- 제일 낮은 Entry 객체 반환- Map.Entry<K, V> firstEntry()
lastEntry()
- 제일 높은 Entry 객체 반환- Map.Entry<K, V> lastEntry()
lowerEntry()
- 주어진 객체보다 바로 아래 Entry 객체 반환- Map.Entry<K, V> lowerEntry(K key)
higherEntry()
- 주어진 객체보다 바로 위 Entry 객체 반환- Map.Entry<K, V> heighterEntry(K key)
floorEntry()
- 주어진 객체와 동등한 키가 있다면 반환, 없다면 바로 아래 객체 반환- Map.Entry<K, V> floorEntry(K key)
ceilingEntry()
- 주어진 객체와 동등한 키가 있다면 반환, 없다면 바로 위의 객체 반환- Map.Entry<K, V> ceilingEntry(K key)
pollFirstEntry()
- 제일 낮은 Entry 객체 반환 및 제거- Map.Entry<K, V> pollFirstEntry()
pollLastEntry()
- 제일 높은 Entry 객체 반환 및 제거- Map.Entry<K, V> pollLastEntry()
Sort Method
descendingKeySet()
- 내림차순으로 정렬된 NavigableSet 반환- NavigableSet<E> descendingKeySet()
descendingMap()
- 내림차순으로 정렬된 Entry 객체의 NavigableMap 반환- NavigableMap<K, V> descendingMap()
- 오름차순 - descendingMap() x2
RangeMethod
headSet()
- 주어진 객체보다 낮은 객체들을 NavigableMap으로 반환, 두 번째 인자로 주어진 객체의 포함여부 파악- NavigableMap<K, V> headSet(E e, boolean inclusive)
tailSet()
- 주어진 객체보다 높은 객체들을 NavigableMap으로 반환, 두 번째 인자로 주어진 객체의 포함여부 파악- NavigableMap<K, V> tailSet(E e, boolean inclusive)
subSet()
- 시작과 끝으로 주어진 객체 사이의 객체들을 NavigableMap으로 반환, 포함여부는 위와 같음- NavigableMap<K, V> subSet(E fromE, boolean fromInclusive, E toE, boolean toInclusive)
Method
put()
- V put(K key, V value)
containsKey()
- boolean containsKey(Object key)
containsValue()
- boolean containsValue(Object value)
entrySet()
- Set<Map.Entry<K,V>> entrySet()
keySet()
- Set<K> keySet()
values()
- Collection<V> values()
get()
- V get(Object K)
isEmpty()
- boolean isEmpty()
size()
- int size()
clear()
- void clear()
remove()
- V remove(Object k)
Stack & Queue
Stack
Class
LIFO(Last In First Out)
Stack<E> stack = new Stack<E>();
push()
- 삽입- E push(E e)
peek()
- 마지막 삽입 객체 반환- E peek()
pop()
- 마지막 삽입 객체 반환 & 제거- E pop()
Queue
Interface
FIFO(First In First Out)
Queue<E> queue = new LinkedList<E>();
offer()
- 삽입- boolean offer(E e)
peek()
- 첫 번째 삽입된 객체 반환- E peek()
poll()
- 첫 번째 삽입된 객체 반환 & 제거- E poll()
Syncronized
synchronizedList()
- 동기화 List로 반환- List<T> synchronizedList(List<T> list)
synchronizedSet()
- 동기화 Set으로 반환- Set<T> synchronizedSet(Set<T> set)
synchronizedMap()
- 동기화 Map으로 반환- Map<K, V> synchronizedMap(Map<K, V> map)
Parallel
ConcurrentHashMap
Map의 구현클래스
요소별로 부분(Segment) 잠금을 사용하여 ThreadSafety + Parallel
를 보장
Map<K, V> map = new ConcurrentHashMap<K, V>();
ConcurrentLinkedQueue
Queue의 구현클래스
Lock-Free 알고리즘
구현 여러 개의 스레드가 동시에 접근할 경우 잠금을 사용하지 않고 ThreadSafety를 보장
Queue<E> queue = new ConcurrentLinkedQueue<E>();
'Java > Java 개념' 카테고리의 다른 글
QuickSearch // Java // Lambda (0) | 2019.10.19 |
---|---|
QuickSearch // Java // FileSystem (0) | 2019.10.14 |
QuickSearch // Java // Stream (0) | 2019.10.13 |
학습 // Java // Optional // Functional (0) | 2018.12.05 |
학습 // Java // Optional (0) | 2018.12.05 |