Java 컬렉션 인터뷰 질문 및 답변
Java 컬렉션 프레임워크 에 소개되었습니다 JDK 1.2 여기에는 모든 컬렉션 클래스와 인터페이스가 포함되어 있습니다. 자바 컬렉션 개체 컬렉션을 저장하고 조작하는 메커니즘을 제공하는 프레임워크입니다. 이를 통해 개발자는 데이터 조작을 위해 사전 패키지된 데이터 구조 및 알고리즘에 액세스할 수 있습니다.
이번 글에서는 상위 50개를 다루었습니다. Java 컬렉션 인터뷰 질문 및 답변 탐색 컬렉션, WeakHashMap, 스트림 람다 등과 같은 기본부터 고급 Java 컬렉션 개념까지 모든 것을 포괄합니다. 신입생 또는 숙련된 Java 개발자 , 이러한 Java 컬렉션 인터뷰 질문은 다음 Java 인터뷰에서 좋은 성적을 거두는 데 필요한 모든 자신감을 제공합니다.
Java 컬렉션 인터뷰 질문
50개의 질문을 경험자와 신입생의 두 부분으로 나누었습니다. 신입생을 위한 질문부터 시작하겠습니다.
내용의 테이블
신입생을 위한 Java 컬렉션 인터뷰 질문
1. Java의 컬렉션이란 무엇입니까?
용어 수집 하나의 단위로 표현되는 개체 그룹을 나타냅니다. Java 컬렉션 클래스 계층 구조의 클래스는 두 가지로 나뉩니다. 뿌리 인터페이스: 컬렉션 (java.util.컬렉션) 및 지도 (java.util.Map) . Java 컬렉션에 대해 학습하는 동안 접하게 되는 용어:
- 수집 프레임워크: Java의 컬렉션 프레임워크는 객체 그룹을 단일 엔터티로 표현하기 위한 클래스와 인터페이스를 정의합니다. C++ 개발자는 컬렉션 프레임워크를 다음과 비교할 수 있습니다. STL(표준 템플릿 라이브러리) C++ 배경에서 가져온 경우 컬렉션 프레임워크가 포함된 컨테이너 프레임워크.
- 수집 인터페이스: 클래스의 인터페이스는 어떻게 해야 하는지가 아니라 무엇을 해야 하는지 지정합니다. 즉, 수업의 청사진이다. 이 인터페이스는 컬렉션 프레임워크의 일부인 모든 컬렉션 개체에 대해 가장 일반적인 메서드를 제공합니다. 또는 개별 개체를 전체적으로 나타냅니다.
- 컬렉션 클래스: Collection Framework의 멤버이며 java.util 패키지의 일부입니다. 컬렉션 개체에는 이 클래스의 많은 유틸리티 메서드가 제공됩니다.
2. Java의 프레임워크란 무엇입니까?
프레임워크는 다음과 같은 집합입니다. 클래스 그리고 인터페이스 기성 아키텍처를 제공합니다. 새로운 기능이나 클래스를 구현하기 위해 프레임워크를 정의할 필요는 없습니다. 결과적으로 최적의 객체 지향 디자인에는 모두 유사한 작업을 수행하는 클래스 컬렉션을 포함하는 프레임워크가 포함됩니다. 프레임워크는 메서드 호출, 확장, 콜백, 리스너 및 기타 구현 제공 등 다양한 방법으로 사용할 수 있습니다. Java에서 널리 사용되는 프레임워크 중 일부는 다음과 같습니다.
- 봄
- 최대 절전 모드
- 스트럿츠
- Google 웹 툴킷(GWT)
- JSF(JavaServer Face)
3. Java에서 배열과 컬렉션의 차이점은 무엇입니까?
배열은 Java에서 공통 이름을 가진 유사한 유형의 변수 모음입니다. Java와 C/C++의 배열에는 몇 가지 차이점이 있습니다. 반면, 컬렉션은 개체 컬렉션으로 알려진 단일 엔터티를 형성하는 개별 개체 그룹입니다.
| 배열 | 수집 |
|---|---|
| 배열은 크기가 고정되어 있으므로 일단 배열을 생성하면 요구 사항에 따라 늘리거나 줄일 수 없습니다. | 컬렉션은 본질적으로 성장 가능하며 우리의 요구 사항을 기반으로 합니다. 크기를 늘리거나 줄일 수 있습니다. |
| 메모리와 관련하여 배열은 사용하지 않는 것이 좋습니다. | 메모리의 경우 컬렉션 사용을 권장합니다. |
| 성능면에서는 Array를 사용하는 것이 좋습니다. | 성능 측면에서 컬렉션 사용은 권장되지 않습니다. |
| 배열은 동일한 데이터 유형 요소만 보유할 수 있습니다. | 컬렉션에는 동종 요소와 이종 요소가 모두 포함될 수 있습니다. |
자세한 내용은 기사를 참조하십시오 – Java의 배열과 컬렉션의 차이점
4. Java Collections Framework에서 사용되는 다양한 인터페이스는 무엇입니까?
컬렉션은 컬렉션 계층 구조의 루트로 알려져 있습니다. 컬렉션은 요소라고 알려진 개체 그룹을 나타냅니다. Java 플랫폼은 이 인터페이스의 직접적인 구현을 제공하지 않지만 Collection 인터페이스는 List 및 Set 클래스에 의해 구현됩니다.
- 컬렉션 인터페이스
- 목록 인터페이스
- 인터페이스 설정
- 대기열 인터페이스
- 대기열 제거 인터페이스
- 지도 인터페이스
5. Java에서 컬렉션 프레임워크의 계층 구조를 설명하십시오.
컬렉션 프레임워크에 필요한 모든 클래스와 인터페이스는 유틸리티 패키지(java.util)에 포함되어 있습니다. 컬렉션 프레임워크에는 반복자가 모든 컬렉션을 반복할 수 있도록 하는 반복 가능한 인터페이스라는 인터페이스가 있습니다. 이 인터페이스 외에도 기본 컬렉션 인터페이스는 컬렉션 프레임워크의 루트 역할을 합니다. 모든 컬렉션은 이 컬렉션 인터페이스를 확장하여 반복자의 속성과 이 인터페이스의 메서드를 확장합니다. 다음 그림은 컬렉션 프레임워크의 계층 구조를 보여줍니다.
Java 컬렉션 계층 구조
6. 컬렉션 프레임워크의 장점은 무엇입니까?
컬렉션 프레임워크의 장점: 컬렉션 프레임워크의 부족으로 인해 위와 같은 일련의 단점이 발생하므로 컬렉션 프레임워크의 장점은 다음과 같습니다.
- 일관된 API: API에는 다음과 같은 기본 인터페이스 세트가 있습니다. 수집 , 세트 , 목록 , 또는 지도 , 이러한 인터페이스를 구현하는 모든 클래스(ArrayList, LinkedList, Vector 등)에는 일부 일반적인 방법 세트.
- 프로그래밍 노력 감소: 프로그래머는 컬렉션의 디자인에 대해 걱정할 필요가 없으며 오히려 자신의 프로그램에서 컬렉션을 최대한 활용하는 데 집중할 수 있습니다. 따라서 객체지향 프로그래밍(즉, 추상화)의 기본 개념이 성공적으로 구현되었습니다.
- 프로그램 속도와 품질 향상: 유용한 데이터 구조 및 알고리즘의 고성능 구현을 제공하여 성능을 향상시킵니다. 이 경우 프로그래머는 특정 데이터 구조의 최상의 구현을 생각할 필요가 없기 때문입니다. 그는 최고의 구현을 사용하여 알고리즘/프로그램의 성능을 대폭 향상시킬 수 있습니다.
7. Java의 ArrayList란 무엇입니까?
ArrayList는 Java 컬렉션 프레임워크의 일부이며 java.util 패키지의 클래스입니다. 이는 Java에서 동적 배열을 제공합니다. ArrayList의 주요 장점은 배열을 선언하면 크기를 언급해야 하지만 ArrayList에서는 크기를 언급하려는 경우 ArrayList의 크기를 언급할 필요가 없다는 것입니다.
배열 목록 이미지
자세한 내용은 기사를 참조하십시오 - 자바의 배열리스트
8. 컬렉션과 컬렉션의 차이점은 무엇입니까?
| 수집 | 컬렉션 |
|---|---|
| 인터페이스입니다. | 유틸리티 클래스입니다. |
| 개별 개체 그룹을 단일 단위로 나타내는 데 사용됩니다. | 컬렉션 작업에 사용되는 여러 유틸리티 메서드를 정의합니다. |
| Collection은 java8부터 정적 메소드를 포함하는 인터페이스입니다. 인터페이스에는 추상 및 기본 메소드가 포함될 수도 있습니다. | 여기에는 정적 메서드만 포함되어 있습니다. |
자세한 내용은 기사를 참조하십시오 - 예제가 포함된 Java의 컬렉션과 컬렉션
9. Java 컬렉션 프레임워크에서 ArrayList와 LinkedList의 차이점은 무엇입니까?
ArrayList와 LinkedList
| 배열목록 | 링크드리스트 |
|---|---|
| 이 클래스는 동적 배열을 사용하여 요소를 저장합니다. 제네릭이 도입되면서 이 클래스는 모든 유형의 객체 저장을 지원합니다. | 이 클래스는 이중 연결 리스트를 사용하여 요소를 저장합니다. ArrayList와 유사하게 이 클래스는 모든 유형의 객체 저장도 지원합니다. |
| 내부 구현으로 인해 ArrayList를 조작하는 데 더 많은 시간이 걸립니다. 요소를 제거할 때마다 내부적으로 배열이 순회되고 메모리 비트가 이동됩니다. | LinkedList를 조작하는 데는 ArrayList에 비해 시간이 덜 걸립니다. 이중 연결 목록에서는 메모리 비트를 이동하는 개념이 없기 때문입니다. 목록이 순회되고 참조 링크가 변경됩니다. |
| 이 클래스는 List 인터페이스를 구현합니다. 따라서 이는 목록 역할을 합니다. | 이 클래스는 List 인터페이스와 Deque 인터페이스를 모두 구현합니다. 따라서 리스트와 데크의 역할을 할 수 있습니다. |
| 이 클래스는 애플리케이션이 데이터 저장 및 액세스를 요구할 때 더 잘 작동합니다. | 이 클래스는 애플리케이션이 저장된 데이터의 조작을 요구할 때 더 잘 작동합니다. |
자세한 내용은 기사를 참조하십시오 - Java의 ArrayList와 LinkedList 비교
10. 반복자란 무엇입니까?
Java의 컬렉션 프레임워크 반복자를 사용하여 요소를 하나씩 검색합니다. 이 반복자는 모든 유형의 Collection 개체와 함께 사용할 수 있으므로 보편적입니다. Iterator를 사용하면 읽기 작업과 제거 작업을 모두 수행할 수 있습니다. 이는 요소 제거 기능이 추가된 Enumeration의 향상된 버전입니다.
모든 컬렉션 프레임워크 구현 인터페이스의 요소를 열거할 때 세트 , 목록 , 대기줄 , 무엇에 대해서 , Map의 구현된 모든 클래스, Iterator를 사용해야 합니다. 전체 컬렉션 프레임워크에 사용할 수 있는 유일한 커서는 반복자입니다. Collection 인터페이스의 iterator() 메소드를 사용하면 반복자 객체를 생성할 수 있습니다.
통사론:
Iterator itr = c. iterator ();
메모: 여기서 c는 Collection 개체입니다. itr은 Iterator 인터페이스 유형이며 c를 참조합니다.
자세한 내용은 기사를 참조하십시오 - Java의 반복자
11. 반복자와 열거형의 차이점은 무엇입니까?
반복자와 열거형의 주요 차이점은 반복자에는 제거() 메서드가 있지만 열거형에는 없다는 것입니다. 따라서 Iterator를 사용하면 컬렉션에 객체를 추가하거나 제거하여 객체를 조작할 수 있습니다. 열거형은 객체를 순회하고 가져올 수만 있으므로 읽기 전용 인터페이스처럼 동작합니다.
자세한 내용은 기사를 참조하십시오 - 반복자와 열거의 차이점
12. Java에서 List와 Set의 차이점은 무엇입니까
목록과 집합의 주요 차이점은 목록에는 중복 요소가 포함될 수 있지만 집합에는 고유한 요소만 포함된다는 것입니다. 목록은 순서가 지정되어 있으며 추가된 개체의 순서를 유지합니다. 세트는 순서가 없습니다.
| 목록 | 세트 |
|---|---|
| 목록은 인덱싱된 시퀀스입니다. | 세트는 인덱싱되지 않은 시퀀스입니다. |
| 목록에는 중복 요소가 허용됩니다. | 세트는 중복 요소를 허용하지 않습니다. |
| 위치별로 요소에 액세스할 수 있습니다. | 요소에 대한 위치 액세스는 허용되지 않습니다. |
| 여러 개의 null 요소를 저장할 수 있습니다. | Null 요소는 한 번만 저장할 수 있습니다. |
| 목록 구현은 ArrayList, LinkedList, Vector, Stack입니다. | 집합 구현은 HashSet, LinkedHashSet입니다. |
자세한 내용은 기사를 참조하십시오 - Java의 목록과 집합의 차이점
13. Java Collections Framework의 모범 사례는 무엇입니까?
다음은 Java 컬렉션을 사용하는 동안의 몇 가지 모범 사례입니다.
- 프로그램은 구현이 아닌 인터페이스로 작성되어야 하므로 나중에 구현을 수정할 수 있습니다.
- 가능하면 Generics를 사용하여 유형 안전성을 보장하고 ClassCastException을 방지하세요.
- 필요에 따라 적절한 컬렉션 유형을 선택합니다. 예를 들어 크기가 고정되어 있으면 ArrayList 대신 Array를 사용할 수 있습니다. Map을 반복할 때 LinkedHashMap을 사용해야 합니다. 세트는 중복을 피하는 가장 좋은 방법입니다.
- hashCode() 및 equals() 구현을 방지하려면 JDK에서 제공하는 불변 클래스를 Map의 키로 사용하세요.
- 코드의 가독성을 높이려면 컬렉션의 크기를 찾아 0과 비교하는 대신 isEmpty()를 사용해야 합니다.
- 자체 구현을 작성하는 대신 컬렉션 유틸리티 클래스를 사용하여 읽기 전용, 동기화 또는 빈 컬렉션을 가져옵니다. 코드 재사용을 향상하는 동시에 안정성도 향상됩니다.
14. Java의 우선순위 큐란 무엇입니까?
PriorityQueues는 우선순위에 따라 객체를 처리하는 데 사용됩니다. 대기열은 선입선출 알고리즘을 따르지만 때때로 대기열의 요소는 우선순위에 따라 처리되어야 하며, 여기서 PriorityQueue가 작동합니다. 우선순위 큐는 우선순위 힙을 기반으로 합니다.
우선순위 큐의 요소는 사용되는 생성자에 따라 자연 순서에 따라 또는 큐 생성 시 제공되는 비교기에 따라 정렬됩니다.
Java의 우선순위 대기열
선언:
public class PriorityQueue extends AbstractQueue implements Serializable where E is the type of elements held in this queue
이 클래스는 직렬화 가능, 반복 가능, 컬렉션 및 큐 인터페이스를 구현합니다.
15. 자바에서 List, Set, Map의 차이점은 무엇인가요?
| 목록 | 세트 | 지도 |
|---|---|---|
| 목록 인터페이스는 중복 요소를 허용합니다. | 세트는 중복 요소를 허용하지 않습니다. | 지도는 중복 요소를 허용하지 않습니다. |
| 목록은 삽입 순서를 유지합니다. | 세트는 삽입 순서를 유지하지 않습니다. | 또한 지도는 삽입 순서를 유지하지 않습니다. |
| null 값은 원하는 만큼 추가할 수 있습니다. | 그러나 세트에는 거의 하나의 null 값만 있습니다. | 맵에서는 최대 단일 Null 키와 임의 개수의 Null 값을 허용합니다. |
| 목록 구현 클래스는 Array List 및 LinkedList입니다. | 집합 구현 클래스는 HashSet, LinkedHashSet 및 TreeSet입니다. | 맵 구현 클래스는 HashMap, HashTable, TreeMap, ConcurrentHashMap 및 LinkedHashMap입니다. |
자세한 내용은 기사를 참조하십시오 - Java의 목록, 집합 및 맵의 차이점
16. 큐와 스택의 차이점은 무엇입니까?
| 스택 | 대기줄 |
|---|---|
| 스택은 LIFO 원칙에 따라 작동합니다. 즉, 마지막에 삽입된 요소가 제거되는 첫 번째 요소가 된다는 의미입니다. | 대기열은 FIFO 원칙에 따라 작동합니다. 즉, 먼저 삽입된 요소가 가장 먼저 제거되는 요소가 됩니다. |
| 스택에서는 삽입 및 삭제가 맨 위에서만 수행됩니다. | 큐에서는 삽입이 목록의 뒤쪽에서 일어나고 삭제가 목록의 앞쪽에서 발생합니다. |
| 삽입 연산을 푸시 연산이라고 합니다. | 삽입 작업을 대기열에 넣기 작업이라고 합니다. |
| 삭제 작업을 팝 작업이라고 합니다. | 삭제 작업을 대기열 제거 작업이라고 합니다. |
| 스택의 맨 위는 항상 목록에 액세스하는 데 사용되는 유일한 포인터인 목록의 마지막 요소를 가리킵니다. | 큐에 액세스하기 위해 두 개의 포인터가 유지됩니다. 앞쪽 포인터는 처음 삽입된 요소를 가리키고 뒤쪽 포인터는 마지막으로 삽입된 요소를 가리킵니다. |
17. Java의 BlockingQueue란 무엇입니까?
Java의 BlockingQueue 인터페이스는 ConcurrentHashMap, Counting Semaphore, CopyOnWriteArrrayList 등과 같은 다양한 다른 동시 유틸리티 클래스와 함께 Java 1.5에 추가되었습니다. BlockingQueue 인터페이스는 BlockingQueue가 가득 찼거나 비어 있는 경우 차단을 도입하여 대기열 외에도 흐름 제어를 지원합니다.
가득 찬 대기열에 요소를 추가하려는 스레드는 다른 스레드가 하나 이상의 요소를 대기열에서 빼거나 대기열을 완전히 지워서 대기열에 공간을 확보할 때까지 차단됩니다. 마찬가지로, 다른 스레드가 항목을 삽입할 때까지 빈 대기열에서 삭제를 시도하는 스레드를 차단합니다. BlockingQueue는 null 값을 허용하지 않습니다. null 항목을 대기열에 추가하려고 하면 NullPointerException이 발생합니다.
BlockingQueue의 사용법
Java의 차단 대기열
BlockingQueue의 계층 구조
Java의 차단 대기열 계층 구조
선언:
public interface BlockingQueue extends Queue
여기, 그리고 컬렉션에 저장된 요소의 유형입니다.
자세한 내용은 기사를 참조하십시오 – Java의 BlockingQueue 인터페이스
18. hashCode()란 무엇인가요?
Java 해시 코드를 보여주는 이미지
hashCode() 메서드는 해시코드 값을 정수로 반환합니다. 이는 주어진 입력 객체의 해시 값을 계산하는 Java 객체 클래스에 정의됩니다. 해시코드 값은 주로 HashMap, HashSet, HashTable….etc와 같은 해싱 기반 컬렉션에 사용됩니다. 이 메서드는 equals() 메서드를 재정의하는 모든 클래스에서 재정의되어야 합니다.
구문:
public int hashCode() // This method returns the hash code value // for the object on which this method is invoked.
자세한 내용은 기사를 참조하십시오 - Java의 equals() 및 hashCode() 메소드
19. Java Collection Framework에서 ArrayList와 Vector를 구별합니다.
컬렉션 인터뷰에서 이 질문이 자주 제기됩니다. 그러나 Vector는 동기화되는 반면 ArrayList는 동기화되지 않습니다. ArrayList는 Vector보다 빠릅니다. ArrayList의 Array 크기는 필요할 때마다 50% 증가하고, Vector의 용량은 필요할 때마다 두 배로 늘어납니다.
Java의 배열 목록과 벡터
| 배열목록 | 벡터 |
|---|---|
| ArrayList가 동기화되지 않았습니다. | 벡터가 동기화되었습니다. |
| ArrayList의 크기는 요소 수가 용량을 초과하는 경우 현재 배열 크기의 최대 50%까지 증가됩니다. | ArrayList의 크기는 요소 수가 용량을 초과하는 경우 현재 배열 크기의 최대 100%까지 증가됩니다. |
| ArrayList는 동기화되지 않았기 때문에 빠릅니다. | 벡터는 동기화되기 때문에 속도가 느립니다. |
| 반복자 인터페이스는 요소를 순회하는 데 사용됩니다. | 반복자 인터페이스 또는 열거를 사용하여 벡터를 탐색할 수 있습니다. |
자세한 내용은 기사를 참조하십시오 – Java의 벡터와 ArrayList
20. Iterator와 ListIterator를 구별합니다.
| 반복자 | 목록반복자 |
|---|---|
| 컬렉션에 있는 요소는 정방향으로만 탐색할 수 있습니다. | 컬렉션에 있는 요소를 앞뒤 방향으로 탐색할 수 있습니다. |
| Map, List 및 Set을 탐색하는 데 도움이 됩니다. | List만 순회할 수 있고 다른 두 개는 순회할 수 없습니다. |
| Iterator를 사용하여 인덱스를 얻을 수 없습니다. | List를 순회하는 동안 언제든지 요소의 인덱스를 얻을 수 있는 nextIndex() 및 PreviousIndex()와 같은 메서드가 있습니다. |
| 컬렉션에 있는 요소를 수정하거나 교체할 수 없습니다. | set(E e)를 사용하여 요소를 수정하거나 교체할 수 있습니다. |
자세한 내용은 기사를 참조하십시오 – Iterator와 ListIterator의 차이점
21. 반복자와 열거형의 차이점은 무엇입니까?
반복자: 모든 Collection 객체에 적용할 수 있는 범용 반복자입니다. Iterator를 사용하면 읽기 및 제거 작업을 모두 수행할 수 있습니다.
통사론:
// Here 'c' is any Collection object. itr is of // type Iterator interface and refers to 'c' Iterator itr = c.iterator();
열거: 열거(또는 열거)는 사용자 정의 데이터 유형입니다. 이는 주로 정수 상수에 이름을 지정하는 데 사용되며, 이름은 프로그램을 읽고 유지하기 쉽게 만듭니다.
통사론:
// A simple enum example where enum is declared // outside any class (Note enum keyword instead of // class keyword) enum Color { RED, GREEN, BLUE; } | 반복자 | 열거 |
|---|---|
| 반복자는 모든 컬렉션 클래스에 적용할 수 있는 범용 커서입니다. | 열거형은 레거시 클래스에만 적용되므로 범용 커서가 아닙니다. |
| 반복자에는 제거() 메서드가 있습니다. | 열거형에는 제거() 메서드가 없습니다. |
| 반복자는 수정을 수행할 수 있습니다(예: 순회 중에 Collection에서 요소를 제거하는 Remove() 메서드 사용). | 열거형 인터페이스는 읽기 전용 인터페이스로 작동하며 컬렉션의 요소를 탐색하는 동안 컬렉션을 수정할 수 없습니다. |
| Iterator는 레거시 인터페이스가 아닙니다. Iterator는 HashMap, LinkedList, ArrayList, HashSet, TreeMap 및 TreeSet의 순회에 사용될 수 있습니다. | 열거형은 벡터 및 해시테이블을 탐색하는 데 사용되는 레거시 인터페이스입니다. |
자세한 내용은 기사를 참조하십시오 – 반복자와 열거의 차이점
22. Java Hashmap의 기능은 무엇입니까?
HashMap은 HashTable과 유사하지만 동기화되지 않습니다. 이를 통해 널 키도 저장할 수 있지만 널 키 객체는 하나만 있어야 하며 널 값은 제한 없이 있을 수 있습니다. 이 클래스는 지도의 순서를 보장하지 않습니다. 이 클래스와 해당 메서드를 사용하려면 다음을 가져와야 합니다. java.util. 해시맵 패키지 또는 해당 슈퍼클래스.
자바의 해시맵
통사론:
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable
매개변수: 이는 다음과 같은 두 개의 매개변수를 사용합니다.
- 이 맵에서 유지 관리하는 키 유형(K)
- 매핑된 값의 유형(V)
자세한 내용은 기사를 참조하십시오 - 예제가 포함된 Java의 HashMap
23. 컬렉션 인터페이스란 무엇입니까?
그만큼 수집 인터페이스는 Java 컬렉션 프레임워크의 멤버입니다. 그것은의 일부입니다 java.util 패키지. 컬렉션 계층 구조의 루트 인터페이스 중 하나입니다. Collection 인터페이스는 어떤 클래스에서도 직접 구현되지 않습니다. 그러나 List, Queue 및 Set과 같은 하위 유형이나 하위 인터페이스를 통해 간접적으로 구현됩니다.
예를 들어, HashSet 클래스는 Collection 인터페이스의 하위 인터페이스인 Set 인터페이스를 구현합니다. 컬렉션 구현이 특정 작업을 구현하지 않는 경우 UnsupportedOperationException을 발생시키는 해당 메서드를 정의해야 합니다.
수집 계층 구조:
Java의 컬렉션 인터페이스
24. 목록 인터페이스를 설명하세요.
Java의 클래스 인터페이스
Java에서는 List 인터페이스를 통해 사용자가 정렬된 개체 컬렉션을 저장할 수 있습니다. 목록은 Collection의 하위 인터페이스입니다. 컬렉션에서 목록은 중복된 값을 가질 수 있는 개체의 정렬된 컬렉션입니다. List는 삽입 순서를 유지하므로 위치 액세스 및 삽입이 허용되며 중복 값도 허용됩니다.
통사론:
public interface List extends Collection ;
이 목록 인터페이스는 ArrayList, Vector, Stack 등과 같은 다양한 클래스에 의해 구현됩니다. 모든 하위 클래스가 목록을 구현하므로 이러한 클래스 중 하나로 목록 개체를 인스턴스화할 수 있습니다.
예:
List al = 새로운 ArrayList();
목록 ll = 새로운 LinkedList();
목록 v = 새 벡터();여기서 T는 객체의 유형입니다.
Java의 배열 목록
List 인터페이스를 구현하는 클래스는 다음과 같습니다.
- 배열목록
- 링크드리스트
- 벡터
- 스택
25. asList() 메소드를 사용하여 주어진 배열을 컬렉션으로 변환하는 프로그램을 작성하십시오.
배열 기반 데이터를 컬렉션 기반으로 변환하려면 다음을 사용할 수 있습니다. java.util.Arrays 수업. 이 클래스는 배열을 컬렉션으로 변환하는 정적 메서드 asList(T… a)를 제공합니다.
자바
// Convert an Array into Collection in Java> // import java util library> import> java.util.*;> > // class for writing logic of the problem> public> class> ArrayToCollection {> > public> static> void> main(String args[])> > {> > // array input> > String students[] = {> 'Kamlesh'> ,> 'Abhay'> ,> > 'Abhishek'> ,> 'Shivansh'> };> > > // printing input elements for comparison> > System.out.println(> 'Array input: '> > + Arrays.toString(students));> > > // converting array into Collection> > // with asList() function> > List studentList = Arrays.asList(students);> > > // print converted elements> > System.out.println(> 'Converted elements: '> > + studentList);> > }> }> |
산출
Array input: [Kamlesh, Abhay, Abhishek, Shivansh] Converted elements: [Kamlesh, Abhay, Abhishek, Shivansh]
26. HashSet과 HashMap 구별
| 해시세트 | 해시맵 |
|---|---|
| HashSet은 Set 인터페이스를 구현합니다. | HashMap은 Map 인터페이스를 구현합니다. |
| 중복은 허용되지 않습니다 | 예 중복 값은 허용되지만 중복 키는 허용되지 않습니다. |
| HashSet에는 더미 값이 허용됩니다. | HashMap에는 더미 값이 허용되지 않습니다. |
| 추가 작업 중에는 단일 개체가 필요합니다. | 추가 작업 중에 2개 개체가 필요합니다. |
| HashMap에 비해 속도가 비교적 느립니다. | 여기서는 해싱 기법을 사용했기 때문에 HashSet에 비해 속도가 비교적 빠릅니다. |
| 단일 null 값이 있음 | 단일 null 키 및 임의 개수의 null 값 |
| Add() 메소드가 삽입에 사용됩니다. | 삽입에는 put() 메소드가 사용됩니다. |
자세한 내용은 기사를 참조하십시오 - HashMap과 HashSet의 차이점
27. HashSet과 HashTable을 구별하세요.
| 해시세트 | 해시테이블 |
|---|---|
| HashSet은 NULL 요소를 허용합니다. | HashTable은 NULL 요소를 허용하지 않습니다. |
| HashSet에 삽입하는 개체가 동일한 순서로 삽입된다는 보장은 없습니다. 개체는 해시 코드를 기반으로 삽입됩니다. LinkedHashSet을 사용하여 순서를 유지할 수 있습니다. | HashTable은 삽입 순서를 유지하지 않습니다. |
| HashSet은 동기화되지 않지만 외부에서 동기화가 가능합니다. | HashTable이 동기화되었습니다. |
| add() 메소드는 HashSet에 삽입하는 데 사용됩니다. | put() 메소드는 HashTable에 삽입하는 데 사용됩니다. |
28. 해싱 기반 컬렉션의 로드 팩터의 기본 크기는 얼마입니까?
Load Factor가 증가함에 따라 초기 용량에 대한 현재 요소의 비율이 임계값을 초과하는 경우 HashMap의 작업 복잡도는 O(1)로 유지되도록 용량이 증가합니다. O(1)의 작업 복잡도는 검색 및 삽입 작업에 일정한 시간이 걸린다는 의미입니다. 기본 부하율 크기는 다음과 같습니다. 0.75 . 기본 용량은 초기 용량에 부하율을 곱하여 계산됩니다.
자세한 내용은 기사를 참조하십시오 - 예제가 포함된 Java의 HashMap 로드 요소
경험이 풍부한 Java 컬렉션 인터뷰 질문
29. Java에서 Comparable과 Comparator의 차이점은 무엇입니까?
Java는 클래스의 데이터 멤버를 사용하여 객체를 정렬하는 두 가지 인터페이스를 제공합니다.
- 유사한
- 비교기
| 유사한 | 비교기 |
|---|---|
| Comparable 인터페이스는 단일 정렬 순서를 제공합니다. | Comparator 인터페이스는 여러 정렬 순서를 제공합니다. |
| 실제 클래스는 유사한 인터페이스에 의해 수정됩니다. | 실제 클래스는 Comparator 인터페이스에 의해 수정되지 않습니다. |
| CompareTo() 메서드는 요소를 정렬하는 데 사용됩니다. | Compare() 메소드는 요소를 정렬하는 데 사용됩니다. |
| Comparable은 java.lang 패키지에 있습니다. | 비교기는 java.util 패키지에 있습니다. |
자세한 내용은 기사를 참조하십시오 – Java의 비교기 및 비교기
30. 빠른 실패와 안전의 차이점은 무엇입니까?
Java의 반복자는 Collection 객체를 반복하는 데 사용됩니다. Fail-Fast 반복자는 즉시 오류를 발생시킵니다. ConcurrentModificationException 만약 있다면 구조적 변형 컬렉션의. 구조적 수정은 스레드가 해당 컬렉션을 반복하는 동안 컬렉션에서 요소를 추가하거나 제거하는 것을 의미합니다. ArrayList 및 HashMap 클래스의 Iterator는 빠른 실패 Iterator의 몇 가지 예입니다.
| 빠른 실패 | 안전 장치 |
|---|---|
| 반복 프로세스 중에 객체를 수정하는 동안 ConcurrentModificationException이 발생합니다. | 예외가 발생하지 않습니다. |
| Fail-Fast는 프로세스 중에 더 적은 메모리를 필요로 합니다. | Fail-Safe 반복자는 프로세스 중에 더 많은 메모리를 필요로 합니다. |
| 반복 프로세스 중에는 복제 객체가 생성되지 않습니다. | 반복 프로세스 중에 복제 개체 또는 복사본이 생성됩니다. |
| Fail-Fast는 반복 과정 중에 수정을 허용하지 않습니다. | Fail-Safe는 반복 과정 중에 수정을 허용합니다. |
| Fail-Fast는 빠르며, | Fail-Safe는 Fail Fast보다 약간 느립니다. |
| 예: ArrayList, Vector, HashMap, HashSet 등 | 예: ConcurrentHashMap, CopyOnWriteArrayList 등 |
자세한 내용은 기사를 참조하십시오 - Java의 Fail Fast 및 Fail Safe 반복자
31. 람다 표현식을 사용하여 목록을 반복하는 프로그램을 작성하세요.
반복은 다음을 사용하여 수행할 수 있습니다. 람다 식.
통사론:
list_name.forEach(variable->{//코드 블록}) 자바
// Java Program to iterate over a List> // using forEach()> > // Importing all classes of> // java.util method> import> java.util.*;> > // Class> class> GFG {> > > // Main driver method> > public> static> void> main(String args[])> > {> > // Creating an ArrayList> > List l => new> ArrayList();> > > // Adding elements to the List> > // Custom inputs> > l.add(> 'Geeks'> );> > l.add(> 'for'> );> > l.add(> 'Geeks'> );> > > // Lambda expression printing all elements in a List> > l.forEach((temp) ->{ System.out.println(임시); });> > }> }> |
산출
Geeks for Geeks
자세한 내용은 기사를 참조하십시오 – Java에서 목록을 반복합니다.
32. IdentityHashMap이란 무엇입니까?
IdentityHashMap은 객체 동일성 대신 참조 동일성을 사용하여 키(및 값)를 비교하는 Hashtable을 사용하여 Map 인터페이스를 구현합니다. 이 클래스는 Map 인터페이스를 구현하지만 객체를 equals() 메서드를 사용하여 비교하도록 요구하는 Map의 일반 계약을 의도적으로 위반합니다. 이 클래스는 사용자가 참조를 사용하여 객체를 비교하도록 허용할 때 사용됩니다. java.util 패키지에 속합니다.
자세한 내용은 기사를 참조하십시오 – Java의 IdentityHashMap 클래스
33. 열거형을 사용하여 HashTable의 내용을 표시하는 프로그램을 Java로 작성합니다.
hashtable 클래스는 키를 값에 매핑하는 해시 테이블을 구현합니다. null이 아닌 모든 객체는 키나 값으로 사용될 수 있습니다. 해시테이블에서 객체를 성공적으로 저장하고 검색하려면 키로 사용되는 객체가 hashCode 메서드와 equals 메서드를 구현해야 합니다. 다음은 열거형을 사용하여 HashTable의 내용을 표시하는 프로그램입니다.
자바
// Java Program to Demonstrate Getting Values> // as an Enumeration of Hashtable class> > import> java.io.*;> import> java.util.Enumeration;> import> java.util.Hashtable;> > // Main class> // EnumerationOnKeys> public> class> GFG {> > > // Main driver method> > public> static> void> main(String[] args)> > {> > // Creating an empty hashtable> > Hashtable hash> > => new> Hashtable();> > > // Inserting key-value pairs into hash table> > // using put() method> > hash.put(> 1> ,> 'Geeks'> );> > hash.put(> 2> ,> 'for'> );> > hash.put(> 3> ,> 'Geeks'> );> > > // Now creating an Enumeration object> > // to read elements> > Enumeration e = hash.elements();> > > // Condition holds true till there is> > // single key remaining> > > // Printing elements of hashtable> > // using enumeration> > while> (e.hasMoreElements()) {> > > // Printing the current element> > System.out.println(e.nextElement());> > }> > }> }> |
산출
Geeks for Geeks
34. HashMap에 있는 값의 컬렉션 뷰를 가져오는 프로그램을 Java로 작성합니다.
Java의 HashMap 클래스에는 HashMap 값에서 컬렉션을 생성하기 위한 java.util.HashMap.values() 메서드가 있습니다. 기본적으로 HashMap 값의 Collection 뷰를 반환합니다.
자바
// Java code to illustrate the values() method> import> java.util.*;> > public> class> Hash_Map_Demo {> > public> static> void> main(String[] args)> > {> > > // Creating an empty HashMap> > HashMap hash_map> > => new> HashMap();> > > // Mapping string values to int keys> > hash_map.put(> 0> ,> 'Welcome'> );> > hash_map.put(> 1> ,> 'to'> );> > hash_map.put(> 2> ,> 'Geeks'> );> > hash_map.put(> 3> ,> '4'> );> > hash_map.put(> 4> ,> 'Geeks'> );> > > // Displaying the HashMap> > System.out.println(> 'Initial Mappings are: '> > + hash_map);> > > // Using values() to get the set view of values> > System.out.println(> 'The collection is: '> > + hash_map.values());> > }> }> |
산출
Initial Mappings are: {0=Welcome, 1=to, 2=Geeks, 3=4, 4=Geeks} The collection is: [Welcome, to, Geeks, 4, Geeks] 자세한 내용은 기사를 참조하십시오 – Java의 HashMap 값() 메소드
35. 두 개의 ArrayList를 하나의 ArrayList로 결합하는 프로그램을 작성하세요.
Java에 두 개의 ArrayList가 주어지면 우리의 임무는 이러한 ArrayList를 결합하는 것입니다.
자바
// Java program to demonstrate> // How to join ArrayList> > import> java.util.*;> > public> class> GFG {> > public> static> void> main(String args[])> > {> > > ArrayList list_1 => new> ArrayList();> > > list_1.add(> 'Geeks'> );> > list_1.add(> 'For'> );> > list_1.add(> 'ForGeeks'> );> > > // Print the ArrayList 1> > System.out.println(> 'ArrayList 1: '> + list_1);> > > ArrayList list_2 => new> ArrayList();> > > list_2.add(> 'GeeksForGeeks'> );> > list_2.add(> 'A computer portal'> );> > > // Displaying the ArrayList 2> > System.out.println(> 'ArrayList 2: '> + list_2);> > > // using Collection.addAll() method to join two> > // arraylist> > list_1.addAll(list_2);> > > // Print the joined ArrayList> > System.out.println(> 'Joined ArrayLists: '> + list_1);> > }> }> |
산출
ArrayList 1: [Geeks, For, ForGeeks] ArrayList 2: [GeeksForGeeks, A computer portal] Joined ArrayLists: [Geeks, For, ForGeeks, GeeksForGeeks, A computer portal]
자세한 내용은 기사를 참조하십시오 - Java에서 두 개의 ArrayList 결합
36. Java에서 ArrayList를 어떻게 동기화할 수 있나요?
Collections.synchronizedList() 메소드를 사용하면 Java에서 컬렉션을 동기화할 수 있습니다. 동기화된 목록()은 선택 항목에 의해 지원되는 동기화된(스레드 안전) 목록을 반환합니다.
자바
// Java program to show synchronization of ArrayList> import> java.io.*;> import> java.util.*;> > class> GFG {> > public> static> void> main(String[] args)> > {> > // Non Synchronized ArrayList> > List list => new> ArrayList();> > > list.add(> 'Eat'> );> > list.add(> 'Coffee'> );> > list.add(> 'Code'> );> > list.add(> 'Sleep'> );> > list.add(> 'Repeat'> );> > > // Synchronizing ArrayList in Java> > list = Collections.synchronizedList(list);> > > // we must use synchronize block to avoid> > // non-deterministic behavior> > synchronized> (list)> > {> > Iterator it = list.iterator();> > while> (it.hasNext()) {> > System.out.println(it.next());> > }> > }> > }> }> |
산출
Eat Coffee Code Sleep Repeat
37. Java의 속성 클래스란 무엇입니까?
속성 클래스는 Hashtable의 하위 클래스입니다. 속성 클래스는 키가 문자열이고 값도 문자열인 값 목록을 저장합니다. 속성은 다른 속성 클래스 목록을 정의할 수 있지만 기본값은 속성입니다.
속성 클래스의 특징:
- 속성은 Hashtable의 하위 클래스입니다.
- 속성 파일은 키가 문자열이고 값도 문자열인 값 목록에 대한 문자열 데이터 유형을 저장하고 검색하는 데 사용됩니다.
- 원래 속성 목록에 특정 주요 속성이 포함되어 있지 않으면 기본 속성 목록이 대신 검색됩니다.
- 외부 동기화 없이 여러 스레드에서 개체를 공유할 수 있습니다.
- 속성 클래스를 사용하여 시스템 속성을 검색할 수 있습니다.
자세한 내용은 기사를 참조하십시오 - Java의 속성 클래스
38. 멀티스레드 Java 애플리케이션에서 HashMap을 사용하면 어떻게 되나요?
멀티 스레드 환경에서 여러 스레드가 매핑을 추가, 제거, 수정하는 등 구조적으로 맵을 변경하는 경우 HashMap의 내부 데이터 구조가 손상될 수 있으며 일부 누락된 링크, 잘못된 항목이 있을 수 있으며 맵 자체가 발생할 수 있습니다. 완전히 쓸모없게 됩니다. 따라서 동시 애플리케이션에서는 HashMap을 사용하면 안 됩니다. 대신 스레드로부터 안전한 ConcurrentHashMap 또는 Hashtable을 사용하세요. ConcurrentHashMap에는 Hashtable의 모든 메서드와 검색 및 업데이트의 전체 동시성이 포함됩니다.
ThreadSafeConcurrentHashMap은 어떻게 스레드로부터 안전해졌나요?
- java.util.Concurrent.ConcurrentHashMap 클래스는 맵을 세그먼트로 나누어 스레드 안전을 제공합니다. 이를 통해 잠금은 세그먼트당 한 번, 즉 각 스레드에 대해 한 번만 허용됩니다.
- ConcurrentHashMap의 읽기 작업에는 잠금이 필요하지 않습니다.
자세한 내용은 기사를 참조하십시오 - ConcurrentHashMap은 Java에서 스레드 안전성을 어떻게 달성합니까?
39. HashMap의 서로 다른 두 키가 동일한 hashcode()를 반환하면 어떻게 되나요?
HashMap의 서로 다른 두 키가 동일한 해시 코드를 반환하면 결국 동일한 버킷에 있게 됩니다. 따라서 충돌이 발생합니다. 충돌이 발생한 경우, 즉 두 개 이상의 노드 인덱스가 동일하고 노드는 링크 목록으로 연결됩니다. 즉 두 번째 노드는 첫 번째 노드에 의해 참조되고 세 번째 노드는 두 번째 노드에 의해 참조되는 식입니다.
자세한 내용은 기사를 참조하십시오 - Java에서 HashMap의 내부 작업
40. WeakHashMap이란 무엇입니까?
WeakHashMap은 Map 인터페이스를 구현합니다. HashMap과 달리 WeakHashMap은 키로 지정된 객체가 WeakHashMap과 연결되어 있음에도 불구하고 참조를 포함하지 않는 경우에도 가비지 수집을 허용합니다. 즉, WeakHashMap보다 Garbage Collector가 더 좋습니다.
자세한 내용은 기사를 참조하십시오 - Java의 Hashmap과 WeakHashMap 비교
41. UnsupportedOperationException이란 무엇입니까?
API 또는 목록 구현의 맥락에서 UnsupportedOperationException은 일반적인 예외입니다. 요청한 작업을 수행할 수 없으면 예외가 발생합니다. 이 클래스는 Java 컬렉션 프레임워크의 멤버입니다.
통사론:
public class UnsupportedOperationException extends RuntimeException
자세한 내용은 기사를 참조하십시오 – 지원되지 않는 작업예외
42. Java에서 컬렉션을 읽기 전용으로 만드는 방법은 무엇입니까?
읽기 전용 컬렉션을 생성하려면 개체가 데이터를 가져오기만 하고 데이터를 추가하거나 제거하지 않도록 제한해야 합니다. Java에는 수정 가능Collection(), 수정 가능 지도(), 수정 가능 세트() 등과 같은 다양한 컬렉션 유형에 대한 다양한 메소드가 있습니다. java.util.컬렉션 클래스는 모든 메소드를 정의합니다. unmodifyingCollection() 메서드는 읽기 전용 컬렉션을 생성합니다. Collection 클래스에 대한 참조가 필요합니다. Set Interface 객체가 있는 경우 다음을 사용할 수 있습니다. 수정 불가능한 집합() 읽기 전용으로 만듭니다.
자세한 내용은 기사를 참조하십시오 - Java에서 컬렉션을 읽기 전용으로 만드는 방법은 무엇입니까?
43. Java의 PriorityQueue와 TreeSet의 차이점은 무엇입니까?
| 우선순위 대기열 | 트리세트 |
|---|---|
| PriorityQueue는 JDK 1.5에 제공됩니다. | TreeSet은 JDK 1.4에 제공됩니다. |
| PriorityQueue에서 사용하는 데이터 구조는 Queue입니다. | TreeSet이 사용하는 데이터 구조는 Set입니다. |
| 중복 요소가 허용됩니다. | 중복된 요소는 허용되지 않습니다. |
| 루트 요소를 제외한 나머지 요소는 PriorityQueue의 특정 순서를 따르지 않습니다. | TreeSet에서는 모든 요소가 정렬된 순서로 유지됩니다. |
| PriorityQueue를 사용하면 O(1) 시간 내에 가장 크거나 작은 요소를 검색할 수 있습니다. | TreeSet은 O(1) 시간에 가장 큰 요소나 가장 작은 요소를 검색하는 방법을 제공하지 않지만 정렬된 순서로 되어 있으므로 O(1) 시간에 첫 번째 또는 마지막 요소를 가져옵니다. |
자세한 내용은 기사를 참조하십시오 – PriorityQueue와 TreeSet의 차이점
44. Java의 다이아몬드 연산자는 무엇입니까?
다이아몬드 연산자는 프로그램에서 확인되지 않은 경고를 피하면서 객체를 생성할 때 일반 사용을 단순화하는 데 사용됩니다. Java 7에서 Diamond 연산자가 도입되면서 아래와 같이 표현식 오른쪽에 제네릭 타입을 언급하지 않고도 객체를 생성할 수 있습니다.
통사론:
List list = new ArrayList();
자세한 내용은 기사를 참조하십시오 – 다이아몬드 오퍼레이터
45. Java에서는 TreeMap이 어떻게 작동하나요?
트리맵 키-값 쌍을 저장하지만 TreeMap은 HashMap처럼 키를 내림차순이 아닌 오름차순으로 정렬합니다. 어떤 생성자가 사용되는지에 따라 TreeMap은 키 또는 비교기에 따라 정렬됩니다. TreeMap에서 요소는 Red-Black 트리를 기반으로 정렬됩니다. 레드-블랙 트리는 각 노드에 추가 비트가 있고 해당 비트가 종종 색상(빨간색 또는 검은색)으로 해석되는 자체 균형 이진 검색 트리입니다. 이러한 색상은 삽입 및 삭제 중에 트리의 균형이 유지되도록 하는 데 사용됩니다.
Java의 노드 구조
자세한 내용은 기사를 참조하십시오 - Java에서 TreeMap의 내부 작업
46. Java에서 Map을 반복하는 방법을 나열해 보세요.
HashMap 클래스는 (Key, Value) 쌍으로 데이터를 저장하고 다른 유형의 인덱스로 액세스하여 Java의 Map 인터페이스를 제공합니다. 이 클래스를 사용하려면 다음을 가져와야 합니다. java.util.HashMap 패키지 또는 해당 슈퍼클래스.
HashMap을 반복하는 방법에는 여러 가지가 있으며 그 중 5가지가 아래에 나열되어 있습니다.
- Iterator를 사용하여 HashMap EntrySet을 반복합니다.
- Iterator를 사용하여 HashMap KeySet을 반복합니다.
- for-each 루프를 사용하여 HashMap을 반복합니다.
- 람다 표현식을 사용하여 HashMap을 반복합니다.
- Stream API를 사용하여 HashMap을 반복합니다.
자세한 내용은 기사를 참조하십시오 - Java에서 HashMap을 반복하는 방법
47. Java에서 CopyOnWriteArrayList란 무엇입니까?
Java의 CopyOnWriteArrayList
JDK 1.5에는 모든 수정 사항(추가, 설정, 제거 등)이 새 복사본으로 구현되는 CopyOnWriteArrayList라는 향상된 ArrayList 버전이 도입되었습니다. java.util.concurrent에서 찾을 수 있습니다. 동시 환경에서 사용하기 위해 만들어진 데이터 구조입니다. 스레드 기반 환경에서 CopyOnWriteArrayList는 자주 읽고 자주 업데이트하지 않는 용도로 사용됩니다. CopyOnWriteArrayList는 스레드로부터 안전한 ArrayList 버전입니다.
자세한 내용은 기사를 참조하십시오 – Java의 CopyOnWriteArrayList
48. Java의 EnumMap이란 무엇입니까?
EnumMap은 열거 유형에 특정한 Map 인터페이스의 구현입니다. EnumMap 클래스는 Java Collections Framework의 멤버이며 동기화되지 않습니다. AbstractMap을 확장하고 Java에서 Map 인터페이스를 구현합니다. EnumMap은 java.util 패키지에 속합니다.
통사론:
공개 클래스 EnumMap
AbstractMap을 확장하여 직렬화 가능, 복제 가능 구현 // K는 Enum을 확장해야 하며, 이는 키가 지정된 enum 유형이어야 한다는 요구 사항을 적용합니다.
매개변수:
- 주요 객체 유형
- 값 개체 유형
자바의 EnumMap
자세한 내용은 기사를 참조하십시오 – Java의 EnumMap 클래스
49. 해시맵은 내부적으로 어떻게 작동하나요?
HashMap은 해싱 원칙에 따라 작동합니다. HashMap에는 Node 배열이 포함되어 있으며 Node는 다음 개체가 있는 클래스를 나타낼 수 있습니다.
- 정수 해시
- K 키
- V 값
- 다음 노드
HashMap의 내부 작동:
- 해싱
- 버킷
- 해시맵의 인덱스 계산
자세한 내용은 기사를 참조하십시오 – Java에서 HashMap의 내부 작업
오십. 해시맵의 반복자가 빠른 실패로 간주되는 이유는 무엇입니까?
빠른 실패 반복자는 외부 스레드가 반복 중인 컬렉션을 수정하려고 시도하는 경우 즉시 동시 수정 예외를 발생시킵니다. 빠른 실패(fail-fast) 기능은 컬렉션 수정이 향후 비정상적인 동작으로 이어질 것을 감지하는 경우 반복자가 즉시 실패하도록 보장합니다.
빠른 실패 이 기능은 반복자가 컬렉션 수정으로 향후 어느 시점에 비정상적인 동작이 발생할 것이라고 판단하면 즉시 실패하도록 보장합니다.
예:
자바
// Java code to demonstrate remove> // case in Fail-fast iterators> > import> java.io.*;> import> java.util.ArrayList;> import> java.util.Iterator;> > public> class> GFG {> > public> static> void> main(String[] args)> > {> > ArrayList arr => new> ArrayList();> > arr.add(> 1> );> > arr.add(> 2> );> > arr.add(> 3> );> > arr.add(> 4> );> > arr.add(> 5> );> > > Iterator it = arr.iterator();> > while> (it.hasNext()) {> > if> (it.next() ==> 2> ) {> > // will not throw Exception> > it.remove();> > }> > }> > > System.out.println(arr);> > > it = arr.iterator();> > while> (it.hasNext()) {> > if> (it.next() ==> 3> ) {> > // will throw Exception on> > // next call of next() method> > arr.remove(> 3> );> > }> > }> > }> }> |
산출:
[1, 3, 4, 5] Exception in thread 'main' java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901) at java.util.ArrayList$Itr.next(ArrayList.java:851) at FailFastExample.main(FailFastExample.java:28)
결론
자바 컬렉션 Java는 다양한 산업 분야에서 널리 사용되기 때문에 Java 개발자나 프로그래머가 이를 이해하는 것이 중요합니다. 개발자가 Java 컬렉션의 핵심 개념을 확실하게 이해하는 것이 중요합니다. Java는 다음과 같은 일류 기업에서 가장 널리 사용되는 언어 중 하나입니다. 우버 , 에어비앤비 , Google , 넷플릭스 , 인스 타 그램 , 스포티 파이, 아마존 등. 이러한 회사나 다른 IT 회사에 들어가려면 Java 기반 온라인 평가 및 기술 인터뷰를 해결하기 위해 가장 많이 묻는 Java 컬렉션 인터뷰 질문을 마스터해야 합니다.
코딩 문제를 연습하고 싶다면 JAVA 컬렉션 프로그램 도움이 되는 자료가 될 수 있습니다.
Java 컬렉션 인터뷰 질문 – FAQ
1. Java 면접 질문의 컬렉션이란 무엇입니까?
Java의 컬렉션은 객체 컬렉션을 저장하고 조작하는 데 사용되는 프레임워크입니다.
2. Java의 4가지 컬렉션 클래스는 무엇입니까?
Java에는 많은 컬렉션이 있지만 그 중 가장 많이 사용되는 컬렉션은 다음과 같습니다.
- 배열목록
- 링크드리스트
- 해시세트
- 스택
3. HashMap이 중복 키를 가질 수 있나요?
아니요, HashMap은 중복 키를 가질 수 없습니다. HashMap은 Java의 컬렉션 중 하나이므로 값을 키-값 형식으로 저장하며 모든 키에는 고유한 값이 첨부되어 있습니다. 따라서 어떤 키도 두 개의 값을 가질 수 없으므로 HashMap에서 중복 키를 가질 수 없습니다.
4. 배열이 컬렉션이 아닌 이유는 무엇입니까?
배열은 컬렉션이 아니며 컬렉션과 배열 간의 기능 차이로 인해 발생하며 그 중 일부는 아래에 언급되어 있습니다.
- 일단 선언되면 배열의 크기를 변경할 수 없습니다.
- 배열은 동일한 데이터 유형 요소만 보유할 수 있습니다.
- 배열은 기본 데이터 유형과 객체를 모두 보유할 수 있지만 컬렉션에서는 래퍼 객체만 보유할 수 있습니다.