목록언어/Java의 정석 (13)
Vienna

◇ PriorityQueue Queue 인터페이스의 구현체 중의 하나. 저장한 순서에 관계 없이 우순선위가 높은 것부터 꺼내게 된다는 특징이 있다. 그리고 null 또한 저장할 수 없다! (null을 저장하려 시도한다면 nullPointerException이 발생.) 저장 공간을 배열로 사용하며, 각 요소를 힙(heap) 자료구조의 형태로 저장한다. import java.util.*; public class Main { public static void main(String[] args) { Queue pq = new PriorityQueue(); pq.offer(3); // 오토 박싱이 일어난다. pq.offer(new Integer(3)); pq.offer(1); pq.offer(4); pq.offe..

◇ Properties HashTable을 상속받아 구현한 것으로, (String, Stirng) 형태로 저장하는 보다 단순화된 컬렉션 클래스. 주로 애플리케이션의 환경설정과 관련된 속성(Property)을 저장하는데 사용되며, 데이터를 파일로부터 읽고 쓰는 편리한 기능을 제공한다. 그래서 간단한 입출력은 Properties를 활용하면 몇 줄의 코드로 쉽게 해결될 수 있다. ◇ 눈 여겨볼 함수 get 함수 get(String key): 키에 해당하는 값 반환. 없으면 null get(String key, String defaultValue): 키에 해당하는 값 반환. 없으면 defaultValue Properties에 저장 setProperty(String key, String value): 지정된 키와..

◇ TreeMap 이름에 Tree가 붙은 만큼 이진검색트리의 형태로 키와 값의 쌍으로 이루어진 데이터를 저장 검색에 관한한 대부분의 경우 HashMap이 TreeMap보다 더 뛰어나므로 HashMap을 사용하는 것이 좋다. 다만 범위 검색이나 정렬이 필요한 경우에는 TreeMap을 사용하자. ◇ 자주 찾을만한 함수 Key 찾기 ceilingKey(Object key): key와 일치하거나 큰 key 중 제일 작은 key를 반환. 없으면 null floorKey(Object key): key와 일치하거나 작은 key 중 제일 큰 key를 반환. 없으면 null higherKey(Object key): 지정된 key보다 큰 key 중에서 제일 작은 key를 반환. 없으면 null lowerKey(Object..

◇ LinkedList? 불연속적으로 존재하는 데이터를 서로 연결(link)한 형태) 기존 배열의 단점은 다음과 같다. 크기 변경 불가 비순차적 데이터 추가 및 삭제 시간 오래 소요. 이 단점을 보완하기 위해 LinkedList라는 자료구조가 고안되었다. 아래 코드를 보면 알다시피 LinkedList의 각 요소들은 자신과 연결된 다음 요소에 대한 참조(주소값)와 데이터로 구성되어 있다. class Node{ Node next; Object obj; } LinkedList에서의 데이터 삭제는 다음과 같이 이루어진다. 삭제하고자하는 요소의 이전 요소가 삭제하고자 하는 요소의 다음 요소를 참조하도록 변경하기만 하면 된다 끝! 배열처럼 데이터를 이동하기 위해 복사하는 과정이 없기 때문에 처리속도가 매우 빠르다...

◇ HashMap Map Interface를 구현하였으므로 키(key)와 값(value)을 묶어서 하나의 데이터(entry)로 저장한다는 특징을 갖는다. public class HashMap extends AbstractMap implements Map, Cloneable, Serializable{ // 이를 통해 데이터 무결성을 확보 transient Entry[] table; static class Entry implements Map.Entry{ final Object key; Object value; ... } } ◇ Hashing 해시함수(hash function)를 이용하여 데이터를 해시테이블에 저장하고 검색하는 기법 구현체 클래스: HashSet, HashMap, Hashtable 등이 있다..

◇ StringTokenizer? 긴 문자열을 지정된 구분자를 기준으로 토큰이라는 여러 개의 문자열로 잘라내는데 사용된다. 단, StringTokenizer는 구분자로 단 하나의 문자 밖에 사용하지 못한다. 책에서는 이것 뿐만 아니라 정규표현식을 사용한 String.split(String regex)이나 Scanner.useDelimiter(String pattern)를 사용할 수도 있다고 나와 있다. (그럼 무엇이 더 빠를까? 주말에 조사해야겠다) import java.util.*; public class Main { public static void main(String[] args) { String source = "100,200,300,400"; StringTokenizer st = new Str..
◇ 이진 트리란? 이진 트리는 LinkedList 처럼 여러 개의 노드가 서로 연결된 구조 각 노드에 최대 2개의 노드를 연결할 수 있다. 루트 노드에서부터 시작해서 계속 확장해나갈 수 있다. 위 아래로 연결된 두 노드를 '부모-자식' 관계(상대적)에 있다고 한다. 위의 노드는 부모 노드 아래 노드는 자식 노드 class TreeNode{ TreeNode left; // 왼쪽 자식 노드 Object element; // 현 노드 데이터 TreeNode right; // 오른쪽 자식 노드 } ◇ TreeSet이란? 이진 검색 트리(Binary Search Tree)라는 자료구조의 형태로 데이터를 저장하는 컬렉션 클래스 검색 효율이 뛰어난 자료구조다. 현재 TreeSet은 이진 검색 트리의 성능을 향상시킨 ..

■ HashSet Set 인터페이스를 구현한 가장 대표적인 컬렉션. Set 인터페이스의 특징대로 중복된 요소를 저장하지 않는다. 저장순서를 유지하지 않는다. 만약 저장순서를 유지하고자 하는 경우에는 LinkedHashSet을 사용해야 한다. import java.util.*; public class Main { public static void main(String[] args) { Object[] objArr = {"1", new Integer(1), "2", "2", "3", "3", "4", "4", "4"}; Set set = new HashSet(); for(int i=0, iMax = objArr.length; i

◇ Comparator와 Comparable public interface Comparator{ int compare(Object o1, Object o2); boolean equals(Object obj); } public interface Comparable{ int compareTo(Object o); } * Comparator: 기본 정렬 기준을 구현하는데 사용. * Comparable: 기본 정렬기준 외에 다른 기준으로 정렬하고자 할 때 사용. import java.util.Arrays; import java.util.Comparator; public class Main { public static void main(String[] args) { String[] strArr = {"cat","D..