>  기사  >  Java  >  자바 컬렉션 인터뷰 질문

자바 컬렉션 인터뷰 질문

(*-*)浩
(*-*)浩원래의
2019-12-02 16:27:162946검색

자바 컬렉션 인터뷰 질문

ArrayList와 Vector의 차이점

두 클래스 모두 List 인터페이스를 구현합니다(List 인터페이스 상속 Collection 인터페이스). ), 이들은 모두 순서가 지정된 컬렉션입니다. 즉, 이 두 컬렉션에 저장된 요소의 위치가 순서대로 되어 있으며 이는 향후 위치 인덱스 번호에 따라 요소를 꺼낼 수 있는 것과 같습니다. 그 안의 데이터는 반복될 수 있습니다. (추천 공부: java 면접 질문)

이것이 HashSet과 같은 컬렉션과 가장 큰 차이점입니다. HashSet과 같은 컬렉션은 인덱스 번호로 요소를 검색할 수 없으며 중복 요소를 허용하지 않습니다.

ArrayList와 Vector의 차이점은 주로 두 가지 측면을 포함합니다. Vector는 스레드로부터 안전합니다. 즉, 해당 메서드는 스레드에 동기화되는 반면 ArrayList는 스레드에 안전하지 않으며 해당 메서드는 다음과 같습니다. 스레드 비동기.

단 하나의 스레드만 컬렉션에 액세스하는 경우 ArrayList를 사용하는 것이 가장 좋습니다. 스레드 안전성을 고려하지 않고 여러 스레드가 컬렉션에 액세스하는 경우 더 효율적이기 때문입니다. ArrayList. 스레드로부터 안전한 코드를 직접 생각하고 작성할 필요가 없기 때문에 Vector를 사용합니다.

(2) 데이터 증가:

ArrayList와 Vector는 모두 초기 용량 크기를 가지며, 저장된 요소 수가 용량을 초과하는 경우 스토리지를 늘려야 합니다. ArrayList와 Vector의 공간을 늘리고 싶을 때마다 저장 장치를 하나만 추가하는 것이 아니라 여러 개의 저장 장치를 추가합니다. 매번 추가되는 저장 장치의 수는 메모리 공간 활용도와 프로그램 효율성 사이의 균형을 이룹니다. 일정한 균형을 유지하십시오.

Vector는 기본적으로 원래 크기의 2배로 커지는데, ArrayList의 성장 전략은 문서에 명확하게 지정되어 있지 않습니다(소스 코드에서 볼 수 있듯이 원래 크기의 1.5배로 커진다는 것입니다).

ArrayList와 Vector 모두 초기 공간 크기를 설정할 수 있으며 Vector도 성장 공간 크기를 설정할 수 있지만 ArrayList는 성장 공간을 설정하는 방법을 제공하지 않습니다.

요약: 벡터는 원래 크기의 두 배로 증가하고 ArrayList는 원래 크기의 0.5배로 증가합니다. HashMap과 Hashtable의 차이점 둘 다 Map 인터페이스를 완성했습니다. 가장 큰 차이점은 HashMap이 스레드가 아닌 안전성으로 인해 하나의 스레드만 액세스할 때 효율성이 더 높다는 것입니다. 해시테이블.

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 값을 사용할 수 있습니다. 키 또는 값

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

하나는 단일 열 데이터를 저장하는 컬렉션이고 다른 하나는 키와 값을 저장하는 컬렉션 이중 열 데이터 컬렉션 목록에 저장된 데이터는 순서가 있지만 맵에 저장된 데이터는 순서가 없으며 해당 키는 반복될 수 없습니다. 그 값은 반복될 수 있습니다.

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

List, Set is, Map is not

# 🎜🎜#

List, Map, Set 인터페이스, 요소에 접근할 때 각각의 특징은 무엇인가요?

(이 유형의 질문은 두 가지 측면에서 시험 수준을 비교합니다. 하나는 내용을 진정으로 이해하는 것이고, 다른 하나는 강력한 요약 및 발표 능력을 갖추는 것입니다. )

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

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

