"안녕, 아미고!"

"안녕, 엘리!"

"오늘 우리는 컬렉션의 구조에 대해 단번에 완전히 알아볼 것입니다."

"나는 이것을 오랫동안 기다렸다."

"컬렉션이 무엇인지 이미 알고 있고 어떻게 작업하는지 알고 있습니다. 지식을 엄격한 시스템으로 정리할 때입니다. 그러면 많은 '왜'와 '어떻게'에 대한 질문이 사라지고 대부분의 것이 분명해질 것입니다."

" 컬렉션 인터페이스 . 컬렉션 인터페이스 의 상속 구조는 다음과 같습니다."

컬렉션 인터페이스 - 1

두 가지를 주목하십시오.

첫째, 여기에 표시되는 모든 것은 인터페이스입니다.

둘째, 화살표는 «상속»을 의미합니다.

"즉, List, Set 및 Queue는 Collection을 상속하지만 Map은 그렇지 않습니까?"

"그렇습니다. 추상 클래스는 이러한 인터페이스를 상속하고, 차례로  ArrayList, Hashtable, TreeSet,… "

"맞아요."

"이제 이러한 인터페이스의 메서드가 무엇인지 살펴보겠습니다."

Iterable<E>: 인터페이스 의 메서드 :

행동 양식 설명
Iterator<T> iterator(); 반복자 객체를 반환합니다.

"충분하지 않은 것 같습니다."

"글쎄, 그게 얼마나 많은지. Iterator에 대한 전부입니다. 지금은 다루지 않겠지만 곧 자세히 다룰 것입니다."

Collection<E> 의 메소드 : 인터페이스:

행동 양식 설명
boolean add(E e); 컬렉션에 요소를 추가합니다.
boolean addAll(Collection<? extends E> c); 컬렉션에 요소를 추가합니다.
void clear(); 컬렉션에서 모든 요소를 ​​제거합니다.
boolean contains(Object o); 컬렉션에 요소가 포함되어 있는지 확인합니다.
boolean containsAll(Collection<?> c); 컬렉션에 요소가 포함되어 있는지 확인합니다.
boolean equals(Object o); 컬렉션이 동일한지 확인합니다.
int hashCode(); 해시 코드를 반환
boolean isEmpty(); 컬렉션이 비어 있는지 확인합니다.
Iterator<E> iterator(); 반복자 객체를 반환합니다.
boolean remove(Object o); 컬렉션에서 요소를 제거합니다.
boolean removeAll(Collection<?> c); 컬렉션에서 요소를 제거합니다.
boolean retainAll(Collection<?> c); c에 없는 모든 요소를 ​​제거합니다.
int size(); 컬렉션의 크기를 반환
Object[] toArray(); 컬렉션을 배열로 변환
<T> T[] toArray(T[] a); 컬렉션을 배열로 변환

"저는 이미 여기 있는 모든 것이 확실합니다. 이 방법의 절반은 사용했고 나머지 절반은 접했습니다."

"좋아, 그럼 계속하자."

 List<E>: 인터페이스 의 메소드 :

행동 양식 설명
void add(int index, E element); 컬렉션 중간에 요소를 추가합니다.
boolean addAll(int index, Collection<? extends E> c); 컬렉션에 요소를 추가합니다.
E get(int index); 인덱스로 요소를 반환
int indexOf(Object o); 요소의 인덱스(숫자)를 반환합니다.
int lastIndexOf(Object o); 마지막 요소의 인덱스를 반환합니다.
ListIterator<E> listIterator(); 목록에 대한 반복자를 반환합니다.
ListIterator<E> listIterator(int index); 목록에 대한 반복자를 반환합니다.
E remove(int index); 인덱스로 요소를 제거합니다.
E set(int index, E element); 인덱스로 새로운 값을 설정
List<E> subList(int fromIndex, int toIndex); 하위 컬렉션을 반환합니다.

"여기에서도 근본적으로 새로운 것은 없습니다. 컬렉션에 대한 거의 모든 것을 이미 알고 있기 때문에 기뻐할 수밖에 없습니다."

"음, 당신을 놀라게 할 무언가를 찾을 수 있을 것 같습니다. 하지만 인터페이스를 계속 살펴보겠습니다."

Set<E>: 인터페이스 의 메소드 :

행동 양식 설명
방법 없음

"Set 인터페이스에는 새로운 메서드가 없습니다. 상속받은 메서드만 있습니다."

"네, Interable 인터페이스에도 아무것도 없는 걸 봤습니다.

"반면에 방법이 적다는 것은 기억할 것이 적다는 것을 의미합니다!"

"당신의 삶을 긍정하는 낙관주의가 나를 행복하게 합니다."

"Set 인터페이스는 SortedSet 및 NavigableSet 메서드가 있는 두 인터페이스에 의해 상속됩니다. 하지만 자세히 살펴보거나 끝내지 않겠습니다."

"대신 Java에서 컬렉션을 설명하는 클래스 및 인터페이스에 대한 일반적인 그림을 제공하겠습니다."

"가져와."

"그럼 꽉 잡아."

컬렉션 인터페이스 - 2

"와, 엄청나다!"

"음, 그렇게 크지는 않습니다. 또한 추상 클래스는 전적으로 선택 사항이라는 점을 기억하세요. 하지만 어떤 클래스가 어떤 인터페이스를 구현하는지 기억하는 것이 좋습니다. 꽤 자주 유용할 수 있습니다."

"아, 일부 컬렉션은 쓸모 없는 것으로 간주된다는 점에 유의하고 싶습니다."

"그게 뭐야?"

"저는 Vector, Stack, Dictionary 및 Hashtable 클래스에 대해 이야기하고 있습니다. 이들은 일반 컬렉션의 동기화된(스레드 안전) 버전입니다."

"그러나 Java 는 다른 스레드에서 액세스할 수 있을 뿐만 아니라 훨씬 더 효율적인 구현을 가진 많은 컬렉션이 있는  특수 동시성 라이브러리를 추가했습니다 . ConcurrentHashMap 은 Hashtable 보다 훨씬 더 효율적입니다 ."

"Vector, Stack, Dictionary 및 Hashtable 컬렉션을 사용할 수 있지만 권장하지 않습니다."

"알았어, 명심할게."

"고마워, 엘리!"