Java 개념 정리II

10 분 소요

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의 값을 감소시킨다.
    • ArrayList

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

hashset

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

hashmap

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

hashing

  • 해시함수(hash function)로 해시테이블(hash table)에 데이터를 저장, 검색
  • 해시 테이블은 배열과 링크드 리스트가 조합된 형태
  • 해시테이블에 저장된 데이터를 가져오는 과정
    1. 키로 해시함수를 호출해서 해시코드를 얻는다.
    2. 해시코드(해시함수의 반환값)에 대응하는 링크드리스트를 배열에서 찾는다.
    3. 링크드리스트에서 키와 일치하는 데이터를 찾는다.
      • 해시함수는 같은 키에 대해 항상 같은 해시코드를 반환해야 한다. 서로 다른 키일지라도 같은 값으 해시코드를 반환할 수도 있다.

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에 저장순서유지기능을 추가하였음

태그:

카테고리:

업데이트: