Java에서 제공하는 Generic한 자료구조 프레임워크
public interface List<E> extends Collection<E> { ... }
대표적인 선형 자료구조
public class ArrayList<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable { ... }
Object[] arr = new Object[10];
과 유사한 형태이다.public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable { ... }
public class Vector<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable { ... }
synchronized
)를 지원한다.public class Stack<E> extends Vector<E> { ... }
public interface Queue<E> extends Collection<E> { ... }
public interface Deque<E> extends Queue<E> { ... }
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable { ... }
Queue<T> queue = new LinkedList<>();
Deque<T> deque = new LinkedList<>();
public class ArrayDeque<E>
extends AbstratCollection<E>
implements Deque<E>, Cloneable, Serializable { ... }
public class PriorityQueue<E>
extends AbstractQueue<E>
implements java.io.Serializable { ... }
우선순위 큐
public interface Set<E> extends Collection<E> { ... }
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable { ... }
add()
메서드를 사용하여 삽입을 시도할 경우, 중복된 데이터는 false
를 반환한다.public class LinkedHashSet<E>
extends HashSet<E>
implements Set<E>, Cloneable, java.io.Serializable { ... }
public class TreeSet<E>
extends AbstractSet<E>
implements NavigableSet<E>, Cloneable, java.io.Serializable { ... }
SortedSet<E>
를 상속한 NavigableSet<E>
를 상속받는다.public interface Map<K, V> { ... }
public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable { ... }
Entry<K, V>
의 배열로 저장되며, 배열의 index는 내부 해쉬 함수를 통해 계산된다.null
값을 허용한다.public class LinkedHashMap<K,V>
extends HashMap<K,V>
implements Map<K,V> { ... }
public class TreeMap<K,V>
extends AbstractMap<K,V>
implements NavigableMap<K,V>, Cloneable, java.io.Serializable { ... }
public class ConcurrentHashMap<K,V>
extends AbstractMap<K,V>
implements ConcurrentMap<K,V>, Serializable { ... }
null
을 허용하지 않는다.public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, java.io.Serializable { ... }
null
을 허용하지 않는다.public interface Comparable<T> {
public int compareTo(T o);
}
Comparable
인터페이스를 구현한다.public final class Integer extends Number implements Comparable<Integer> { ... }
Comparable
Interface를 상속받은 후, compareTo()
메서드를 오버라이드하여 구현compareTo()
메서드 작성법if( this < other ) { return -1; }
if( this == other ) { return 0; }
if( this > other ) { return 1; }
Arrays.sort(array);
Collections.sort(list);
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
boolean equals(Object obj);
}
Comparator<Point> myComparator = new Comparator<Point>() {
@Override
public int compare(Point p1, Point p2) {
if (p1.x > p2.x) {
return 1; // x에 대해서는 오름차순
}
else if (p1.x == p2.x) {
if (p1.y < p2.y) { // y에 대해서는 내림차순
return 1;
}
}
return -1;
}
};
List<Point> pointList = new ArrayList<>();
pointList.add(new Point(x, y));
Collections.sort(pointList, myComparator);
Comparator
Interface를 상속받은후 compare()
메서드를 오버라이드하여 구현compare()
메서드 작성법if( p1 < p2 ) { return -1; }
if( p1 == p2 ) { return 0; }
if( p1 > p2 ) { return 1; }
Integer.compare(x, y)
와 동일한 개념이다.Arrays.sort(array, myComparator);
Collections.sort(list, myComparator);
Comparator
Interface를 받을 수 있다.PriorityQueue(int initialCapacity, Comparator<? super E> comparator)
일종의 자기 균형 이진 탐색 트리
검색해서 나오지 않는다…. 누군가 알려주면 감사합니다…