2013-05-09 3 views
0

이 두 가지의 차이점은 무엇입니까? 그렇다면 무엇입니까?선언에서 List와 ArrayList의 차이점은 무엇입니까?

List<Integer> x = new ArrayList<Integer>(); 

ArrayList<Integer> x = new ArrayList<Integer>(); 
+5

이 질문은 여러 번 질문되었습니다! –

+0

사람들은 dup 질문과 2 개의 답이있는 것을 볼 수 있지만 여전히 다른 대답을 게시하고 싶습니다. –

답변

2

첫 번째 선언을 통해 인터페이스 프로그래밍을 할 수 있습니다. 나중에 ArrayList을 안전하게 말하면 LinkedList으로 바꿀 수 있으며 나머지 코드는 컴파일 될 것입니다.

두 번째 선언을 사용하면 클래스에 프로그래밍 할 수 있으므로 List 인터페이스를 구현하지 않는 ArrayList 메서드를 잠재적으로 사용할 수 있습니다. 예를 들어 ArrayList으로 선언 된 목록에서는 ensureCapacity()을 호출 할 수 있지만 List으로 선언 된 목록에서는 호출 할 수 없습니다. 일반적으로 인터페이스 프로그래밍이 선호되지만 클래스 별 메서드를 호출해야하는 경우 잘못 입력하지 않아도됩니다. 예를 들어 ensureCapacity()을 호출하면 목록의 새 대상 크기를 알면 불필요한 재 할당을 줄일 수 있습니다. 당신이 인터페이스 코드 경우

0

전자가 바람직하다. 필드에 의존하는 코드를 변경하지 않고 구현을 변경할 수 있습니다. 효과적인 자바에서

, 여호수아 블로흐는 말한다 : 적절한 인터페이스 유형이 존재

경우, 매개 변수, 반환 값, 변수 및 필드는 모든 인터페이스 유형을 사용하여 선언해야합니다.

... 당신은 유형과 같은 인터페이스를 사용하는 습관을 얻는 경우에

, 프로그램은 훨씬 더 유연합니다.

0

는 당신이 X을 할 수

List<Integer> x = new ArrayList<Integer>(); 

지금 LinkedList의 또는 코드의 한 라인 목록의 다른 구현을 가리 많은 번거 로움없이 구현을 변경할 수 있습니다. ArrayList에있는 특정 메서드가 필요한 경우에는 왼쪽에 ArrayList를 사용하는 것이 좋습니다. 100 중 99 시간은 그렇게 목록 ArrayList

0

는 당신이 intitalsize을 지정할 수 있습니다 바람직하고 늘 생각하고 그래서 ArrayList를 현재 size.With List<Integer>에 크기를 트림 trimToSize() 방법 당신이 크기를 트리밍 할 수 없습니다있다 당신이 그것을 다시 캐스팅하지 않는 한 ArrayList