>  기사  >  Java  >  자바 고주파 기본 면접 질문 - 수집 프레임워크 부분

자바 고주파 기본 면접 질문 - 수집 프레임워크 부분

王林
王林앞으로
2020-08-28 15:49:291739검색

자바 고주파 기본 면접 질문 - 수집 프레임워크 부분

1. ArrayList와 Vector의 차이점

(자세한 인터뷰 질문 권장 사항: java 인터뷰 질문 및 답변)

두 클래스 모두 List 인터페이스를 구현합니다(List 인터페이스는 Collection 인터페이스를 상속함). 순서가 있는 집합, 즉 두 집합에 저장된 요소의 위치가 순서대로 되어 있으며 이는 동적 배열과 동일합니다. 나중에 위치 인덱스 번호에 따라 요소를 꺼낼 수 있으며 그 안의 데이터는 허용됩니다. 예, 이것이 HashSet과 같은 컬렉션과 가장 큰 차이점입니다. HashSet과 같은 컬렉션은 인덱스 번호로 요소를 검색할 수 없으며 중복 요소도 허용하지 않습니다.

ArrayList와 Vector의 차이점은 주로 두 가지 측면을 포함합니다:

(1) 동기성:

Vector는 스레드로부터 안전합니다. 즉, 해당 메서드는 스레드에 동기화되지만 ArrayList는 스레드에 안전하지 않습니다. 예, 해당 메서드는 스레드입니다. -비동기. 하나의 스레드만 컬렉션에 액세스하는 경우 ArrayList를 사용하는 것이 가장 좋습니다. 스레드 안전성을 고려하지 않고 더 효율적이기 때문입니다. 여러 스레드가 컬렉션에 액세스하는 경우에는 Vector를 사용하는 것이 가장 좋습니다. 스스로 해 보세요. 스레드로부터 안전한 코드를 다시 생각하고 작성해 보세요.

(2) 데이터 증가:

ArrayList와 Vector에는 모두 초기 용량이 있습니다. 저장된 요소 수가 용량을 초과하면 대신 공간을 저장할 때마다 ArrayList와 Vector의 저장 공간을 늘려야 합니다. 하나의 저장 장치만 추가하면 여러 저장 장치가 추가될 때마다 추가되는 저장 장치의 수는 메모리 공간 활용도와 프로그램 효율성 사이에서 일정한 균형을 이루어야 합니다.

Vector는 기본적으로 원래 크기의 2배로 커지는데, ArrayList의 성장 전략은 문서에 명확하게 명시되어 있지 않습니다(소스 코드를 보면 원래 크기의 1.5배로 커지는 것으로 나와 있습니다). ArrayList와 Vector 모두 초기 공간 크기를 설정할 수 있으며 Vector도 성장 공간 크기를 설정할 수 있지만 ArrayList는 성장 공간을 설정하는 방법을 제공하지 않습니다.

요약: 벡터는 원래 크기의 두 배로 증가하고 ArrayList는 원래 크기의 0.5배로 증가합니다.

2. HashMap과 Hashtable의 차이점

HashMap은 Hashtable의 경량 구현입니다(스레드 안전이 아닌 구현). 주요 차이점은 HashMap이 빈(null) 키 값을 허용한다는 것입니다. (키). 스레드가 안전하지 않으므로 하나의 스레드에서만 액세스할 때 효율성이 Hashtable보다 높습니다.

HashMap은 null을 항목의 키나 값으로 사용할 수 있지만 Hashtable은 그렇지 않습니다.

HashMap은 Hashtable의 포함 메소드를 제거하고 이를 포함값 및 포함키로 변경합니다. 포함 방법은 오해의 소지가 있기 때문입니다.

Hashtable은 Dictionary 클래스에서 상속되며 HashMap은 Java 1.2에 도입된 Map 인터페이스의 구현입니다.

가장 큰 차이점은 Hashtable의 메서드는 동기화되지만 HashMap은 그렇지 않다는 것입니다. 여러 스레드가 Hashtable에 액세스할 때 해당 메서드에 대한 동기화를 직접 구현할 필요가 없지만 HashMap은 동기화를 제공해야 합니다.

HashMap과 HashTable은 주로 세 가지 측면에서 나옵니다.

(1) 역사적 이유: Hashtable은 이전 Dictionary 클래스를 기반으로 하고 HashMap은 Java 1.2에 도입된 Map 인터페이스의 구현입니다.

(2) 동기성: Hashtable은 스레드로부터 안전합니다. 즉, 동기식임을 의미합니다. HashMap은 안전하지 않은 온라인 프로그램이며 동기식이 아닙니다

(3) 값: HashMap만 테이블 항목의 키 또는 값으로 null 값을 사용할 수 있습니다

(학습 동영상 권장 사항: java 강좌)

3 List와 Map의 차이점은 무엇인가요?

