Java 개념 정리II
Java 개념 정리Permalink
날짜와 시간 & 형식화Permalink
날짜와 시간Permalink
1. Calendar와 DatePermalink
- java.util.Date
- 날짜와 시간을 다룰 목적으로 만들어진 클래스(JDK1.0)
- Date의 메서드는 대부분 deprecated되었지만, 여전히 쓰이고 있다.
- java.util.Calendar
- Date클래스를 개선한 클래스(JDK1.1). 여전히 단점이 존재
- java.time패키지
- Date와 Calendar의 단점을 개선한 새로운 클래스를 제공(JDK1.8)
2. CalendarPermalink
- java.util.Calendar
- 추상 클래스이므로 getInstance()를 통해 구현된 객체를 얻어야 한다.
Calendar cal = new Calendar(); //에러- 추상클래스는 인스턴스를 생성할 수 없다. Calendar cal = Calendar.getInstance(); //OK- getInstance() 메서드는 Calendar 클래스를 구현한 클래스의 인스턴스를 반환한다.
- Date와 Calendar간의 변환
Calendar를 Date로 변환 Calendar cal = Calendar.getInstance(); Date d = new Date(cal.getTimeInMillis()); //Date(long date) Date를 Calendar로 변환 Date d = new Date(); Calendar cal = Calendar.GetInstance(); cal.setTime(d);
3. Calendar의 주요 메서드 - get()Permalink
- get()으로 날짜와 시간 필드 가져오기
Calender cal = Calendar.getInstace(); int thisYear = cal.get(Calendar.YEAR); int lastDayOfMonth = cal.getActualMaximum(Calendar.DATE);
4. Calendar의 주요 메서드 - set()Permalink
- set()으로 날짜와 시간지정하기
Calendar date1 = Calendar.getInstance(); date1.set(2017,7,15); //월 0부터 시작 (2017년 8월 15일) Calendar time1 = Calendar.getInstance(); time1.set(Calendar.HOUR_OF_DAT,10); time1.set(Calendar.MINUTE,20); time1.set(Calendar.SECOND, 30);
5. Calendar의 주요 메서드 - clear()Permalink
- clear()와 clear(int field)로 Calendar객체 초기화 하기
- clear()은 Calendar객체의 모든 필드를 초기화
- clear(int field)는 Calendar객체의 특정 필드를 초기화
형식화Permalink
1. DecimalFormat - 숫자의 형식화Permalink
- 숫자를 다양한 형식(패턴)으로 출력할 수 있게 해준다.
double number = 1234567.89; DecimalFormat df = new DecimalFormat("#.#E0"); String result = df.format(number); //"1.2E6"
- 특정 형식으로 되어 있는 문자열에서 숫자를 뽑아낼 수도 있다.
DecimalFormat df = new DecimalFormat("#.###.##"); Number num = df.parse("1,234,567,89"); double d = num.doubleValue();
2. SimpleDateFormat - 날짜의 형식화Permalink
- 날짜와 시간을 다양한 형식으로 출력할 수 있게 해준다.
Date today = new Date(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); String result = df.format(today);
- 특정 형식으로 되어 있는 문자열에서 날짜와 시간을 뽑아낼 수도 있다.
DateFormat df = new SimpleDateFormat("yyyy년 MM월 dd일"); DateFormat df2 = new SImpleDateFormat("yyyy/MM/dd"); Date d = df.parse("2015년 11월 23일"); String reuslt = df2.format(d);
3. MessageFormat - 텍스트의 형식화Permalink
- 데이터를 정해진 양식에 맞춰 출력할 수 있도록 도와준다.
- 특정 형식을 가진 문자열에서 데이터를 뽑아낼 때도 유용하다.
java.time 패키지Permalink
1. java.time패키지란?Permalink
- Date, Calendar의 단점을 보완하기 위해 추가된 패키지(JDK1.8부터)
- 이 패키지에 속한 클래스들은 모두 ‘불변(immutable)’ 이다.
2. java.time패키지의 핵심 클래스Permalink
- 날짜를 표현할 때는 LocalDate, 시간을 표현할 때는 LocalTime을 사용
- 날짜와 시간을 같이 표현할 때는 LocalDateTime을 사용
- 시간대(time-zome)까지 다뤄야 할 때는 ZonedDateTime을 사용
- period는 날짜간의 차이를, Duration은 시간의 차이를 표현할 때 사용
- Temporal: 날짜와 시간을 표현하는 클래스들이 구현
- TemporalAmount: 날짜와 시간의 차이를 표현하는 클래스가 구현
- Temproral로 시작하는 인터페이스들은 매개변수 타입으로 많이 사용되며, TemporalAmount인지 아닌지만 구별하면 된다.
3. LocalDate와 LocalTimePermalink
- java.time패키지의 핵심
- now()는 현재 날짜 시간을, of()는 특정 날짜 시간을 지정할 때 사용
- 일 단위느 초 단위로도 지정가능 (1일은 246060= 86400초)
- parse()로 문자열을 LocalDate나 LocalTime으로 변환할 수 있다.
4. Instant - java.util.Date를 대체Permalink
- 에포크타임(1970-01-01 00:00:00 UTC)부터 경과된 시간을 표현
- 날짜와 시간과 달리 단이 진법(10진법)이라 계산에 편리
- 나노초 단위가 아니라 밀리초 단위의 에포크 타임이 필요할 때
- Instant와 Date간의 변화에 사용하는 메서드
5. LocalDateTime과 ZonedDateTiePermalink
- LocalDateTime을 LocalDate 또는 LocalTime으로 변환하기
LocalDateTime dt = LocalDateTime.of(2015,12,31,12,34,56); LocalDate date = dt.toLocalDate(); // LocalDateTime -> LocalDate LocalTime time = dt.toLocalTime(); // LocalDateTime -> LocalTime
6. ZonedDateTime의 변환Permalink
- ZonedDateTime을 변환하는데 사용되는 메서드
LocalDate toLocalDate() LocalTime toLocalTime() LocalDateTime toLocaDateTime() OffsetDateTime toOffsetDateTime() long toEpochSecond() Instant toInstant()
7. ZoneOffset과 OffsetDateTimePermalink
- ZoneOFfset은 UTC(표준시)로부터 얼마만큼 떨어져있는지 표현에 사용
- 한국은 UTC+9. 즉 UTC보다 9시간 빠르다.
8. TemporalAdjustersPermalink
- plus(), minus()로 계산하기에 복잡한 날자계산을 도와준다
//다음주 월요일 LocalDate nextMonday = tody.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
9. Period와 DurationPermalink
- Period는 날짜의 차이를, Duration은 시간의 차이를 계산하기 위한 것
- 날짜 - 날짜 = period / 시간 - 시간 = Duration
- 두 날짜 또는 시간의 차이를 구할 때는 between()을 사용
LocalDate date1 = LocalDate.of(2014,1,1); LocalDate date2 = LocalDate.of(2015,12,31); period pe = Period.between(date1,date2); LocalTime time1 = LocalTime.of(00,00,00); LocalTime time2 = LocalTime.of(12,34,56); Duration du = Duration.between(time1,time2);
10. 날짜와 시간의 형식화(formatiing)Permalink
- java.time.format패키지: 형식화와 관련된 클래스를 제공
- DateTimeFormatter의 format()을 사용해서 날짜와 시간을 형식화
11. 로케일(local)에 종속된 형식화Permalink
- ofLocalizedDate(), ofLocalizedTime(), ofLocalizedDateTime()
12. 출력형식 직접 정의하기Permalink
- DateTimeFormatter의 ofPattern()으로 직접 출력형식 작성하기
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
13. 날짜와 시간 문자열 파싱하기Permalink
- parset()를 이용하면 문자열을 날짜와 시간으로 파싱할 수 있다.
static LocalDateTIme parse(CharSequence text) static LocalDatetIme parse(CharSequence text, DateTImeFormatter formatter)
- DateTimeFormatter에 정의된 형식을 사용할 때는 다음과 같이 한다
LocalDate date = LocalDate.parse("2016-01-02", DateTiemFormatter.ISO_LOCAL_DATE);
- 자주 사용되는 형식은 ISO_LOCAL_DATE 등을 사용하지 않고 피싱 가능
- ofPatter()으로 파싱할 수도 있다.
컬렉션 프레임웍(collections framework)Permalink
컬렉션 프레임웍Permalink
1. 컬렉션 프레임웍이란?Permalink
- 컬렉션(collection): 여러 객체(데이터)를 모아 놓은 것을 의미
- 프레임웍(framework): 표준화, 정형화된 체계적인 프로그래밍 방식
- 컬렉션 프레임웍
- 컬렉션(다수의 객체)을 다루기 위한 표준화된 프로그래밍 방식
- 컬렉션을 쉽고 편리하게 다룰 수 있는 다양한 클래스를 제공
- java.util패키지에 포함
- 컬렉션 클래스: 다수의 데이터를 저장할 수 있는 클래스(Vector, ArrayList, HashSet)
2. 컬렉션 프레임웍의 핵심 인터페이스Permalink
- List
- 순서가 있는 데이터의 집합. 데이터의 중복을 허용한다. 예) 대기자 명단
- 구현클래스: ArrayList, LinkedList, Stack, Vector 등
- Set
- 순서를 유지하지 않는 데이터의 집합. 데이터의 중복을 허용하지 않는다. 예) 양의 정수집합. 소수의 집합
- 구현클래스: HashSet, TreeSet 등
- Map
- 키(key)와 값(value)의 쌍(pair)으로 이루어진 데이터의 집합
- 순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용한다. 예) 우편번호, 지역번호(전화번호)
- 구현클래스: HashMap, TreeMap, Hashtable, Properties 등
3. Collection 인터페이스의 메서드Permalink
- boolean add(object o): 지정된 객체 또는 Collection(c)의 객체들을 Collection에 추가한다.
- void clear(): Collection의 모든 객체를 삭제한다. boolean contains(Object o): 지정된 객체(o) 또는 Collection의 객체들이 Collection에 포함되어 있는지 확인한다.
- boolean equals(Object o): 동일한 collection인지 비교한다.
4. List 인터페이스의 메서드 - 순서 O, 중복 OPermalink
- void add(int index, Object element): 지정된 위치(index)에 객체(element)또는 컬렉션에 포함된 객체들을 추가한다
- Object get(int index): 지정된 위치(index)에 있는 객체를 반환한다.
- int indexOf(Object o): 지정된 객체의 위치(index)를 반환한다.
5. Set인터페이스 - 순서 X, 중복 XPermalink
- Set인터페이스의 메서드 - Collection인터페이스와 동일
6. Map인터페이스의 메서드 - 순서 X, 중복(키X, 값O)Permalink
- void clear(): Map의 모든 객체를 삭제한다.
- boolean containsKey(Object key): 지정된 key객체와 일치하는 Map의 key 객체가 있는지 확인한다.
- boolean containsValue(Object value): 지정된 value객체와 일치하는 Map의 value객체가 있는지 확인한다.
Vector와 ArrayListPermalink
1. Vector와 ArrayListPermalink
- ArrayList는 기존의 Vector를 개선한 것으로 구현원리와 기능적으로 동일
- Vector는 자체적으로 동기화처리가 되어 있으나 ArrayList는 그렇지 않다.
- List인터페이스를 구현하므로, 저장순서가 유지되고 중복을 허용한다.
- 데이터의 저장공간으로 배열을 사용한다. (배열기반)
2. ArrayList의 사용 예Permalink
ArrayList list = new ArrayList();
list.add("111");
list.add("222");
list.add("333");
list.add(0,"000");
list.remove("333");
3. ArrayList에 저장된 객체의 삭제과정Permalink
- ArrayList에 저장된 세 번째 데이터(data[2])를 삭제하는 과정. list.remove(2);를 호출
- 삭제할 데이터 아래의 데이터를 한 칸씩 위로 복사해서 삭제할 데이터를 덮어쓴다.
- 데이터가 모두 한 칸씩 이동했으므로 마지막 데이터는 null로 변경한다.
- 데이터가 삭제되어 데이터의 개수가 줄었으므로 size의 값을 감소시킨다.
4. Vector의 크기(size)와 용량(capacity)Permalink
// 용량(capacity)이 5인 Vector를 생성한다.
Vector v = new Vector(5);
v.add("1");
v.add("2");
v.add("3");
// 빈 공간을 없앤다. (용량과 크기가 같아진다.)
v.trimToSize();
// capacity가 6이상 되도록 한다.
v.ensureCapacity(6);
//Vector에 저장된 모든 요소를 제거한다
v.clear();
5. Vector를 직접 구현하기Permalink
- 객체를 저장할 객체배열(objArr)과 크기(size)를 저장할 변수를 선언
- 생성자 MyVector(int capacity)와 기본 생성자 MyVector()를 선언
- 메서드 구현
- int size() - 컬렉션의 크기(size)를 반환
- int capacity() - 컬렉션의 용량(capacity)을 반환
- boolean isEmpty() - 컬렉션이 비어있는지 확인
- void clear() - 컬렉션의 객체를 모두 제거
- Object get(int index) - 컬렉션에서 지정된 index에 저장된 객체를 반환
- int indexOf(Object obj) - 지정된 객체의 index를 반환 (못찾으면 -1)
- void setCapacity(int capacity) - 컬렉션의 용량을 변경
- void ensureCapacity(int minCapacity) - 컬렉션의 용량을 확보
- Object remove(int index) - 컬렉션에서 객체를 삭제
- boolean add(Object obj) - 컬렉션에 객체를 추가
6. ArrayList의 장점과 단점Permalink
- 장점: 배열은 구조가 간단하고 데이터를 읽는 데 걸리는 시간이 짧다.
- 단점1: 크기를 변경할 수 없다.
- 크기를 변경해야 하는 경우 새로운 배열을 생성 후 데이터를 복사해야함.
- 크기 변경을 피하기 위해 충분히 큰 배열을 생성하면, 메모리가 낭비됨
- 단점2: 비순차적인 데이터의 추가, 삭제에 시간이 많이 걸린다.
- 데이터를 추가하거나 삭제하기 위해, 다른 데이터를 옮겨야 함
- 그러나 순차적인 데이터 추가(끝에 추가)와 삭제(끝부터 삭제)는 빠르다.
LinkedListPermalink
1. LinkedList - 배열의 단점을 보완Permalink
- 배열과 달리 링크드 리스트는 불연속적으로 존재하는 데이터를 연결(link)
- 데이터의 삭제: 단 한 번의 참조변경만으로 가능
- 데이터의 추가: 한번의 Node객체생성과 두 번의 참조변경만으로 가능
2. LinkedList - 이중 연결 리스트Permalink
- 링크드 리스트(linked list) - 연결리스트. 데이터 접근성이 나쁨
- 더블리 링크드 리스트(double linked list) - 이중 연결리스트. 접근성 향상
- 더블리 써큘러 링크드 리스트(doubly circular linked list) - 이중 원형 연결리스트
3. ArrayList vs. LinkedList - 성능 비교Permalink
- 순차적으로 데이터를 추가/삭제 - ArrayList가 빠름
- 비순차적으로 데이터를 추가/삭제 - LinkedList가 빠름
- 접근시간(access time) - ArrayList가 빠름
스택과 큐(Stack & Queue)Permalink
1. 스택과 큐Permalink
- 스택(Stack): LIFO구조. 마지막에 저장된 것을 제일 먼저 꺼내게 된다. - 수식계산, 수식괄호검사, undo/redo, 뒤로/앞으로(웹브라우저)
- 큐(Queue): FIFO구조. 제일 먼저 저장한 것을 제일 먼저 꺼내게 된다. - 최근 사용문서, 인쇄작업대기목록, 버퍼(buffer)
2. Queue의 변형 - Deque, PriorityQueue, BlockingQueuePermalink
- 덱(Deque): Stack과 Queue의 결합. 양끝에서 저장(offer)과 삭제(poll) 가능 (구현클래스: ArrayDeque, LinkedList)
- 우선순위 큐(PriorityQueue): 우선순위가 높은 것부터 꺼냄(null 저장불가) 입력[3,1,5,2,4] -> 출력[1,2,3,4,5]
- 블락킹 큐(BlockingQueue): 비어있을 때 꺼내기와, 가득 차 있을 때 넣기를 지정된 시간동안 지연시킴(block) - 멀티쓰레드
Eumeration, Iterator, ListIteratorPermalink
1. Enumeration, Iterator, ListIteratorPermalink
- 컬렉션에 저장된 데이터를 접근하는데 사용되는 인터페이스
- Enumeration은 Iterator의 구버전
- ListIterator는 Iterator의 접근성을 향상시킨 것 (단방향 -> 양방향)
2. IteratorPermalink
- 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화한 것
- 컬렉션에 iterator()를 호출해서 Iterator를 구현한 객체를 얻어서 사용
3. ListIterator - Iterator의 기능을 확장(상속)Permalink
- Iterator의 접근성을 향상시킨 것이 ListIterator이다. (단방향 -> 양방향)
- listIterator()를 통해서 얻을 수 있다.(List를 구현한 컬렉션 클래스에 존재)
ArraysPermalink
1. Arrays - 배열을 다루기 편리한 메서드(static) 제공Permalink
- 배열의 출력: toString()
- 다차원 배열의 비교와 출력: deepEquals(), deepToString(), equals()
- 배열의 복사: copyOf(), copyOfRange()
- 배열 채우기: fill(), setAll()
- 배열을 List로 변환: asList(Object… a)
- 배열의 정렬과 검색: sort(), binarySearch()
2. Comparator와 ComparablePermalink
- 객체를 정렬하는데 필요한 메서드를 정의한 인터페이스(정렬기준을 제공)
- Comparable: 기본 정렬기준을 구현하는데 사용
- Comparator: 기본 정렬기준 외에 다른 기준으로 정렬하고자할 때 사용
- compare()와 compareTo()는 두 객체의 비교결과를 반환하도록 작성 같으면 0, 오른쪽이 크면 음수(-), 작으면 양수(+)
HashSet과 TreeSetPermalink
1. HashSet과 TreeSet - 순서 X, 중복 XPermalink
- HashSet
- Set인터페이스를 구현한 대표적인 컬렉션 클래스
- 순서를 유지하려면, LinkedHashSet클래스를 사용하면 된다.
- TreeSet
- 범위 검색과 정렬에 유리한 컬렉션 클래스
- HashSet보다 데이터 추가, 삭제에 시간이 더 걸림
2. HashSet - boolean add(Object o)Permalink
- HashSet은 객체를 저장하기전에 기존에 같은 객체가 있는지 확인한다. 같은 객체가 없으면 저장하고, 있으면 저장하지 않는다.
- boolean add(Object o)는 저장할 객체의 equals()와 hashCode()를 호출. equals()와 hashCode()가 오버라이딩 되어 있어야 함
3. HashSet - hashCode()의 오버라이딩 조건Permalink
- 동일 객체에 대해 hashCoce()를 여러 번 호출해도 동일한 값을 반환해야 한다.
- equals()로 비교해서 true를 얻은 두 객체의 hashCode()값은 일치해야 한다.
- equals()로 비교한 결과가 false인 두 객체의 hashCode()값이 같을 수도 있다. 그러나 성능 향상을 위해 가능하면 서로 다른 값을 반환하도록 작성하자
4. TreeSet - 범위 검색과 정렬에 유리Permalink
- 범위 검색과 정렬에 유리한 이진 검색 트리(binary search tree)로 구현. 링크드 리스트처럼 각 요소(node)까 나무(tree)형태로 연결된 구조
- 이진 트리는 모든 노드가 최대 두 개의 하위 노드를 갖음(부모-자식관계)
- 이진 검색 트리는 부모보다 작은 값을 왼쪽에, 큰 값은 오른쪽에 저장
- HashSet보다 데이터 추가, 삭제에 시간이 더 걸림(반복적인 비교 후 저장)
5. TreeSet - 데이터 저장과정 boolean add(Object o)Permalink
- treeSet에 7,4,9,1,5의 순서로 데이터를 저장하면, 아래의 과정을 거친다.
6. TreeSet - 주요 생성자와 메서드Permalink
- TreeSet(): 기본 생성자
- TreeSet(Collection c): 주어진 컬렉션을 저장하는 TreeSet을 생성
- TreeSet(Comparator comp): 주어진 정렬기준으로 정렬하는 treeSet을 생성
- Object first(): 정렬된 순서에서 첫 번째 객체를 반환
- Object last(): 정렬된 순서에서 마지막 객체를 반환
7. TreeSet - 범위 검색 subSet(), hashSet(), tailSet()Permalink
- SortedSet subSet(Object fromElement, Object toElement): 범위 검색(fromElement)와 toElement사이)의 결과를 반환한다
- Sorted headSet(Object toElement): 지정된 객체보다 작은 값의 객체들을 반환한다.
- stored tailSet(ObjectfromElement): 지정된 객체보다 큰 값의 객체들을 반환한다.
8. TreeSet - 트리 순회(전위, 중위, 후위)Permalink
- 이진 트리의 모든 노드를 한번씩 읽는 것을 트리 순회라고 한다.
- 전위, 중위, 후위 순회법이 있으며, 중위 순회하면 오름차순으로 정렬된다.
HashMap과 TreeMapPermalink
1. HashMap과 TreeMap - 순서 X, 중복(키X, 값O)Permalink
- Map인터페이스를 통한 구현. 데이터를 키와 값의 쌍으로 저장
- HashMap(동기화X)은 Hashtable(동기화O)의 신버젼
- HashMap
- Map인터페이스를 구현한 대표적인 컬렉션 클래스
- 순서를 유지하려면, LinkedHashMap클래스를 사용하면 된다.
- TreeMap
- 범위 검색과 정렬에 유리한 컬렉션 클래스
- HashMap 보다 데이터 추가, 삭제에 시간이 더 걸림
2. HashMapPermalink
- 해싱(hashing)기법으로 데이터를 저장. 데이터가 많아도 검색이 빠르다.
- Map인터페이스를 구현. 데이터를 키와 값의 쌍으로 저장
- 키(key): 컬렉션 내의 키(key)중에서 유일해야 한다.
- 값(value): 키(key)와 달리 데이터의 중복을 허용한다.
3. 해싱(hashing)Permalink
- 해시함수(hash function)로 해시테이블(hash table)에 데이터를 저장, 검색
- 해시 테이블은 배열과 링크드 리스트가 조합된 형태
- 해시테이블에 저장된 데이터를 가져오는 과정
- 키로 해시함수를 호출해서 해시코드를 얻는다.
- 해시코드(해시함수의 반환값)에 대응하는 링크드리스트를 배열에서 찾는다.
- 링크드리스트에서 키와 일치하는 데이터를 찾는다.
- 해시함수는 같은 키에 대해 항상 같은 해시코드를 반환해야 한다. 서로 다른 키일지라도 같은 값으 해시코드를 반환할 수도 있다.
4. TreeMapPermalink
- 이진 검색 트리의 구조로 키와 값의 쌍으로 이루어진 데이터를 저장
- TreeSet처럼, 데이터를 정렬(키)해서 저장하기 때문에 저장시간이 길다. (TreeSet은 TreeMap을 이용해서 구현되어 있음)
- 다수의 데이터에서 개별적인 검색은 TreeMap보다 HashMap이 빠르다.
- Map이 필요할 때 주로 HashMap을 사용하고, 정렬이나 범위검색이 필요한 경우에 TreeMap을 사용
PropertiesPermalink
1. PropertiesPermalink
- 내부적으로 Hashtable을 사용하며, key와 value를 (String, String)로 저장
- 주로 어플리케이션의 환경설정에 관련된 속성을 저장하는데 사용되며 파일로부터 편리하게 값을 읽고 쓸 수 있는 메서드를 제공한다.
2. Properties - 예제 (example)Permalink
class PropertiesEx3{ public static void main(String[] args){ Properties prop = new Properties(); prop.setProperty("timeout","30"); prop.setProperty("language","한글"); prop.setProperty("size","10"); prop.setProperty("capacity","10"); try{ prop.store(new FileOutputStream("output.txt"),"Properties Example"); prop.storeToXML(new FileOutputStream("output.xml"), "Properties Example"); }catch(IOException e){ e.printStackTrace(); } } }
3. Collections - 컬렉션을 위한 메서드(static)를 제공Permalink
- 컬렉션 채우기, 복사, 정렬, 검색 - fill(), copy(), sort(), binarySearch()등
- 컬렉션의 동기화 - synchronizedXXX()
- 변경불가(readOnly) 컬렉션 만들기 - unmodifiableXXX()
- 싱글톤 컬렉션 만들기 - singletonXXX()
- 한 종류의 객체만 저장하는 컬렉션 만들기 - checkedXXX()
4. 컬렉션 클래스 정리 & 요약Permalink
- ArrayList : 배열기반, 데이터의 추가와 삭제에 불리. 순차적인 추가/삭제는 제일 빠름. 임의의 요소에 대한 접근성(accessibility)이 뛰어남
- LinkedList : 연결기반, 데이터의 추가와 삭제에 유리. 임의의 요소에 대한 접근성이 좋지않다.
- HashMap : 배열과 연결이 결합된 형태. 추가, 삭제, 검색, 점근성이 모두 뛰어남
- TreeMap : 연결기반. 정렬과 검색(특히 범위검색)에 적합. 검색성능은 HashMap보다 떨어짐
- Stack : Vector를 상속받아 구현(LIFO)
- Queue : LinkedList가 Queue 인터페이스를 구현(FIFO)
- Properties : Hashtable을 상속받아 구현(String, String)
- HashSet : HashMap을 이용해서 구현
- TreeSet : TreeMap을 이용해서 구현
- LinkedHashMap, LinkedHashSet : HashMap과 HashSet에 저장순서유지기능을 추가하였음