자바 프로 그래 밍 사상 - 제1 7 장 용기 깊이 연구 독서 노트 (5)

8416 단어
10. 선택 인터페이스의 다른 실현
용기 간 의 차 이 는 일반적으로 어떤 데이터 구조 로 이 루어 진 것 으로 귀결 된다.
예 를 들 어 Array List 와 LinkedList 는 모두 List 인 터 페 이 스 를 실현 하기 때문에 기본 적 인 조작 은 모두 같다.그러나 Array List 바 텀 은 배열 로 이 루어 진 것 이 고 링크 드 List 는 양 방향 링크 로 이 루어 진 것 입 니 다. 그 중에서 모든 대상 은 데 이 터 를 포함 하 는 동시에 직 상 링크 의 앞 과 뒤의 요소 에 대한 인용 도 포함 합 니 다.따라서 삽입, 삭제 에 더 적합 하 다.무 작위 접근 은 ArrayLIst 를 선택 하여 작업 의 성능 에 따라 선택 하여 이 루어 져 야 합 니 다.
그 다음 에 TreeSet, HashSet, LinkedHashSet 은 모두 Set 인 터 페 이 스 를 실현 한다.각각 다른 행동 이 있 습 니 다. HashSet 조회 속도 가 가장 빠 릅 니 다.LinkedHashSet 은 요소 삽입 순 서 를 유지 합 니 다.TreeSet 는 TreeMap 을 기반 으로 정렬 상태 에 있 는 Set 를 생 성 합 니 다.그래서 행동 에 따라 선택 한 실현.
List 선택
배열 이 지탱 하 는 List 와 Array List 는 목록 의 크기 에 상 관 없 이 접근 속도 가 똑 같이 빠르다.링크 드 리스트 에 대해 서 는 접근 시간 이 큰 목록 에 대해 서 는 눈 에 띄 게 증가 할 것 이다.따라서 무 작위 접근 유형의 조작 을 조작 할 때 배열 구 조 는 링크 구조 보다 더욱 적합 하 다.
교체 기 를 사용 하여 새 요 소 를 삽입 할 때 Array List 는 목록 이 커지 면 씀 씀 이 가 커진다.그러나 링크 드 리스트 에 대해 서 는 리스트 사이즈 에 따라 크게 달라 지지 않 는 다.ArrayList 를 삽입 할 때 배열 에 공간 을 확장 하고 인용 을 앞으로 이동 해 야 하기 때 문 입 니 다.링크 드 리스트 는 목록 에 남 은 요 소 를 수정 하지 않 고 새로운 요소 만 연결 해 야 합 니 다.
LinkedList 는 List 의 단점 을 특수 처리 합 니 다. 이것 은 LinkedList 가 Queue 에 작용 할 때 효율 을 높 입 니 다.LInked List 의 삽입 과 제거 대가 가 상당히 저렴 하고 목록 크기 에 따라 달라 지지 않 지만 Array List 삽입 작업 에 대한 대가 가 높 으 며 대 가 는 목록 크기 에 따라 증가한다.
랜 덤 액세스 get () 과 set () 작업 에 있어 서 Array List 는 링크 드 List 보다 속도 가 훨씬 빠 릅 니 다. LInked LIst 는 랜 덤 액세스 디자인 이 아니 기 때 문 입 니 다.
가장 좋 은 방법 은 ArrayList 를 선택 하고 자주 삽입 하고 삭제 하여 성능 에 영향 을 줄 때 만 LinkedList 를 선택 합 니 다.
Set 선택
HashSet 의 성능 은 TreeSet 보다 좋 습 니 다. 특히 요 소 를 추가 하고 삭제 할 때 이 두 가지 작업 이 더 중요 합 니 다.TreeSet 의 유일한 맛 은 원소 의 순 서 를 유지 하 는 것 이다.정렬 하기 때문에 트 리 셋 의 교 체 는 보통 HashSet 보다 빠르다.
링크 드 HashSet 삽입 에 대한 대가 가 HashSet 보다 높 습 니 다.링크 에 따 른 추가 비용 을 추가 로 유지 해 야 하기 때문이다.
맵 선택
Identity HashMap 을 제외 하고 모든 Map 이 실현 하 는 삽입 작업 은 Map 사이즈 가 커지 면서 현저히 느 려 지지 만 조작 대 가 를 찾 는 것 은 훨씬 적다.
TreeMap 은 보통 HashMap 보다 느 리 고 TreeMap 은 질서 있 는 목록 을 만 드 는 방식 입 니 다.나무의 행동 은 질 서 를 확보 하고 특별한 정렬 을 할 필요 가 없다 는 것 이다.TreeMap 을 채 우 면 키 의 Set 시 도 를 keyset () 방법 으로 가 져 온 다음 toArray () 로 키 를 만 드 는 배열 을 호출 할 수 있 습 니 다.
맵 을 사용 할 때 HahsMap 이 우선 이 어야 합 니 다. 맵 이 항상 질서 가 있 을 때 TreeMap 을 사용 해 야 합 니 다.
링크 드 HashMap 은 삽입 할 때 HashMap 보다 느 립 니 다. 해시 데이터 구 조 를 유지 하 는 동시에 링크 를 유지 해 야 하기 때문에 교체 속도 가 빠 릅 니 다.
Identity HashMap 은 완전히 다른 성능 을 가지 고 있 습 니 다.
HashMap 의 성능 인자
HashMap 을 수 동 으로 조정 하여 성능 을 향상 시 킬 수 있 습 니 다. 여기 서 어떤 용 어 는 반드시 알 아야 합 니 다.
용량: 표 의 통 위치.
초기 용량: 표 가 생 성 될 때 가지 고 있 는 통 자리 수 입 니 다.HashMap 과 HashSet 는 구조 함 수 를 통 해 초기 화 용량 을 지정 할 수 있 습 니 다.
크기: 표 에 현재 저 장 된 항목 수 입 니 다.
부하 인자: 사이즈 / 용량.빈 표 의 부하 인 자 는 0 이 고 반 만 표 의 부하 인 자 는 0.5 이 며 부하 가 가 벼 운 표 의 충돌 가능성 이 낮 기 때문에 삽입 과 검색 이 빠 르 고 교체 가 느리다.HashMap 과 HashSet 은 모두 지 정 된 부하 인자 의 구조 기 를 가지 고 있 으 며 부하 가 이 부하 인자 수준 에 이 르 면 용 기 는 자동 으로 용량 을 증가 시 키 고 실현 방식 은 용량 을 대체적으로 배가 시 키 며 기 존 대상 을 새로운 통 위치 집중 (재 산열) 에 다시 분포 하 는 것 이다.
HashMap 은 기본 부하 인 자 를 0.75 로 사용 하고 더 높 은 부하 인 자 는 검색 대 가 를 증가 합 니 다.
11. 실 용적 인 방법
Collections 클래스 (Collection 이 아 닌 것 을 주의 하 십시오) 내부 에는 탁월 한 정적 방법 이 많 습 니 다.
public static extends Object & Comparable super T>> T max/min(Collection extends T> coll)   Collection         -  Collection        ,
                                              (Collection extends T> coll, Comparator super T> comp) -   Comparator    。