하나는 단일 열 데이터를 저장하는 컬렉션이고, 다른 하나는 키, 값 등 이중 열 데이터를 저장하는 컬렉션입니다. List에 저장된 데이터는 순서대로 저장됩니다. 중복; Map에 저장된 데이터에는 순서가 없으며 해당 키는 반복될 수 없으며 해당 값은 반복될 수 있습니다.

4. List, Set 및 Map은 Collection 인터페이스에서 상속됩니까?

List, Set의 경우에는 가능하지만 Map에서는 가능하지 않습니다.

5. 액세스 시 List, Map 및 Set의 각 특징은 무엇입니까? 강요?

(이런 종류의 문제는 두 가지 측면에서 시험 수준을 비교합니다. 하나는 내용을 실제로 이해하는 것이고, 다른 하나는 강력한 요약 및 프레젠테이션 기술을 가지고 있다는 것입니다.)

우선 List와 Set은 비슷합니다. 이는 단일 열 요소의 컬렉션이므로 Collection이라는 공통 상위 인터페이스를 갖습니다. Set에서는 중복 요소가 허용되지 않습니다. 즉, 두 개의 동일한(동일한 것이 아니라) 개체가 있을 수 없습니다. 즉, Set 컬렉션에 A 개체가 있고 이제 B 개체를 저장하려고 한다고 가정합니다. Set 컬렉션. 그러나 B 개체가 A 개체와 같으면 B 개체는 저장되지 않습니다.

따라서 Set 컬렉션의 add 메서드에는 부울 반환 값이 있습니다. 집합에 요소가 없고 add 메서드가 요소를 성공적으로 추가할 수 있으면 집합에 요소와 동일한 요소가 포함되어 있으면 true를 반환합니다. 같음, add 메소드는 현재 요소를 추가할 수 없으며 반환 결과는 false입니다. Set이 요소를 가져오는 경우 가져올 숫자를 지정할 수 없습니다. Iterator 인터페이스를 통해서만 모든 요소를 ​​가져온 다음 각 요소를 하나씩 반복할 수 있습니다.

목록은 컬렉션을 순서대로 나타냅니다. 연령, 크기, 가격 등을 기준으로 정렬되지 않습니다. add(Obje) 메소드를 여러 번 호출하면 기차역에서 티켓을 구매하는 대기열 순서와 마찬가지로 매번 추가되는 객체가 선착순으로 정렬됩니다. 경우에 따라 대기열로 이동할 수도 있습니다. 즉, add(intindex,Obj e) 메서드를 호출하여 컬렉션에 있는 현재 개체의 저장 위치를 ​​지정할 수도 있습니다.

객체는 List에 반복적으로 저장될 수 있습니다. add 메소드가 호출될 때마다 객체가 컬렉션에 한 번씩 삽입됩니다. 실제로 객체 자체는 컬렉션에 저장되지 않고 컬렉션에 인덱스가 사용됩니다. 변수는 이 개체를 가리킵니다. 이 개체가 여러 번 추가되면 그림 x에 표시된 대로 이 개체를 가리키는 컬렉션의 여러 인덱스와 동일합니다. Iterator 인터페이스를 사용하여 List의 모든 요소를 ​​얻은 다음 각 요소를 하나씩 반복하는 것 외에도 get(index i)를 호출하여 검색할 숫자를 명확하게 나타낼 수도 있습니다.

Map은 List 및 Set과 다릅니다. Put(obj 키, obj 값)으로 정의되는 put 메서드가 있는 이중 열 컬렉션입니다. 값은 저장되어야 하며 중복 항목은 키에 저장될 수 없습니다. 이 중복 규칙도 같음 비교를 기반으로 합니다. 해당 값은 키에 따라 얻을 수 있습니다. 즉, get(Object key)의 반환 값은 키에 해당하는 값입니다.

이 외에도 모든 키의 조합, 모든 값의 조합, 키와 값으로 구성된 Map.Entry 객체의 모음도 얻을 수 있습니다.

목록은 특정 순서로 요소를 보유하며 중복된 요소를 가질 수 있습니다. 세트는 중복된 요소를 가질 수 없으며 내부적으로 정렬됩니다. 맵은 키-값 값을 저장하며 값은 여러 값을 가질 수 있습니다.

6. ArrayList, Vector, LinkedList의 저장 성능과 특징을 알려주세요.

ArrayList와 Vector는 모두 배열을 사용하여 데이터를 추가할 수 있도록 실제 저장된 데이터보다 개수가 많습니다. 둘 다 직접 시퀀스 번호를 허용하지만 요소 삽입에는 배열 요소 이동과 같은 메모리 작업이 포함되므로 데이터 인덱싱은 빠르지만 데이터 삽입은 동기화된 방법(스레드 안전성)을 사용하므로 성능이 떨어집니다. 일반적으로 ArrayList보다 나쁩니다. LinkedList는 저장을 위해 이중 연결 리스트를 사용합니다. 데이터를 일련 번호로 인덱싱하려면 정방향 또는 역방향 순회가 필요하며 인덱스가 느려집니다. 그러나 데이터를 삽입할 때 이 항목의 앞과 뒤의 항목만 기록하면 되므로 삽입 속도가 느려집니다. 더 빠르게.

