자바 용기 지식 정리

4791 단어 자바
한 가지 그림 이 천 가지 말 보다 낫다.
그 중에서 녹색 으로 채 워 진 것 은 자주 사용 하 는 유형 이 므 로 중점적으로 파악 해 야 한다.
인터페이스 프로필
자바 용기 의 맨 윗 층 은 모두 인터페이스의 형식 으로 나타 나 서브 인터페이스 로 이 루어 진다.밤 을 들다
 Map map = new HashMap();

Iterator
교체 기 는 용 기 를 옮 겨 다 니 는 데 사 용 됩 니 다. JDK 소스 코드 는 다음 과 같 습 니 다.
package java.util;
import java.util.function.Consumer;
public interface Iterator {
    boolean hasNext();
    E next();
    default void remove() {
        throw new UnsupportedOperationException("remove");
    }
    default void forEachRemaining(Consumer super E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }
}

일반적인 용법:
Iterator iter = l.iterator();
  while(iter.hasNext()){
   String str = (String) iter.next();
   System.out.println(str);
  }

Collection
독립 요 소 를 저장 하 는 시퀀스 입 니 다.Collection 아래 에 또 세 개의 키 인터페이스 가 있 습 니 다. List, Set, Queue.
List
요소 가 중복 되 는 질서 있 는 Collection (시퀀스 라 고도 함)정확히 말 하면 목록 은 e1. equals (e2) 의 요 소 를 e1 과 e2 에 만족 시 킬 수 있 고 목록 자체 가 null 요 소 를 허용 하면 여러 개의 null 요 소 를 허용 합 니 다.List 를 실현 하 는 것 은 Array List, LinkedList, Vector, Stack 등 이 있다.
Set
중복 요소 (가 변 대상 포함) 를 포함 하지 않 는 Collection 은 무질서 한 집합 이다.set 는 a. equals (b) 를 가득 채 우 는 요 소 를 포함 하지 않 고 a 와 b 를 포함 하지 않 으 며 최대 null 이 있 습 니 다.Set 를 실현 하 는 인 터 페 이 스 는 EnumSet, HashSet, TreeSet 등 이 있다.
Queue
하나의 대기 열 은 두 개의 단 대기 열 로 머리, 꼬리 양쪽 에 요 소 를 삽입 하고 제거 하 는 것 을 지원 합 니 다. 주로 Array Deque, LinkedBlockingDeque, LinkedList 를 포함 합 니 다.다른 하 나 는 차단 식 대기 열 입 니 다. 대기 열 이 가득 찬 후에 요 소 를 삽입 하면 이상 을 던 집 니 다. 주로 Array BlockingQueue, Priority BlockingQueue, LinkedBlockingQueue 를 포함 합 니 다.
Map
키 - value 형 요 소 를 저장 합 니 다.
일반 용기 및 도구 클래스
ArrayList
데이터 구 조 는 선형 표를 사용 하 는데 장점 은 방문 과 조회 가 매우 편리 하지만 추가 와 삭제 할 때 효율 이 매우 낮다.
LinkedList
데이터 구 조 는 링크 를 사용 하 는데 장점 은 삭제 와 추가 의 효율 이 높 지만 무 작위 로 요 소 를 방문 할 때 효율 이 Array List 류 보다 낮다.
HashSet
데이터 구 조 는 산 목록 을 사용 하 는데 주로 고성능 집합 연산 을 하 는 데 사용 된다. 예 를 들 어 두 개의 집합 에 대해 교차, 집합, 차 집합 등 이다.집합 에는 반복 되 지 않 고 특성 순서 가 없 는 요소 가 포함 되 어 있다.그 값 은 중복 되 거나 무질서 해 서 는 안 된다.
TreeSet
데이터 구 조 는 빨간색 과 검은색 트 리 를 사용 하고 성능 이 HashSet 보다 낮 으 며 정렬 에 사 용 됩 니 다.
HashMap
데이터 구 조 는 산 목록 을 사용 하 는데 가장 많이 사용 되 는 것 은 Collection 입 니 다.
TreeMap
TreeSet 와 마찬가지 로 정렬 에 사 용 됩 니 다.
Arrays、Collections
이 두 가 지 는 도구 류 로 이해 하고 용기 류 의 정태 적 인 방법 을 제공 할 수 있다. 예 를 들 어 2 분 검색, 정렬 등 이다.
일반적인 용기 비교
ArrayList VS Vector
  • Array List 는 메모리 가 부족 할 때 기본적으로 50% + 1 개 확장 되 고 Vector 는 기본 확장 1 배 입 니 다.
  • Vector 는 index Of (obj, start) 인 터 페 이 스 를 제공 합 니 다. ArrayList 는 없습니다.
  • Vector 는 스 레 드 안전 등급 에 속 하지만 대부분의 경우 Vector 를 사용 하지 않 습 니 다. 스 레 드 안전 에 더 큰 시스템 비용 이 필요 하기 때 문 입 니 다.

  • 특별한 필요 없 이 보통 ArrayList 를 사용 합 니 다.
    ArrayList VS LinkedList
  • Array 는 색인 (index) 을 기반 으로 하 는 데이터 구조 이기 때문에 색인 을 사용 하여 배열 에서 데 이 터 를 검색 하고 읽 는 것 이 빠 릅 니 다.Array 가 데 이 터 를 가 져 오 는 시간 복잡 도 는 O (1) 이지 만 데 이 터 를 삭제 하려 면 많은 비용 이 듭 니 다. 배열 의 모든 데 이 터 를 다시 배열 해 야 하기 때 문 입 니 다.
  • ArrayList 에 비해 LinkedList 삽입 이 빠 릅 니 다.LinkedList 는 ArrayList 처럼 배열 의 크기 를 바 꿀 필요 도 없고, 배열 을 가득 채 울 때 모든 데 이 터 를 새로운 배열 로 다시 불 러 올 필요 도 없 기 때문이다. 이것 은 ArrayList 의 최 악의 상황 이다. 시간 복잡 도 는 O (n) 이 고, LinkedList 에 삽입 하거나 삭제 하 는 시간 복잡 도 는 O (1) 에 불과 하 다.ArrayList 는 데 이 터 를 삽입 할 때 색인 을 업데이트 해 야 합 니 다.
  • 데 이 터 를 삽입 하 는 것 과 유사 하고 데 이 터 를 삭제 할 때 LinkedList 도 ArrayList 보다 우수 합 니 다.
  • LinkedList 는 더 많은 메모리 가 필요 합 니 다. ArrayList 의 모든 색인 위 치 는 실제 데이터 이 고 LinkedList 의 모든 노드 에는 실제 데이터 와 앞 뒤 노드 의 위치 가 저장 되 어 있 기 때 문 입 니 다.

  • HashTable VS HashMap
  • HashMap 은 Hashtable 과 거의 등가 할 수 있 습 니 다. HashMap 은 비 synchronized 를 제외 하고 null (HashMap 은 null 의 키 값 (key) 과 값 (value) 을 받 아들 일 수 있 으 며 Hashtable 은 안 됩 니 다) 을 받 아들 일 수 있 습 니 다.HashMap 은 비 synchronized 이 고 Hashtable 은 synchronized 입 니 다. 이것 은 Hashtable 은 스 레 드 가 안전 하고 여러 스 레 드 가 Hashtable 을 공유 할 수 있 음 을 의미 합 니 다.정확 한 동기 화가 없 으 면 여러 스 레 드 는 HashMap 을 공유 할 수 없습니다.자바 5 는 Concurrent HashMap 을 제공 합 니 다. HashTable 대신 HashTable 의 확장 성 이 좋 습 니 다.
  • 또 다른 차 이 는 HashMap 의 교체 기 (Iterator) 는 fail - fast 교체 기 이 고 Hashtable 의 enumerator 교체 기 는 fail - fast 가 아니다.따라서 다른 스 레 드 가 HashMap 의 구조 (요소 추가 또는 제거) 를 바 꾸 면 Concurrent ModificationException 을 던 지지 만 교체 기 자체 의 reove () 방법 으로 요 소 를 제거 하면 Concurrent ModificationException 이상 을 던 지지 않 습 니 다.그러나 이것 은 반드시 발생 하 는 행위 가 아니 므 로 JVM 을 보아 야 한다.이것 역시 Enumeration 과 Iterator 의 차이 점 이다.
  • Hashtable 은 스 레 드 가 안전 하고 synchronized 이기 때문에 단일 스 레 드 환경 에서 HashMap 보다 느 립 니 다.동기 화 할 필요 가 없다 면 단일 스 레 드 만 필요 하 다 면 HashMap 을 사용 하 는 것 이 Hashtable 보다 좋 습 니 다.HashMap 은 시간 이 지 날수 록 Map 의 요소 순서 가 변 하지 않 는 다 고 보장 할 수 없습니다.
  • 좋은 웹페이지 즐겨찾기