public static int indexOfSubList/lastIndexOfSubList(List> source, List> target)   target source    /         ,     -1
public static  boolean replaceAll(List list, T oldVal, T newVal)   newVal  oldVal
public static void reverse(List> list)         
public static  Comparator reverseOrder()                  :TreeSet tr=new TreeSet(Collections.reverseOrder());
public static  Comparator reverseOrder(Comparator cmp)          :TreeSet tr=new TreeSet(Collections.reverseOrder(new StrLenComparator()));
public static void rotate(List> list, int distance)         distance   ,         。
public static void shuffle(List> list)                :(List> list, Random rnd)           
public static  void sort(List list)   List           :(List list, Comparator super T> c)  ,           
public static  void copy(List super T> dest, List extends T> src)  src       dest
public static void swap(List> list, int i, int j)   list   i   j   
public static  void fill(List super T> list, T obj)    x  list    
public static boolean disjoint(Collection> c1, Collection> c2)                 true
public static int frequency(Collection> c, Object o)        o     
public static  int binarySearch(List extends Comparable super T>> list, T key)      list   key     
public static  List nCopies(int n, T o)      n List, List    ,o List   
emptyList()/emptyMap()/emptySet()         
singleton(T t)/singleList(T t)/singleMap(K key,V value)         ,         

Collection 이나 Map 을 수정 할 수 없 음 으로 설정 합 니 다.
'수정 할 수 없 는' 방법 호출 에 대해 서 는 컴 파일 시 검사 가 발생 하지 않 지만, 변환 이 완료 되면 용기 내용 을 바 꾸 는 모든 작업 이 Unsupported Operation Exception 이상 을 일 으 킬 수 있 습 니 다.
수정 불가: Collections. unmodifiebleXXX (XXX);예 를 들 어 Collections. unmodifiebleList (new ArrayList (data));
동기 화
Collections. synchronizedXXX (XXX) 예: Collections. synchronizedList (new ArrayList (data));두 스 레 드 가 동시에 작 동 하 는 것 을 발견 하면 Concurrent Mdification Excepton 을 던 집 니 다.

좋은 웹페이지 즐겨찾기