자바 집합 중의 헷갈리기 쉬운 지식점 기반 (상해)

3744 단어 java집합지식
(1)collection과collections
이 두 가지는 모두java에 위치한다.util 패키지 아래, 다른 것은:
컬렉션은 집합 인터페이스로 ListSet 등 흔히 볼 수 있는 하위 인터페이스가 있으며 집합 프레임워크의 첫 번째 노드로 집합 대상을 기본적으로 조작하는 일련의 방법을 제공한다.
일반적인 방법은 다음과 같습니다.
boolean add(E e) 용기에 요소 추가하기;intsize ()는collection의 원소 수를 되돌려줍니다.boolean isEmpty () 는 이 용기가 비어 있는지 판단합니다.boolean contains(Object o) 이 컬렉션에 지정된 요소가 포함되어 있으면true를 되돌려줍니다. 여기에는 equals () 방법이 사용됩니다.boolean remove(Object o)에서 지정한 요소를 제거하는 실례;기다리다
한편,collections는 포장 클래스로 집합 조작과 관련된 정적 다태적 방법을 포함하고,collection에서 조작하는 다태적 알고리즘, 즉'포장기'를 포함하며, 포장기는 지정한collection에서 지원하는 새로운collection과 소수의 다른 내용을 되돌려줍니다.
일반적인 방법은 다음과 같습니다.
void sort(List)는 List의 내용을 정렬합니다.
여기서 주의해야 할 것은, (ps: 다음sort ()에 대한 설명은 발췌한 것이다대상 그룹이나list 정렬 및 Collections 정렬 원리 List 및 Collection 정렬 추적
이sort() 함수의 정렬 주체는 Arrays입니다.sort(),

@SuppressWarnings("unchecked") 
public static <T extends Comparable<? super T>> void sort(List<T> list) { 
 Object[] array = list.toArray(); 
 Arrays.sort(array); 
 int i = 0; 
 ListIterator<T> it = list.listIterator(); 
 while (it.hasNext()) { 
  it.next(); 
  it.set((T) array[i++]); 
 } 
} 
Arrays.sort()에서 ComparableTimSort를 통해 알 수 있습니다.sort(Object[]a) 구현:

public static void sort(Object[] array) { 
 // BEGIN android-changed 
 ComparableTimSort.sort(array); 
 // END android-changed 
} 
static voidsort(Object[]a)부터 static voidsort(Object[]a, int lo, int hi)까지,private static void binarysort(Object[]a, int lo, int start).binarySort에서 크기 비교에 사용되는 부분은 다음과 같습니다.

Comparable<Object> pivot = (Comparable) a[start]; 
int left = lo; 
int right = start; 
assert left <= right; 
 
while (left < right) { 
 int mid = (left + right) >>> 1; 
 if (pivot.compareTo(a[mid]) < 0) 
  right = mid; 
 else 
  left = mid + 1; 
} 
2분 검색에서 크기 비교 부분은Comparable 인터페이스를 사용하는 유일한 방법:compareTo () 를 사용합니다. 사용자 정의 클래스가 용기에 불러와서 비교를 해야 할 때Comparable 인터페이스를 실현하거나Comparator 클래스를 계승하고compareTo () 방법을 다시 써야 합니다.
int binarySearch(List object)는 순서의 List 용기에 대해 반절법으로 지정된 대상을 찾습니다.void reverse(List)는 List의 용기 내의 대상을 역순으로 배열합니다.기다리다
(2) Iterator 및 Iterable
우선, Iterable은java에 있습니다.lang 가방 아래, Iterator는java에 있습니다.util 싸.집합 프레임워크에서 Iterator 인터페이스에서 세 가지 방법을 정의했다. 그것이 바로 booleanhasNext().E next();void remove().한편, Iterable에서는 하나의 방법만 정의되었습니다:iterator (), 반환값은 Iterator 인터페이스를 실현하는 대상입니다.Collection은 Iterable이라는 슈퍼 인터페이스를 계승했기 때문에 모든 집합 프레임워크의 실현 클래스는iterator () 라는 방법을 가지고 있으며, 다태적으로 Iterator의 인용은 현재 집합에서 Iterator를 실현한 부분(즉 그 세 가지 방법)에 접근할 수 있다.이 때 요소를 삭제해야 한다면, 이 집합 작업에 대한 Iterator의 잠금이 완료되었기 때문에, Iterator로 순환하는 과정에서 Iterator의remove () 방법만 사용할 수 있고, Collection 자체의remove (Object) 방법을 사용할 수 없습니다.
그렇다면 왜 반드시 Iterable 인터페이스를 실현해야 하는지, 왜 Iterator 인터페이스를 직접 실현하지 않는지, 이렇게 하면 집합류가 이 세 가지 방법을 직접 계승할 수 있습니까?
JDK의 집합류, 예를 들어 List 일족이나 Set 일족은 모두 Iterable 인터페이스를 실현했지만 Iterator 인터페이스를 직접적으로 실현하지는 않았다.
자세히 생각해 보면 이렇게 하는 것은 일리가 있다. 
Iterator 인터페이스의 핵심 방법인next()나hasNext()는 교체기의 현재 교체 위치에 의존하기 때문이다.
Collection이 Iterator 인터페이스를 직접 구현하면 컬렉션 객체에 현재 교체 위치의 데이터(포인터)가 포함되어야 합니다.
서로 다른 방법 사이에 집합이 전달될 때, 현재 교체 위치가 미리 설정할 수 없기 때문에,next () 방법의 결과는 예측할 수 없는 것으로 변한다.
Iterator 인터페이스에 reset () 방법을 추가하지 않으면 현재 교체 위치를 초기화합니다.
그러나 이때 Collection은 현재 교체 위치만 동시에 존재할 수 있습니다.
Iterable은 그렇지 않습니다. 호출할 때마다 처음부터 계산하는 교체기를 되돌려줍니다.
여러 개의 교체기는 서로 방해하지 않는다.
이상의 이 자바 집합 중의 헷갈리기 쉬운 지식점(상해)을 바탕으로 하는 것은 바로 편집자가 여러분에게 공유한 모든 내용입니다. 여러분께 참고가 되고 저희를 많이 사랑해 주시기 바랍니다.

좋은 웹페이지 즐겨찾기