LinkedList는 스레드에 안전하지 않습니다. LinkedList는 LinkedList를 스택 및 대기열로 사용할 수 있도록 몇 가지 메서드를 제공합니다.

7. 벡터 세트에서 중복 요소 제거

Vector newVector = new Vector();
For (int i=0;i<vector.size();i++)
{
Object obj = vector.get(i);
       if(!newVector.contains(obj);
             newVector.add(obj);
}

중복 요소를 허용하지 않는 Set을 사용하는 간단한 방법도 있습니다.

HashSetset = new HashSet(벡터);

8. .

Collection은 컬렉션 클래스의 상위 인터페이스입니다. 이를 상속하는 인터페이스에는 주로 Set 및 List가 포함됩니다.

Collections는 컬렉션 클래스에 대한 도우미 클래스로 검색, 정렬 및 스레드를 구현합니다. 다양한 컬렉션 운영의 안전.

9. Set의 요소는 반복될 수 없습니다. 그렇다면 반복 여부를 구분하는 방법은 무엇인가요? 둘 사이의 차이점은 무엇인가요? . 요소 중복은 equals() 메소드를 사용하여 결정됩니다.

==와 같음의 차이점도 시험에서 낙제한 문제입니다. 여기서 이야기해 보겠습니다.

== 연산자는 두 변수의 값이 같은지 비교하는 데 특별히 사용됩니다. 즉, 변수에 해당하는 메모리에 저장된 값을 비교하는 데 사용됩니다. 값이 동일한지, 두 가지 기본 유형의 데이터를 비교하거나 두 참조 변수가 동일한지 여부만 확인할 수 있습니다. == 연산자를 사용하세요.

equals 메서드는 두 사람의 외모가 동일한지 비교하는 것과 마찬가지로 두 개의 독립된 개체의 내용이 동일한지 비교하는 데 사용됩니다.


예: 두 개의 새로운 문은 두 개의 객체를 생성한 다음 두 개의 변수 a/b를 사용하여 각각 객체 중 하나를 가리키며, 두 객체의 첫 번째 주소는 서로 다릅니다. 즉, a와 값입니다. b에 저장된 값은 다르므로 a==b 표현식은 false를 반환하고 두 객체의 내용은 동일하므로 a.equals(b) 표현식은 true를 반환합니다.

(관련 튜토리얼 추천 :

Java 입문 튜토리얼

)10. 여러분이 알고 있는 컬렉션 클래스는 무엇인가요? 주요 방법?

가장 일반적으로 사용되는 컬렉션 클래스는 List와 Map입니다. List의 특정 구현에는 가변 크기 목록인 ArrayList 및 Vector가 포함되며 모든 유형의 개체에 대한 요소 목록을 구성, 저장 및 조작하는 데 더 적합합니다. 목록은 숫자 인덱스로 요소에 액세스하는 데 적합합니다.

Map은 요소를 저장하는 보다 일반적인 방법을 제공합니다. Map 컬렉션 클래스는 각 키가 값에 매핑되는 요소 쌍("키" 및 "값"이라고 함)을 저장하는 데 사용됩니다.

모두 추가, 삭제, 수정, 확인 방법이 있습니다.

set의 경우 일반 메소드는 add,remove, contain 등입니다.

map의 경우 일반 메소드는 put,remove, contain 등입니다.

List 클래스에는 요소를 순서대로 가져올 수 있으므로 get(int index)와 같은 메서드가 있지만, set 클래스에는 get(int index)와 같은 메서드가 없습니다. List와 set은 모두 모든 요소를 ​​반복할 수 있습니다. 따라서 반복자 객체를 먼저 가져와야 합니다. 따라서 set 및 list 클래스 모두 반복자 객체를 반환하기 위한 반복자 메서드가 있습니다. Map은 세 개의 컬렉션을 반환할 수 있습니다. 하나는 모든 키의 컬렉션을 반환하고, 다른 하나는 모든 값의 컬렉션을 반환하고, 세 번째는 키와 값으로 구성된 EntrySet 객체의 컬렉션을 반환합니다. Map에도 get 메서드가 있으며 매개변수는 key입니다. 반환 값은 키에 해당하는 값입니다. 이것은 자유로운 플레이의 문제이며 프로그래밍 과정에서 차이점에 따라 사용법에 대해 이야기합니다. 세.

위 내용은 자바 고주파 기본 면접 질문 - 수집 프레임워크 부분의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제