목록은 컬렉션을 순서대로 나타냅니다. 연령, 크기, 가격 등을 기준으로 정렬되지 않습니다. add(Obje) 메소드를 여러 번 호출하면 기차역에서 티켓을 구매하는 대기열 순서와 마찬가지로 매번 추가되는 객체가 선착순으로 정렬됩니다.

때로는 대기열로 이동할 수도 있습니다. 즉, add(intindex,Obj e) 메서드를 호출하여 컬렉션에 있는 현재 개체의 저장 위치를 ​​지정할 수도 있습니다.

객체는 List에 반복적으로 저장될 수 있습니다. add 메소드가 호출될 때마다 객체가 컬렉션에 한 번씩 삽입됩니다. 실제로 객체 자체는 컬렉션에 저장되지 않고 컬렉션에 인덱스가 사용됩니다. 변수는 이 개체를 가리킵니다. 이 개체가 여러 번 추가되면 이 개체를 가리키는 컬렉션의 여러 인덱스와 같습니다.

Iterator 인터페이스를 사용하여 모든 요소를 ​​얻은 다음 각 요소를 하나씩 반복하는 것 외에도 List는 get(index i)를 호출하여 검색할 숫자를 명확하게 나타낼 수도 있습니다.

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

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

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

ArrayList, Vector, LinkedList의 저장 성능과 특징을 말해주세요

ArrayList와 Vector는 모두 배열을 사용하여 데이터를 저장하는데, 배열 요소의 개수가 실제 저장된 데이터보다 많아 요소 추가 및 삽입이 가능합니다. 둘 다 직접 시퀀스 번호 인덱스 요소를 허용하지만 요소 삽입에는 배열 요소 이동과 같은 메모리 작업이 포함되므로 데이터 인덱싱은 빠르지만 데이터 삽입은 동기화된 방법(스레드 안전성)을 사용하기 때문에 일반적으로 성능이 떨어집니다. ArrayList.

LinkedList는 저장을 위해 이중 연결 목록을 사용합니다. 일련 번호로 데이터를 인덱싱하려면 정방향 또는 역방향 순회가 필요하며 인덱스가 느려집니다. 그러나 데이터를 삽입할 때는 이 항목의 이전 항목과 이후 항목만 기록하면 됩니다. 삽입 속도가 더 빠릅니다.

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

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

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(vector);

컬렉션과 컬렉션의 차이점.

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

Collection은 컬렉션 클래스에 대한 도우미 클래스로, 검색, 정렬 및 정렬을 구현합니다. 다양한 컬렉션의 스레딩.

Set의 요소는 반복될 수 없습니다. 그렇다면 반복 여부를 구별하는 방법은 무엇입니까? == 또는 equals()를 사용해야 합니까?

Set의 요소는 반복될 수 없습니다. . 요소 중복은 equals() 메소드를 사용하여 결정됩니다.

==과 같음의 차이점도 시험에서 낙제했던 문제입니다. 여기서 얘기해 보겠습니다.

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

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

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

어떤 컬렉션 클래스를 알고 있나요? 주요 방법?

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

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

모두 추가, 삭제, 수정, 확인 방법이 있습니다. ㅋㅋㅋ Get 요소 순서대로 있을 수 있으며, set 클래스에는 get(int index)와 같은 메서드가 없습니다. List와 set 모두 모든 요소를 ​​반복할 수 있습니다. 따라서 반복자 객체를 먼저 가져와야 합니다. 따라서 set 및 list 클래스 모두 반복자 객체를 반환하기 위한 반복자 메서드가 있습니다.

Map은 세 개의 컬렉션을 반환할 수 있는데, 하나는 모든 키의 컬렉션을 반환하고, 다른 하나는 모든 값의 컬렉션을 반환하고, 세 번째는 키와 값으로 구성된 EntrySet 개체의 컬렉션을 반환합니다. Map에도 get 메서드가 있으며 매개변수는 다음과 같습니다. key , 반환 값은 키에 해당하는 값입니다. 이것은 무료 플레이이며, 프로그래밍 과정에서 프롬프트가 표시될 것입니다. 세 가지의 차이점을 기반으로 사용법에 대해 이야기하세요. .

위 내용은 자바 컬렉션 인터뷰 질문의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.